Руководство разработчика: Java

Важно : Это старая версия этой страницы. Для получения последней версии используйте ссылки на левой панели навигации.

API данных Blogger позволяет клиентским приложениям просматривать и обновлять контент Blogger в виде фидов API данных Google.

Ваше клиентское приложение может использовать API данных Blogger для создания новых сообщений в блогах, редактирования или удаления существующих сообщений в блогах и запроса сообщений в блогах, соответствующих определенным критериям.

В дополнение к некоторым сведениям о возможностях API данных Blogger в этом документе приводятся примеры основных взаимодействий API данных с использованием клиентской библиотеки Java . Если вам интересно узнать больше о базовом протоколе, используемом библиотекой, см. раздел « Протокол» этого руководства разработчика.

Содержание

Аудитория

Этот документ предназначен для программистов, которые хотят писать клиентские приложения Java, которые могут взаимодействовать с Blogger.

В этом документе предполагается, что вы понимаете общие идеи протокола API данных Google .

Справочную информацию о классах и методах, предоставляемых клиентской библиотекой, см. в справочнике по API клиентской библиотеки Java . Общие справочные сведения об API данных Blogger см. в справочном руководстве по протоколу .

Начиная

Справку по настройке клиентской библиотеки см. в Руководстве по началу работы .

Для клиентской библиотеки Java требуется Java 1.5. После загрузки клиентской библиотеки вы найдете классы, необходимые для начала работы, в файле java/lib/gdataclient-1.0.jar .

Создание учетной записи блогера

Вы можете зарегистрировать учетную запись Blogger в целях тестирования. Blogger использует учетные записи Google , поэтому, если у вас уже есть учетная запись Google, все готово.

Запуск примера кода

Полный рабочий пример клиента, содержащий весь пример кода, показанный в этом документе, доступен в дистрибутиве клиентской библиотеки Java в каталоге gdata/java/sample/blogger/BloggerClient.java . Инструкции по сборке и выполнению находятся в одном каталоге в файле README.txt .

Образец клиента выполняет несколько операций в предоставленном блоге, чтобы продемонстрировать использование API данных Blogger.

Чтобы скомпилировать примеры из этого документа в собственный код, вам понадобятся следующие операторы import :

import com.google.gdata.client.*;
import com.google.gdata.data.*;
import com.google.gdata.util.*;
import java.io.IOException;
import java.net.URL;

Аутентификация в службе Blogger

Вы можете получить доступ как к общедоступным, так и к частным фидам с помощью Blogger Data API. Общедоступные каналы не требуют аутентификации, но доступны только для чтения. Если вы хотите изменить блоги, ваш клиент должен пройти аутентификацию, прежде чем запрашивать частные каналы. Он может аутентифицироваться с использованием любого из двух подходов: аутентификация прокси-сервера AuthSub или аутентификация имени пользователя/пароля ClientLogin .

Дополнительные сведения об аутентификации с помощью Google Data API в целом см. в документации по аутентификации .

В большинстве примеров в последующих разделах этого документа предполагается, что у вас есть аутентифицированный объект GoogleService .

Аутентификация прокси-сервера AuthSub

Прокси-аутентификация AuthSub используется веб-приложениями, которым необходимо аутентифицировать своих пользователей в учетных записях Google. Оператор веб-сайта и клиентский код не имеют доступа к имени пользователя и паролю пользователя Blogger; вместо этого клиент получает специальные токены AuthSub, которые позволяют клиенту действовать от имени определенного пользователя. Более подробную информацию смотрите в документации AuthSub .

Когда пользователь впервые посещает ваше приложение, он еще не прошел аутентификацию. В этом случае вам нужно отобразить некоторую информацию и ссылку, направляющую пользователя на страницу Google для аутентификации вашего запроса на доступ к их блогам. Клиентская библиотека Java предоставляет функцию для создания URL-адреса страницы Google. Код ниже извлекает URL-адрес страницы AuthSubRequest:

String next = "http://www.example.com/welcome.html";
String scope = "http://www.blogger.com/feeds/";
boolean secure = false;
boolean session = true;
String authSubLogin = AuthSubUtil.getRequestUrl(next, scope, secure, session);

Метод getRequestUrl принимает следующие параметры (соответствующие параметрам запроса, используемым обработчиком AuthSubRequest):

