Picasawebservice Java аутентификация запрещена
Мой ранее работающий код picasawebservice не удался, когда Google переключился на аутентификацию OAuth 2.
Я изменил код, чтобы использовать учетные данные Goodle, для которых мне нужно было настроить учетную запись службы.
Хотя при добавлении учетных данных в объект PicasawebService ошибки не возвращаются, но я не могу добавить фотографии в свой альбом.
Я получил список альбомов, используя URL https://picasaweb.google.com/data/feed/api/user/xxx?kind=album но он возвращает только общедоступный альбом профиля, а не другие альбомы в аккаунте, также, когда я использую идентификатор альбома, возвращенный фидом, я получаю ошибку "Доступ запрещен", когда я пытаюсь вставить фотографию. (ххх - я использовал как идентификатор пользователя, так и адрес электронной почты для учетной записи и получаю одинаковый результат в каждом случае).
Мне удалось установить идентификаторы alubum для личных альбомов в учетной записи, но при попытке вставить их также не удалось.
Код
String emailAddress = "-- the email address from the Google Developers console for the credential --";
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
GoogleCredential credential = null;
try {
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
String[] SCOPESArray = {"https://picasaweb.google.com/data","http://picasaweb.google.com/data/feed/api"};
final List<String> SCOPES = Arrays.asList(SCOPESArray);
credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(emailAddress)
.setServiceAccountPrivateKeyFromP12File(new File("-- the p12 key file --"))
.setServiceAccountScopes(SCOPES)
.build();
} catch (GeneralSecurityException ex) {
logger.error("processUpload: Error getting Google credential " + accountBean.getZuzzAccountId() + " - " + accountBean.getAccountTitle() + " - " + ex.toString());
uploadMessage = "Error getting a connection to the photo store - please see the administratior";
return;
}
credential.refreshToken();
String accessToken = credential.getAccessToken();
PicasawebService myService = new PicasawebService("Zuzz-ZuzzClub-1.2");
myService.setOAuth2Credentials(credential);
URL albumPostUrl = null;
try {
albumPostUrl = new URL("https://picasaweb.google.com/data/feed/api/user/-- my user id --/albumid/-- album id returned from feed --");
} catch (MalformedURLException ex) {
logger.error("processUpload: Error getting album post url for account " + accountBean.getZuzzAccountId() + " - " + accountBean.getAccountTitle() + " - " + ex.toString());
uploadMessage = "Error getting a connection to the photo store - please see the administratior";
return;
}
PhotoEntry myPhoto = new PhotoEntry();
myPhoto.setTitle(new PlainTextConstruct(fileName));
myPhoto.setDescription(new PlainTextConstruct(months.get(Integer.valueOf(editionMonth).intValue()) + " " + editionYear));
myPhoto.setClient("ZuzzClub");
MediaStreamSource myMedia = null;
myMedia = new MediaStreamSource(imageInStream,"image/jpeg");
if (myMedia == null) {
logger.error("processUpload: Error generating the thumbnail photo - null media source for account " + accountBean.getZuzzAccountId() + " - " + accountBean.getAccountTitle());
uploadMessage = "Error generating the thumbnail photo - please see the administratior";
return;
}
myPhoto.setMediaSource(myMedia);
thumbNailUrl = null;
try {
PhotoEntry returnedPhoto = myService.insert(albumPostUrl, myPhoto);
ArrayList<MediaContent> mediaContent = (ArrayList<MediaContent>) returnedPhoto.getMediaContents();
thumbNailUrl = mediaContent.get(0).getUrl();
} catch (IOException ex) {
logger.error("processUpload: Error adding photo to Photo store for account " + accountBean.getZuzzAccountId() + " - " + accountBean.getAccountTitle() + " - " + ex.toString());
uploadMessage = "Error generating the thumbnail photo - please see the administratior";
return;
} catch (ServiceException ex) {
logger.error("processUpload: Error adding photo to Photo store for account " + accountBean.getZuzzAccountId() + " - " + accountBean.getAccountTitle() + " - " + ex.toString());
uploadMessage = "Error generating the thumbnail photo - please see the administratior";
return;
} finally {
imageInStream.close();
}
Похоже, проблема заключается в том, что аутентификация не предоставила разрешения на выполнение вставки, однако для учетной записи службы установлено значение "Можно редактировать" в консоли разработчика Google.
Есть ли способ узнать, какие разрешения у службы после применения учетных данных?
Кому-нибудь удалось добавить фотографии в альбом Picasa после изменения аутентификации?