Отчаянно надеясь, что кто-то может помочь.API сайтов Google - Java - Получение фида контента с использованием GoogleCredential
Я использую библиотеку gdata (Java) вместе с Oauth2 и объектом GoogleCredential для возврата SiteFeed моего личного сайта Google (не в домене Apps). SiteFeed возвращается штраф.
Теперь я хочу использовать тот же GoogleCredential для извлечения ContentFeed для того же сайта. Проблема в том, что фид кажется пустым. У меня нет других сообщений.
Вот что я сделал:
- Открыл Dev консоль
- создал проект
- создал учетную запись службы
- выгружен файл P12 для учетной записи службы
- Enabled набора API для проекта
- Установите, чтобы мой пользователь учетной записи службы имел делегированные полномочия
- На моем сайте Google я предоставил учетную запись пользователя разрешение «владелец» же обслуживание на мой сайте корень
Это должно означать, что пользователь услуг может в принципе сделать что-нибудь (я думаю).
В моем классе Java I:
Создать GoogleCredential объект и добавить его к объекту SitesService
static SitesService service; public static void setSiteAuthenticationService(...all string values...){ SITES_FEED_URL = new URL(urlString); File p12 = new File(p12Location); HttpTransport httpTransport = new NetHttpTransport(); JacksonFactory jsonFactory = new JacksonFactory(); String[] SCOPESArray = {scopeUrl}; final List SCOPES = Arrays.asList(SCOPESArray); GoogleCredential credential = new GoogleCredential.Builder() .setTransport(httpTransport) .setJsonFactory(jsonFactory) .setServiceAccountId(accountId) .setServiceAccountScopes(SCOPES) .setServiceAccountPrivateKeyFromP12File(p12) .build(); service = new SitesService("pgts-search"); service.setOAuth2Credentials(credential); //service.useSsl(); service.setConnectTimeout(120000); }
Позвоните, чтобы получить поток сайта с использованием проверенного сервиса (это работает)
siteFeed = service.getFeed(SITES_FEED_URL, SiteFeed.class);
Позвоните, чтобы получить ленту содержимого сайта используя ту же услугу аутентификации (это не работает)
//iterate over the site entries for (SiteEntry siteEntry : feedly.getEntries()){ //for each entry grab the content feed ContentFeed contentFeed = getContentFeed(sitesDomain, siteEntry.getSiteName().getValue()); } //and then, iterate over each WebPageEntry (adding to an XML string) for (WebPageEntry entry : contentFeed.getEntries(WebPageEntry.class)) { log.error("Found web page entry."); xmlString = ""; xmlString += "<doc>"; xmlString += "<title>" + entry.getTitle().getPlainText() + "</title>"; xmlString += "</doc>"; }//end of for loop
По существу, после того, как все это, строка «xmlString» пуста. Это похоже на попытку захвата фида контента, но что-то его останавливает.
Я знаю, что для этого тестового сайта есть пара основных страниц с простым текстом на них.
Может ли кто-нибудь помочь? Может ли это быть фактом, что у моего пользователя учетной записи службы нет разрешений на захват Content Feed? Даже если мы используем GoogleCredential, который ранее позволял мне захватывать фид сайта?
Возможно, существует ли способ проверить, действительно ли был доставлен канал контента? Прямо сейчас у меня просто пустая строка!
Я бы очень признателен за любую помощь, которую вы могли бы дать.
Большое спасибо