следующий
URL-адрес страницы, на которую Google должен перенаправить пользователя после аутентификации.
сфера
Указывает, что приложение запрашивает токен для доступа к каналам Blogger. Используемая строка области видимости — http://www.blogger.com/feeds/ (разумеется, в кодировке URL).
безопасный
Указывает, запрашивает ли клиент маркер безопасности.
сеанс
Указывает, можно ли обменять возвращенный токен на многоцелевой (сеансовый) токен.

В приведенном выше примере показан вызов, который не запрашивает безопасный токен (значение secure равно false ). Результирующий URL-адрес запроса может выглядеть следующим образом:

https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fwww.blogger.com%2Ffeeds%2F&session=1&secure=0&next=http%3A%2F%2Fwww.example.com%2Fwelcome.html

Пользователь переходит по ссылке на сайт Google и аутентифицируется в своей учетной записи Google.

После аутентификации пользователя система AuthSub перенаправляет его на URL-адрес, указанный в next параметре запроса URL-адреса AuthSubRequest. Система AuthSub добавляет токен проверки подлинности к этому URL-адресу в качестве значения параметра запроса token . Например:

http://www.example.com/welcome.html?token=yourAuthToken

Это значение токена представляет одноразовый токен AuthSub. В этом примере, поскольку было указано session = true , этот токен можно обменять на токен сеанса AuthSub, вызвав службу AuthSubSessionToken следующим образом, где urlFromAuthSub — это URL-адрес, к которому AuthSub добавил токен:

String token = AuthSubUtil.getTokenFromReply(urlFromAuthSub);
String sessionToken = AuthSubUtil.exchangeForSessionToken(token, null);

То есть вы передаете свой одноразовый токен методу exchangeForSessionToken вместе с null значением (для незарегистрированного режима) или закрытым ключом (для зарегистрированного режима), а интерфейс AuthSub возвращает токен сеанса. Дополнительные сведения о зарегистрированных приложениях и закрытых ключах см. в разделе « Подписание запросов » документации AuthSub.

После этого ваше приложение сможет использовать маркер сеанса при последующих взаимодействиях с Blogger. Чтобы указать клиентской библиотеке Java автоматически отправлять токен сеанса с каждым запросом, вызовите метод GoogleService объекта setAuthSubToken :

GoogleService.setAuthSubToken(sessionToken, null);

После этого клиентская библиотека автоматически отправляет токен вместе с каждым запросом.

Аутентификация имени пользователя/пароля ClientLogin

Используйте аутентификацию ClientLogin, если ваш клиент является автономным, однопользовательским «установленным» клиентом (например, настольным приложением). Просто вызовите метод setUserCredentials для вашего объекта GoogleService и все последующие взаимодействия с Blogger будут аутентифицированы:

GoogleService myService = new GoogleService("blogger", "exampleCo-exampleApp-1");
myService.setUserCredentials("user@example.com", "secretPassword");

В приведенном выше фрагменте мы передаем два параметра конструктору GoogleService . Первый параметр — это имя службы, с которой мы хотим взаимодействовать. Второй параметр — это имя нашего приложения в виде companyNameapplicationNameversionID .

Дополнительные сведения об аутентификации ClientLogin, включая примеры запросов и ответов, см. в документации по аутентификации для установленных приложений .

Примечание . Используйте один и тот же токен для всех запросов в данном сеансе; не приобретайте новый токен для каждого запроса Blogger.

Примечание . Как описано в документации ClientLogin, запрос аутентификации может завершиться ошибкой и запросить проверку CAPTCHA. Если вы хотите, чтобы Google выдавал и обрабатывал запрос CAPTCHA, отправьте пользователя на https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (а не на URL-адрес обработки CAPTCHA, указанный в документации ClientLogin).

Получение списка блогов

API данных Blogger предоставляет фид, в котором перечислены блоги определенного пользователя; этот канал известен как «метаканал».

Следующий пример кода использует аутентифицированный объект GoogleService для получения метаканала, а затем печатает заголовок каждого блога.

public static void printUserBlogs(GoogleService myService)
    throws ServiceException, IOException {

  // Request the feed
  final URL feedUrl = new URL("http://www.blogger.com/feeds/default/blogs");
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
  }
}

Обратите внимание на URL-адрес, используемый методом getFeed . Это URL метафида по умолчанию; он возвращает список блогов для текущего аутентифицированного пользователя. Чтобы получить доступ к каналу для другого пользователя, вы можете указать идентификатор пользователя вместо значения по default в URL-адресе метаканала. Идентификатор пользователя — это строка цифр в конце URL-адреса профиля пользователя.

