Важно : это старая версия этой страницы. Для получения последней версии используйте ссылки на левой панели навигации.
API данных Blogger позволяет клиентским приложениям просматривать и обновлять контент Blogger в виде каналов API данных Google.
Ваше клиентское приложение может использовать API данных Blogger для создания новых сообщений в блоге, редактирования или удаления существующих сообщений в блоге, а также запроса сообщений в блоге, соответствующих определенным критериям.
Помимо общей информации о возможностях API данных Blogger, в этом документе приводятся примеры базового взаимодействия API данных с использованием клиентской библиотеки .NET . Если вы хотите узнать больше о базовом протоколе, который использует библиотека, см. раздел «Протокол» данного руководства для разработчиков.
Содержание
Аудитория
Этот документ предназначен для программистов, желающих писать клиентские приложения .NET, способные взаимодействовать с Blogger.
В этом документе предполагается, что вы понимаете общие идеи протокола API данных Google .
Справочную информацию о классах и методах, предоставляемых клиентской библиотекой, см. в справочнике по API клиентской библиотеки .NET . Общую справочную информацию по API данных Blogger см. в справочном руководстве по протоколу .
Начиная
Для получения помощи по настройке клиентской библиотеки см. Руководство по началу работы .
Чтобы использовать клиентскую библиотеку .NET, вам понадобится среда выполнения .NET 1.1, а также вы должны быть в курсе всех исправлений. После загрузки клиентской библиотеки вы найдете библиотеки DLL, необходимые для начала работы, в подкаталоге lib/Release
дистрибутива.
Создание учетной записи Blogger
Возможно, вы захотите зарегистрировать учетную запись Blogger в целях тестирования. Blogger использует учетные записи Google , поэтому, если у вас уже есть учетная запись Google, все готово.
Запуск примера кода
Полный рабочий образец клиента, содержащий весь пример кода, показанный в этом документе, доступен в проекте клиентской библиотеки .NET. Образец находится по адресу /trunk/clients/cs/samples/blogger/ConsoleSample.cs на вкладке «Источник» репозитория SVN.
Прежде чем компилировать и запускать этот пример, обновите значения username
, password
, blogName
и postId
соответствующими значениями. Значения username
и password
представляют собой учетные данные, используемые для входа в Blogger. Значение blogName
— это начало URL-адреса блога вашего блога.
Пример клиента выполняет несколько операций с предоставленным блогом, чтобы продемонстрировать использование API данных Blogger.
Чтобы скомпилировать примеры из этого документа в свой собственный код, вам потребуются следующие операторы using
:
using Google.GData.Client; using System.Net; using System.Xml; using System.Text.RegularExpressions;
Аутентификация в сервисе Blogger
Вы можете получить доступ как к общедоступным, так и к частным каналам с помощью API данных Blogger. Публичные каналы не требуют аутентификации, но доступны только для чтения. Если вы хотите изменить блоги, вашему клиенту необходимо пройти аутентификацию перед запросом частных каналов. Он может аутентифицироваться, используя любой из двух подходов: аутентификацию прокси-сервера AuthSub или аутентификацию имени пользователя и пароля ClientLogin .
Дополнительную информацию об аутентификации с помощью API данных Google в целом см. в документации по аутентификации .
Аутентификация прокси-сервера AuthSub
Аутентификация прокси-сервера AuthSub используется веб-приложениями, которым необходимо аутентифицировать своих пользователей в учетных записях Google. Оператор веб-сайта и клиентский код не имеют доступа к имени пользователя и паролю пользователя Blogger; вместо этого клиент получает специальные токены AuthSub, которые позволяют клиенту действовать от имени конкретного пользователя. Более подробную информацию смотрите в документации AuthSub .
Когда пользователь впервые посещает ваше приложение, он еще не прошел аутентификацию. В этом случае вам необходимо отобразить некоторую информацию и ссылку, направляющую пользователя на страницу Google для подтверждения вашего запроса на доступ к их блогам.
Предположим, на вашей странице определена следующая гиперссылка ASP:
<asp:HyperLink ID="GotoAuthSubLink" runat="server"/>
Затем, чтобы создать URL-адрес AuthSubRequest для вашего приложения, выполните вызов клиентской библиотеки .NET следующим образом:
GotoAuthSubLink.Text = "Login to your Google Account"; GotoAuthSubLink.NavigateUrl = AuthSubUtil.getRequestUrl("http://www.example.com/RetrieveToken", "http://www.blogger.com/feeds/", false, true);
Метод 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%2FRetrieveToken
Пользователь переходит по ссылке на сайт Google и авторизуется в своей учетной записи Google.
После аутентификации пользователя система AuthSub перенаправляет его на URL-адрес, указанный в next
параметре запроса URL-адреса AuthSubRequest. Система AuthSub добавляет токен аутентификации к этому URL-адресу в качестве значения параметра запроса token
. Таким образом, токен доступен как переменная в объекте Request.QueryString
страницы ASP. Пользователь перенаправляется на URL-адрес, который выглядит следующим образом:
http://www.example.com/RetrieveToken?token=yourAuthToken
Это значение токена представляет собой одноразовый токен AuthSub. В этом примере, поскольку был указан session = true
, этот токен можно обменять на токен сеанса AuthSub следующим образом:
SessionsessionToken = AuthSubUtil.exchangeForSessionToken(Request.QueryStringtoken, null);
То есть вы передаете свой одноразовый токен методу exchangeForSessionToken
вместе с null
(для незарегистрированного режима) или закрытым ключом (для зарегистрированного режима), а интерфейс AuthSub возвращает токен сеанса. Дополнительную информацию о зарегистрированных приложениях и закрытых ключах см. в разделе « Запросы на подпись » документации AuthSub.
Затем ваше приложение сможет использовать значение токена сеанса при последующем взаимодействии с Blogger. Чтобы указать клиентской библиотеке .NET автоматически отправлять заголовок авторизации (содержащий токен сеанса) с каждым запросом, выполните следующие действия:
GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("blogger", "BloggerSampleApp"); authFactory.Token = SessionsessionToken.ToString(); Service service = new Service(authFactory.ApplicationName); service.RequestFactory = authFactory;
Аутентификация по имени пользователя и паролю ClientLogin
Используйте аутентификацию ClientLogin, если ваш клиент является автономным, однопользовательским «установленным» клиентом (например, настольным приложением). Установите учетные данные вашего объекта службы следующим образом:
Service service = new Service("blogger", "exampleCo-exampleApp-1"); service.Credentials = new GDataCredentials("user@example.com", "secretPassword"); GDataGAuthRequestFactory factory = (GDataGAuthRequestFactory) service.RequestFactory; factory.AccountType = "GOOGLE";
В приведенном выше фрагменте мы передаем два параметра конструктору Service
. Первый параметр — это имя сервиса, с которым мы хотим взаимодействовать. Второй параметр — это имя нашего приложения в формате companyName — applicationName — versionID . Мы также настроили Service.RequestFactory
на использование только типа учетной записи GOOGLE
, чтобы обеспечить правильную аутентификацию для пользователей G Suite .
Дополнительные сведения об аутентификации ClientLogin, включая примеры запросов и ответов, см. в документации по аутентификации для установленных приложений .
Примечание . Используйте один и тот же токен для всех запросов в данном сеансе; не приобретайте новый токен для каждого запроса Blogger.
Примечание . Как описано в документации ClientLogin, запрос аутентификации может завершиться неудачей и запросить запрос CAPTCHA. Если вы хотите, чтобы Google выполнил и обработал запрос CAPTCHA, отправьте пользователя на https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger
(а не на URL-адрес обработки CAPTCHA, указанный в документации ClientLogin).
Получение списка блогов
API данных Blogger предоставляет канал, в котором перечислены блоги конкретного пользователя; этот канал известен как «метафид».
В следующем примере кода используется проверенный объект Service
для получения метаканала, а затем печатается заголовок каждого блога.
query.Uri = new Uri("http://www.blogger.com/feeds/default/blogs"); AtomFeed feed = null; try { feed = service.Query(query); foreach (AtomEntry entry in feed.Entries) { Console.WriteLine("Blog Title: " + entry.Title.Text); } }
Обратите внимание на URL-адрес, используемый методом getFeed
. Это URL-адрес метафида по умолчанию; он возвращает список блогов для текущего аутентифицированного пользователя. Чтобы получить доступ к каналу для другого пользователя, вы можете указать идентификатор пользователя вместо default
в URL-адресе метафида. Идентификатор пользователя — это строка цифр в конце URL-адреса профиля пользователя.
Создание постов
API данных Blogger позволяет создавать и публиковать новые записи блога, а также создавать черновики записей.
Во всех следующих примерах предполагается, что у вас есть проверенный объект Service
.
Примечание . Установка собственного автора для сообщений в настоящее время не поддерживается. Все новые сообщения будут отображаться так, как если бы они были созданы пользователем, прошедшим аутентификацию в данный момент.
Публикация сообщения в блоге
Вы можете использовать клиентскую библиотеку .NET для публикации новых записей в блоге.
Сначала создайте объект AtomEntry
, представляющий сообщение в блоге. Затем вы можете установить заголовок, содержание и другие атрибуты сообщения в блоге. Наконец, используйте объект Service
, чтобы вставить сообщение. Вот пример того, как опубликовать новую запись в блоге:
AtomEntry newPost = new AtomEntry(); newPost.Title.Text = "Marriage!"; newPost.Content = new AtomContent(); newPost.Content.Content = "<div xmlns='http://www.w3.org/1999/xhtml'>" + "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" + "<p>He is the last man on earth I would ever desire to marry.</p>" + "<p>Whatever shall I do?</p>" + "</div>"; newPost.Content.Type = "xhtml"; Uri blogFeedUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default"); AtomEntry createdEntry = service.Insert(blogFeedUri, newPost);
Метод Insert
принимает URL-адрес публикации службы в качестве параметра. Затем метод возвращает запись в том виде, в каком она была сохранена в Blogger. Возвращенная запись аналогична отправленной вами, но она также содержит различные элементы, добавленные Blogger, например идентификатор публикации.
Если по какой-либо причине ваш запрос не будет выполнен, Blogger может вернуть другой код состояния. Информацию о кодах состояния см. в справочном документе по протоколу API данных Google .
Создание черновика записи в блоге
Черновики сообщений создаются так же, как и публичные сообщения, но вам необходимо установить атрибут draft
объекта AtomEntry
. Сообщение в блоге выше можно создать как черновик, добавив выделенную строку:
AtomEntry newPost = new AtomEntry(); newPost.Title.Text = "Marriage!"; newPost.Content = new AtomContent(); newPost.Content.Content = "<div xmlns='http://www.w3.org/1999/xhtml'>" + "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" + "<p>He is the last man on earth I would ever desire to marry.</p>" + "<p>Whatever shall I do?</p>" + "</div>"; newPost.Content.Type = "xhtml"; newPost.IsDraft = true; Uri blogFeedUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default"); AtomEntry createdEntry = service.Insert(blogFeedUri, newPost);
Вы можете превратить существующий черновик сообщения в блоге в опубликованное сообщение, получив черновик сообщения, установив для атрибута черновика значение false, а затем обновив сообщение. Мы рассмотрим получение и обновление сообщений в следующих двух разделах.
Получение сообщений
В следующих разделах описывается, как получить список сообщений блога с параметрами запроса и без них.
Вы можете запросить общедоступный канал Blogger без аутентификации. Таким образом, вам не нужно задавать учетные данные или выполнять аутентификацию AuthSub перед получением сообщений из общедоступного блога.
Получение всех сообщений блога
Чтобы получить сообщения пользователя, вызовите тот же метод getFeed
, который использовался для получения метафида блогов, но на этот раз отправьте URL-адрес канала сообщений блога:
query.Uri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default"); feed = service.Query(query); Console.WriteLine(feed.Title.Text); foreach (AtomEntry entry in feed.Entries) { Console.WriteLine("Entry Title: " + entry.Title.Text); }
Получение сообщений с использованием параметров запроса
API данных Blogger позволяет запрашивать набор записей, соответствующих заданным критериям, например запрос публикаций в блоге или обновлений в заданном диапазоне дат. Для этого вы создаете объект FeedQuery
и передаете его методу Service.Query()
.
Например, чтобы отправить запрос диапазона дат, установите члены MinPublication
и MaxPublication
объекта FeedQuery
. Следующий фрагмент кода печатает заголовок каждой записи блога, опубликованной между заданным временем начала и временем окончания:
FeedQuery query = new FeedQuery(); query.Uri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default"); query.MinPublication = new DateTime(2006, 1, 1); query.MaxPublication = new DateTime(2007, 4, 12); AtomFeed feed = service.Query(query); foreach (AtomEntry entry in feed.Entries) { Console.WriteLine(" Entry Title: " + entry.Title.Text); }
Обратите внимание, что объект FeedQuery
создан с использованием того же URL-адреса ленты сообщений, который используется для получения сообщений.
API данных Blogger поддерживает следующие параметры запроса:
- альтернативный вариант
- Тип возвращаемого канала, например
atom
(по умолчанию) илиrss
. - /category
- Укажите категории (также называемые метками), чтобы фильтровать результаты ленты. Например,
http://www.blogger.com/feeds/ blogID /posts/default/-/Fritz/Laurie
возвращает записи с меткамиFritz
иLaurie
. - максимальные результаты
- Максимальное количество возвращаемых записей.
- заказать по
- Порядок возврата записей, например
lastmodified
(по умолчанию),starttime
илиupdated
. - опубликованный минимум, опубликованный максимум
- Границы дат публикации записей.
- стартовый индекс
- Индекс первого результата, отсчитываемого от 1 (для разбиения по страницам).
- обновленный минимум, обновленный максимум
- Границы дат обновления записей. Эти параметры запроса игнорируются, если для параметра
orderby
не установлено значениеupdated
.
Дополнительную информацию о параметрах запроса см. в Справочном руководстве по API данных Blogger и Справочном руководстве по API данных Google .
Обновление сообщений
Чтобы обновить существующую публикацию в блоге, сначала вы извлекаете запись, которую хотите обновить, затем изменяете ее, а затем отправляете ее в Blogger с помощью метода Update()
записи. Следующий фрагмент кода изменяет заголовок записи блога, предполагая, что вы уже получили запись с сервера.
static AtomEntry EditEntry(AtomEntry toEdit) { // Edit the entry by changing the Title and calling Update(). if (toEdit != null) { toEdit.Title.Text = "Marriage Woes!"; toEdit = toEdit.Update(); } return toEdit; }
Приведенный выше код возвращает AtomEntry
содержащий всю недавно обновленную публикацию. Чтобы обновить любые другие свойства, просто установите их в объекте AtomEntry
перед вызовом Update()
.
Примечание . Изменение данных автора, связанных с публикациями, в настоящее время не поддерживается.
Удаление сообщений
Чтобы удалить сообщение, вызовите метод Delete
существующего объекта AtomEntry
, например:
static void DeleteEntry(AtomEntry toDelete) { // Delete the edited entry if (toDelete != null) { toDelete.Delete(); } }
Комментарии
API данных Blogger позволяет создавать, получать и удалять комментарии. Обновление комментариев не поддерживается (и недоступно в веб-интерфейсе).
Создание комментариев
Чтобы опубликовать комментарий, создайте объект AtomEntry
и вставьте его следующим образом:
AtomEntry comment; comment = new AtomEntry(); comment.Title.Text = "This is my first comment"; comment.Content.Content = "This is my first comment"; Uri commentPostUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/" + entryId + "/comments/default"); postedComment = service.Insert(commentPostUri, comment);
Примечание . В настоящее время вы можете публиковать комментарии только в блоге, принадлежащем авторизованному пользователю.
Примечание . Установка собственного автора комментариев в настоящее время не поддерживается. Все новые комментарии будут отображаться так, как если бы они были созданы пользователем, прошедшим аутентификацию в данный момент.
Получение комментариев
Вы можете получить комментарии к определенному сообщению из URL-адреса ленты комментариев к этому сообщению:
static void ListEntryComments(Service service, Uri commentUri) { if (commentUri != null) { // Retrieve all comments on a blog entry FeedQuery query = new FeedQuery(); query.Uri = commentUri; AtomFeed feed = service.Query(query); foreach (AtomEntry entry in feed.Entries) { Console.WriteLine(" Comment Title: " + entry.Title.Text); } } }
Или вы можете получить комментарии ко всем публикациям, используя URL-адрес ленты комментариев блога:
http://www.blogger.com/feeds/blogID/comments/default
Удаление комментариев
Чтобы удалить комментарий, вызовите метод Delete()
для существующего объекта комментария AtomEntry
следующим образом:
static void DeleteComment(AtomEntry commentEntry) { if (commentEntry != null) { // Delete the comment. commentEntry.Delete(); } }