Создание постов

API данных Blogger позволяет создавать и публиковать новые записи в блогах, а также создавать черновики записей.

Примечание . Установка собственного автора для сообщений в настоящее время не поддерживается. Все новые сообщения будут отображаться так, как если бы они были созданы текущим аутентифицированным пользователем.

Публикация сообщения в блоге

Вы можете использовать клиентскую библиотеку Java для публикации новых записей в блоге.

Сначала создайте объект Entry для представления сообщения в блоге. Затем вы можете установить заголовок, содержание и другие атрибуты сообщения в блоге. Наконец, используйте объект GoogleService , чтобы вставить сообщение. Вот пример того, как опубликовать новую запись в блоге:

public static Entry createPost(
    GoogleService myService, String blogID, String title,
    String content, String userName)
    throws ServiceException, IOException {
  // Create the entry to insert
  Entry myEntry = new Entry();
  myEntry.setTitle(new PlainTextConstruct(title));
  myEntry.setContent(new PlainTextConstruct(content));

  // Ask the service to insert the new entry
  URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  return myService.insert(postUrl, myEntry);
}

Метод insert принимает URL-адрес сообщения службы в качестве параметра. Затем метод возвращает запись в том виде, в каком она была сохранена в Blogger. Возвращается та же запись, которую вы отправили, но она также содержит различные элементы, добавленные Blogger, например идентификатор сообщения.

Если по какой-либо причине ваш запрос не будет выполнен, Blogger может вернуть другой код состояния. Информацию о кодах состояния см. в справочном документе по протоколу API данных Google .

Создание черновика сообщения в блоге

Черновики сообщений создаются так же, как общедоступные сообщения, но вам необходимо установить атрибут draft объекта Entry . Вы можете создать сообщение в блоге, подобное приведенному выше, в виде черновика, добавив выделенную строку:

public static Entry createPost(GoogleService myService, String blogId,
    String title, String content, String userName,
    Boolean isDraft)
    throws ServiceException, IOException {
  // Create the entry to insert
  Entry myEntry = new Entry();
  myEntry.setTitle(new PlainTextConstruct(title));
  myEntry.setContent(new PlainTextConstruct(content));
  myEntry.setDraft(isDraft);

  // Ask the service to insert the new entry
  URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  return myService.insert(postUrl, myEntry);
}

Вы можете превратить существующий черновик сообщения в блоге в опубликованное сообщение, получив черновик сообщения, установив для атрибута черновика значение false, а затем обновив сообщение. Мы рассмотрим получение и обновление сообщений в следующих двух разделах.

Получение сообщений

В следующих разделах описано, как получить список сообщений блога с параметрами запроса и без них.

Вы можете запросить общедоступную ленту Blogger без аутентификации. Поэтому вам не нужно вызывать метод setUserCredentials или выполнять аутентификацию AuthSub перед получением сообщений из общедоступного блога.

Получение всех сообщений в блоге

Чтобы получить сообщения пользователя, вызовите тот же метод getFeed , который использовался для получения метафида блогов, но на этот раз отправьте URL-адрес фида блога:

public static void printAllPosts(
    GoogleService myService, String blogId)
    throws ServiceException, IOException {
  // Request the feed
  URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
  }
  System.out.println();
}

Получение сообщений с использованием параметров запроса

API данных Blogger позволяет запрашивать набор записей, соответствующих заданным критериям, например, запрашивать сообщения в блоге, опубликованные или обновленные в указанном диапазоне дат. Для этого вы создаете объект Query и передаете его методу GoogleService.getQuery .

Например, чтобы отправить запрос диапазона дат, используйте методы setPublishedMin и setPublishedMax объекта Query . Следующий фрагмент кода выводит заголовок каждой записи в блоге, опубликованной между заданным временем начала и временем окончания:

public static void printDateRangeQueryResults(
    GoogleService myService, String blogId,
    DateTime startTime, DateTime endTime)
    throws ServiceException, IOException {
  // Create query and submit a request
  URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  Query myQuery = new Query(feedUrl);
  myQuery.setPublishedMin(startTime);
  myQuery.setPublishedMax(endTime);
  Feed resultFeed = myService.query(myQuery, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText() +
      " posts between " + startTime + " and " + endTime);
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
    System.out.println("\t" + entry.getUpdated().toStringRfc822());
  }
  System.out.println();
}

Обратите внимание, что объект Query создан с использованием того же URL-адреса канала сообщений, который используется для получения сообщений.

API данных Blogger поддерживает следующие методы Query :

добавитьCategoryFilter
Укажите категории (также известные как метки) для фильтрации результатов фида. Например, http://www.blogger.com/feeds/ blogID /posts/default/-/Fritz/Laurie возвращает записи с ярлыками Fritz и Laurie .
setMaxResults
Установите максимальное количество возвращаемых записей.
setPublishedMin, setPublishedMax
Установите границы дат публикации записей.
setStartIndex
Установите отсчитываемый от 1 индекс первого извлекаемого результата (для разбиения по страницам).
setUpdatedMin, setUpdatedMax
Установите границы дат обновления записей. Эти параметры запроса игнорируются, если для параметра orderby не задано значение updated .

Примечание . В настоящее время нет установщиков для параметра запроса orderby . Однако вы все равно можете использовать метод Query.addCustomParameter() , если вам нужно установить это.

Дополнительные сведения о параметрах запроса см. в Справочном руководстве по API данных Blogger и Справочном руководстве по API данных Google .

Обновление сообщений

Чтобы обновить существующую запись в блоге, сначала извлеките запись, которую хотите обновить, затем измените ее, а затем отправьте в Blogger с помощью метода update . Следующий фрагмент кода изменяет заголовок записи блога, предполагая, что вы уже получили запись с сервера.

public static Entry updatePostTitle(
    GoogleService myService, Entry entryToUpdate, String newTitle)
    throws ServiceException, IOException {
  entryToUpdate.setTitle(new PlainTextConstruct(newTitle));
  URL editUrl = new URL(entryToUpdate.getEditLink().getHref());
  return myService.update(editUrl, entryToUpdate);
}

Приведенный выше код возвращает Entry , содержащую всю недавно обновленную запись. Чтобы обновить любые другие свойства, просто установите их в объекте Entry перед вызовом update .

Примечание . Изменение данных об авторе, связанных с сообщениями, в настоящее время не поддерживается.

Удаление сообщений

Чтобы удалить сообщение, передайте URL-адрес редактирования сообщения методу delete вашего объекта GoogleService , например:

public static void deletePost(
    GoogleService myService, String editLinkHref)
    throws ServiceException, IOException {
  URL deleteUrl = new URL(editLinkHref);
  myService.delete(deleteUrl);
}

Комментарии

API данных Blogger позволяет создавать, извлекать и удалять комментарии. Обновление комментариев не поддерживается (и недоступно в веб-интерфейсе).

Создание комментариев

Чтобы опубликовать комментарий, создайте объект Entry и вставьте его следующим образом:

public static Entry createComment(
    GoogleService myService, String blogID, String postId,
    String commentText)
    throws ServiceException, IOException {
  // Build the comment feed URI
  String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default";
  URL feedUrl = new URL(commentsFeedUri);

  // Create a new entry for the comment and submit it to the GoogleService
  Entry myEntry = new Entry();
  myEntry.setContent(new PlainTextConstruct(commentText));
  return myService.insert(feedUrl, myEntry);
}

Примечание . В настоящее время вы можете публиковать комментарии только в блоге, принадлежащем авторизованному пользователю.

Примечание . В настоящее время установка собственного автора для комментариев не поддерживается. Все новые комментарии будут отображаться так, как если бы они были созданы пользователем, прошедшим проверку подлинности в данный момент.

Получение комментариев

Вы можете получить комментарии к определенному сообщению по URL-адресу фида комментариев к сообщению:

public static void printAllComments(
    GoogleService myService, String blogID, String postId)
    throws ServiceException, IOException {
  // Build comment feed URI and request comments on the specified post
  String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default";
  URL feedUrl = new URL(commentsFeedUri);
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Display the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" +
        ((TextContent) entry.getContent()).getContent().getPlainText());
    System.out.println("\t" + entry.getUpdated().toStringRfc822());
  }
  System.out.println();
}

Или вы можете получить комментарии ко всем сообщениям, используя URL-адрес фида комментариев блога:

http://www.blogger.com/feeds/blogID/comments/default

Удаление комментариев

Чтобы удалить комментарий, передайте URL-адрес редактирования комментария методу delete вашего объекта GoogleService следующим образом:

public static void deleteComment(GoogleService myService, String editLinkHref)
    throws ServiceException, IOException {
  URL deleteUrl = new URL(editLinkHref);
  myService.delete(deleteUrl);
}

Вернуться к вершине