开发者指南:协议

重要提示:这是此页面的旧版本。如需使用最新版本,请使用左侧导航栏中的链接。

通过 Blogger 数据 API,客户端应用程序可以查看和更新 Blogger 以 Google Data API Feed 的形式导出内容。

您的客户端应用程序可以使用 Blogger 数据 API 创建新博客 博文、修改或删除现有博文,以及查询匹配的博文 特定条件

除了介绍 Blogger Data API 功能的一些背景信息之外,本文档还提供了使用原始 XML 和 HTTP 进行基本 Data API 交互的示例。阅读完本文档后,建议您详细了解 使用我们的客户端与 API 进行交互 库阅读此 Codelab 中 开发者指南。

目录

受众群体

本文档适用于希望为客户端编写客户端代码 使用 XML 和 HTTP 与 Blogger 进行交互的应用程序。

本文假定您了解 Google 数据 API 协议

如果您使用的是 UNIX 系统,并想尝试此 您可以找到 UNIX 命令行实用程序 curlwget 有用;请参阅 这些实用程序的手册页。

有关 Blogger Data API 参考信息,请参阅协议参考指南

使用入门

创建 Blogger 账号

您可能需要注册一个 Blogger 账号以进行测试。Blogger 使用 Google 账号,因此如果您已经拥有 Google 账号,则无需再做任何准备。

在 Blogger 服务中进行身份验证

您可以使用 Blogger Data API 访问公开和私密 Feed。公开 Feed 不需要任何身份验证,但会处于只读状态。如果您想修改博客,则客户端需要先进行身份验证,然后才能请求私享 Feed。它可以使用以下两种方法之一进行身份验证:AuthSub 代理身份验证或 ClientLogin 用户名/密码身份验证。

如需详细了解如何使用 Google Data API 进行身份验证,请参阅身份验证文档

本文档后续部分中的大部分示例假定您 提供相应的身份验证信息。

AuthSub 代理身份验证

AuthSub 代理身份验证适用于需要 对用户进行身份验证网站运营者和客户 代码无法访问 Blogger 用户的用户名和密码; 而是会获取允许客户端执行操作的特殊 AuthSub 令牌 访问该 API。如需了解详情,请参阅 AuthSub 文档

当用户首次访问您的应用时,他们尚未进入 必须经过身份验证。在本示例中,您需要显示一些信息和链接 将用户定向到一个 Google 网页,以验证您对访问 自己的博客。

AuthSubRequest 网址中包含以下查询参数:

下一个
Google 在用户完成身份验证后应重定向到的网页的网址。
范围
表示应用正在请求令牌以访问 Blogger Feed。使用的范围字符串是 http://www.blogger.com/feeds/(当然,是经过网址编码的)。
安全
指示客户端是否请求安全令牌。
会话
指示返回的令牌能否兑换为可重复使用的(会话)令牌。

AuthSubRequest 网址可能如下所示:

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 系统会将用户重定向到相应网址 在 AuthSubRequest 的 next 查询参数中指定的 网址。AuthSub 系统会在该网址上附加一个身份验证令牌,作为 token 查询参数的值。例如:

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

此令牌值代表一个单次使用的 AuthSub 令牌。在此示例中,由于指定了 session=1,因此可以使用 Authorization 标头中的一次性令牌调用 AuthSubSessionToken 服务,以将此令牌换成 AuthSub 会话令牌,如下所示:

GET /accounts/AuthSubSessionToken HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: AuthSub token="yourAuthToken"
User-Agent: Java/1.5.0_06
Host: www.google.com
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

AuthSubSessionToken 服务响应包含一个包含会话令牌的 Token 标头,以及一个指示令牌有效时长的 Expiration 标头。

然后,您的应用可以在与 Blogger 的后续互动中使用 Authorization 标头中的会话令牌值。

这是一个包含非安全令牌的 HTTP 请求示例, 可能会发送到 Blogger:

GET /feeds/blogID/blogs/posts/defaults HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: AuthSub token="yourSessionToken"
User-Agent: Java/1.5.0_06
Host: www.blogger.com
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

ClientLogin 用户名/密码身份验证

如果您的客户端是独立的单用户“已安装”客户端(例如桌面应用),请使用 ClientLogin 身份验证。要请求 身份验证令牌,发送 POST 发送到以下网址:

https://www.google.com/accounts/ClientLogin

POST 正文应包含一组查询参数,这些参数应使用 application/x-www-form-urlencoded 内容类型,看起来像 HTML 表单传递的参数。这些参数包括:

电子邮件
用户的电子邮件地址。
Passwd
用户的密码。
服务
Blogger 服务名称为 blogger。(如需了解其他服务名称,请参阅服务名称列表。)
accountType
使用 Blogger API 时,应始终将其设置为 GOOGLE。如果未设置此参数,则会阻止同时拥有 G Suite 账号的用户访问。
来源
标识客户端应用。应采用 companyName-applicationName-versionID 格式。这些示例使用名称 exampleCo-exampleApp-1

有关参数的更多信息,请参阅身份验证 已安装的应用文档。

如果身份验证请求失败,服务器会返回 HTTP 403 Forbidden 状态代码。

如果成功,服务器将返回 HTTP 200 OK 状态 以及响应正文中的三个长字母数字代码:SID、LSID、 和 Auth.Auth 值是您将随每个后续请求一起发送给 Blogger 的授权令牌,因此请保留该值的副本。您可以 并忽略 SID 和 LSID 值

由于发送到私有供稿的所有请求都需要进行身份验证, 在与 Blogger 的所有后续互动中,使用 以下格式:

Authorization: GoogleLogin auth=yourAuthToken

其中,yourAuthToken 是 ClientLogin 请求返回的 Auth 字符串。

有关 ClientLogin 身份验证的详细信息,包括示例 请求和响应,请参阅针对已安装 应用文档。

注意:请为给定会话中的所有请求使用相同的令牌;不要为每个 Blogger 请求获取新的令牌。

注意:如 ClientLogin 文档中所述,身份验证请求可能会失败并请求人机识别系统质询。如果您希望 Google 发出并处理人机识别系统验证,则 将用户转到 https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger (而不是传递给 LTS 中提供的人机识别系统处理网址) 文档)。

检索博客列表

Blogger Data API 提供一个 Feed,其中列出了特定用户的博客;该 Feed 称为“元 Feed”。

向以下网址发送 HTTP GET,以获取 博客:

http://www.blogger.com/feeds/userID/blogs

注意:您还可以将 default 作为用户 ID,告诉 Blogger 返回 。

元 Feed 中的条目可能如下所示:

<entry>
  <id>tag:blogger.com,1999:blog-blogID.post-postID</id>
  <published>2006-08-02T18:44:43.089-07:00</published>
  <updated>2006-11-08T18:10:23.020-08:00</updated>
  <title type='text'>Lizzy's Diary</title>
  <summary type='html'>Being the journal of Elizabeth Bennet</summary>
  <link rel='alternate' type='text/html'
    href='http://blogName.blogspot.com/'>
  </link>
  <link rel='http://schemas.google.com/g/2005#feed'
    type='application/atom+xml'
    href='http://blogName.blogspot.com/feeds/posts/default'>
  </link>
  <link rel='http://schemas.google.com/g/2005#post'
    type='application/atom+xml'
    href='http://www.blogger.com/feeds/blogID/posts/default'>
  </link>
  <link rel='self' type='application/atom+xml'
    href='http://www.blogger.com/feeds/userID/blogs/blogID'>
  </link>
  <link rel='edit' type='application/atom+xml'
      href='http://www.blogger.com/feeds/userID/blogs/blogID'>
  </link>
  <author>
    <name>Elizabeth Bennet</name>
    <email>noreply@blogger.com</email>
    <uri>http://www.blogger.com/profile/profileID</uri>
  </author>
</entry>

有关每个元素的含义,请参阅 Google 数据 API 协议参考文档或 Atom 1.0 规范

如果您的请求由于某种原因失败,Blogger 可能会返回其他状态 代码。有关 HTTP 状态代码的详细信息,您也可以参阅 Google Data API 协议参考文档。

创建帖子

使用 Blogger 数据 API,您可以创建和发布新的博客条目, 以及创建评注草稿

发布博文

完成身份验证后,您就可以发布新的博客文章了。

首先,创建要发布的帖子的 XML 表示法。此 XML 需要 采用 Atom <entry> 元素的形式,可能如下所示 如下所示:

<entry xmlns='http://www.w3.org/2005/Atom'>
  <title type='text'>Marriage!</title>
  <content type='xhtml'>
    <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>
  </content>
  <category scheme="http://www.blogger.com/atom/ns#" term="marriage" />
  <category scheme="http://www.blogger.com/atom/ns#" term="Mr. Darcy" />
</entry>

注意:为帖子设置自定义作者 目前不支持所有新帖子都会显示为由以下用户创建: 当前经过身份验证的用户。

要发布此条目,请按如下方式将其发送到博客的帖子网址。首先,使用 application/atom+xml 内容类型将 Atom <entry> 元素放置在新 POST 请求的正文中。然后,找到 <link> 元素(其中 rel 属性以 #post 结尾),以便在元 Feed 中找到博客的帖子网址。将博客的博文网址指定为 href 属性,其格式如下:

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

注意:此网址与 <link rel="service.post"> 标记出现在 <head> 部分,以易于理解的 博客。

Blogger 会使用您发送的条目创建博文,然后返回 HTTP 201 CREATED 状态代码,以及新博文的副本(以 <entry> 元素的形式)。返回的条目 但其中还包含了 Blogger 添加的各种元素,例如 <id> 元素。

如果您的请求由于某种原因失败,Blogger 可能会返回其他状态 代码。如需了解状态代码,请参阅 Google Data API 协议参考文档

创建博文草稿

草稿帖子的创建方式与公开帖子相同,只不过 向该条目添加了 <app:control> 元素,以指明 帖子。

<app:control> 元素应包含单个 <app:draft> 元素作为子元素:

<app:control xmlns:app='http://purl.org/atom/app#'>
  <app:draft>yes</app:draft>
</app:control>

<app:draft> 元素中包含的数据必须是字符串 yes,系统才能将相应帖子识别为草稿。

您可以检索现有的博文草稿, 将 <app:draft> 元素的数据设为 字符串 no,然后更新帖子。检索和更新帖子 我们将在接下来的两个部分中介绍

注意:如需详细了解 Atom,请 发布协议,包括 <app:control><app:draft> 命名空间,请参阅 RFC 5023

检索帖子

以下部分介绍了如何使用 而没有查询参数。

您可以在不进行身份验证的情况下查询 Blogger 公开 Feed。因此,您 在检索博文时,无需设置 Authorization 参数。 公开博客。

检索所有博文

要检索用户的帖子,请将 HTTP GET 请求发送到 博客的供稿网址。然后,Blogger 会返回包含相应博文条目的 Feed。例如,如需获取 liz@gmail.com 的博文列表,请向 Blogger 发送以下 HTTP 请求(当然,请使用适当的值替换 blogID):

GET http://www.blogger.com/feeds/blogID/posts/default

然后,Blogger 会返回 HTTP 200 OK 状态代码以及标准的 包含博文的 Atom 1.0 Feed。

以下是一个仅包含一条帖子的博客的信息流示例。请注意,我们对此示例进行了一些修改,以便人类更容易阅读。具体而言,真实的 Blogger Feed 包含实际的 ID 和网址。

<feed xmlns='http://www.w3.org/2005/Atom'>
  <id>tag:blogger.com,1999:blog-blogID</id>
  <updated>2006-11-08T18:10:23.020-08:00</updated>
  <title type='text'>Lizzy's Diary</title>
  <link rel='alternate' type='text/html'
    href='http://blogName.blogspot.com/index.html'>
  </link>
  <link rel='http://schemas.google.com/g/2005#feed'
    type='application/atom+xml'
    href='http://blogName.blogspot.com/feeds/posts/default'>
  </link>
  <link rel='self' type='application/atom+xml'
    href='http://blogName.blogspot.com/feeds/posts/default'>
  </link>
  <author>
    <name>Elizabeth Bennet</name>
    <email>noreply@blogger.com</email>
    <uri>http://www.blogger.com/profile/profileID</uri>
  </author>
  <generator version='7.00' uri='http://www2.blogger.com'>Blogger</generator>
  <entry>
    <id>tag:blogger.com,1999:blog-blogID.post-postID</id>
    <published>2006-11-08T18:10:00.000-08:00</published>
    <updated>2006-11-08T18:10:14.954-08:00</updated>
    <title type='text'>Quite disagreeable</title>
    <content type='html'>&lt;p&gt;I met Mr. Bingley's friend Mr. Darcy
      this evening. I found him quite disagreeable.&lt;/p&gt;</content>
    <link rel='alternate' type='text/html'
      href='http://blogName.blogspot.com/2006/11/quite-disagreeable.html'>
    </link>
    <link rel='self' type='application/atom+xml'
      href='http://blogName.blogspot.com/feeds/posts/default/postID'>
    </link>
    <link rel='edit' type='application/atom+xml'
      href='http://www.blogger.com/feeds/blogID/posts/default/postID'>
    </link>
    <author>
      <name>Elizabeth Bennet</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/profileID</uri>
    </author>
  </entry>
</feed>

使用查询参数检索博文

借助 Blogger Data API,您可以请求一组符合指定条件的条目,例如请求在指定日期范围内发布或更新的博文。

例如,如需发送日期范围查询,请将 published-minpublished-max 参数添加到请求网址。如需获取 2008 年 3 月 16 日至 2008 年 3 月 24 日期间创建的所有博文条目,请向博客的 Feed 网址发送 HTTP 请求:

GET http://www.blogger.com/feeds/blogID/posts/default?published-min=2008-03-16T00:00:00&published-max=2008-03-24T23:59:59

当您发送该 GET 请求后,Blogger 会返回一个 HTTP 200 OK 状态代码以及包含 在指定日期范围内创建的

updated-minupdated-max 参数还可用于获取给定范围内更新的所有博文条目。不过,请注意,除非 orderby 参数也设置为 updated,否则系统会忽略这些参数。

Blogger Data API 支持以下查询参数:

alt
要返回的 Feed 类型,例如 atom(默认)或 rss
/category
指定类别(也称为标签)以过滤 Feed 结果。例如,http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie 会返回同时带有 FritzLaurie 标签的条目。
max-results
要返回的最大条目数。
orderby
返回条目的顺序,例如 lastmodified(默认)、starttimeupdated
“publish-min”“publish-max”
条目发布日期的边界。
start-index
要检索的第一个结果的索引(从 1 开始,用于分页)。
updated-min、update-max
条目更新日期的边界。除非将 orderby 参数设置为 updated,否则系统会忽略这些查询参数。

如需详细了解查询参数,请参阅 Blogger Data API 参考指南Google Data API 参考指南

正在更新帖子

要更新现有的博文,首先您要检索要 对它进行修改,然后发送 PUT 请求,其中包含 将更新的条目添加到帖子的编辑网址中。请确保 与您 PUT 完全匹配的条目中的 <id> 值 现有条目的 <id>

修改网址在以下条目中突出显示:

<entry>
  <id>tag:blogger.com,1999:blog-blogID.post-postID</id>
  <published>2006-11-08T18:10:00.000-08:00</published>
  <updated>2006-11-08T18:10:14.954-08:00</updated>
  <title type='text'>Quite disagreeable</title>
  <content type='html'>&lt;p&gt;I met Mr. Bingley's friend Mr. Darcy
    this evening. I found him quite disagreeable.&lt;/p&gt;</content>
  <link rel='alternate' type='text/html'
    href='http://blogName.blogspot.com/2006/11/quite-disagreeable.html'>
  </link>
  <link rel='self' type='application/atom+xml'
    href='http://blogName.blogspot.com/feeds/posts/default/postID'>
  </link>
  <link rel='edit' type='application/atom+xml'
    href='http://www.blogger.com/feeds/blogID/posts/default/postID'>
  </link>
  <category scheme="http://www.blogger.com/atom/ns#" term="Mr. Bingley" />
  <category scheme="http://www.blogger.com/atom/ns#" term="Mr. Darcy" />
  <author>
    <name>Elizabeth Bennet</name>
    <email>noreply@blogger.com</email>
    <uri>http://www.blogger.com/profile/profileID</uri>
  </author>
</entry>

重要提示:为确保向前兼容性,请 确保在对更新的条目使用 PUT 时,您可以保留所有 从 Blogger 检索该条目时存在的 XML。否则,当我们实现新内容并在 Feed 中添加 <new-awesome-feature> 元素时,您的客户端将不会返回这些元素,您的用户将无法看到这些元素。所有 Google Data API 客户端库都会正确处理此问题,因此,如果您使用的是其中一个库,则无需担心。

注意:目前不支持修改与帖子关联的作者数据。

问题排查提示:某些防火墙会屏蔽 HTTP PUT 消息。为避免这一问题,您可以添加 X-HTTP-Method-Override: PUT 标头。POST 如需了解详情,请参阅 Google Data API 协议基础知识文档。

正在删除帖子

要删除帖子,请向该帖子的修改网址发送 DELETE 请求。 此网址与用于更新帖子的网址相同。

问题排查提示:某些防火墙阻止 HTTP DELETE 封邮件。如需解决此问题,您可以在 POST 请求中添加 X-HTTP-Method-Override: DELETE 标头。有关详情,请参阅 Google Data API 协议基础知识文档。

评论

Blogger 数据 API 允许创建、检索和删除评论。 不支持更新评论(网页界面中也不提供此功能)。

创建评论

要发布评论,请创建 Atom <entry> 元素,例如 以下:

  <entry xmlns='http://www.w3.org/2005/Atom'>
    <title type="text">This is my first comment</title>
    <content type="html">This is my first comment</content>
  </entry>

要发布此评论,请放置您的 Atom <entry> 元素 新 POST 请求的正文中,使用 application/atom+xml 内容类型。然后发送 POST 请求相应的 Blogger 网址:

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

注意:目前,您只能在经过身份验证的用户拥有的博客中发表评论。

注意:目前不支持为评论设置自定义作者。所有新评论都将显示为由当前已通过身份验证的用户创建。

检索评论

您可以检索特定帖子的评论,方法是发送 GET附加到此帖子的评论 Feed 网址:

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

或者,您也可以使用博客的评论 Feed 网址获取所有帖子的评论:

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

这些请求会返回如下所示的评论供稿:

<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
         xmlns:thr="http://purl.org/syndication/thread/1.0">
  <id>tag:blogger.com,1999:blog-blogID.post-postID.comment-commentID</id>
  <updated>2007-04-04T21:56:29.803-07:00</updated>
  <title type="text">My Blog : Time to relax</title>
  <link rel="alternate" type="text/html" href="http://blogName.blogspot.com/2007/04/first-post.html"/>
  <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blogName.blogspot.com/feeds/postID/comments/default"/>
  <link rel="self" type="application/atom+xml" href="http://blogName.blogspot.com/feeds/postID/comments/default"/>
  <author>
    <name>Blog Author name</name>
  </author>
  <generator version="7.00" uri="http://www2.blogger.com">Blogger</generator>
  <openSearch:totalResults>1</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <entry>
    <id>tag:blogger.com,1999:blog-blogID.post-commentID</id>
    <published>2007-04-04T21:56:00.000-07:00</published>
    <updated>2007-04-04T21:56:29.803-07:00</updated>
    <title type="text">This is my first comment</title>
    <content type="html">This is my first comment</content>
    <link rel="alternate" type="text/html" href="http://blogName.blogspot.com/2007/04/first-post.html#commentID"/>
    <link rel="self" type="application/atom+xml" href="http://blogName.blogspot.com/feeds/postID/comments/default/commentID"/>
    <link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/blogID/postID/comments/default/commentID"/>
    <thr:in-reply-to href="http://blogName.blogspot.com/2007/04/first-post.html" 
                     ref="tag:blogger.com,1999:blog-blogID.post-postID" 
                     source="http://www.blogger.com/feeds/posts/default/blogID"
                     type="text/html"/>
    <author>
      <name>Blog Author name</name>
      <email>blog_author@gmail.com</email>
      <uri>http://www.blogger.com/profile/userID</uri>
    </author>
    <thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' 
         href='http://blogName.blogspot.com/2007/04/first-post.html' 
         ref='tag:blogger.com,1999:blog-blogID.post-postID' 
         source='http://blogName.blogspot.com/feeds/posts/default/postID'
         type='text/html' />
  </entry>
</feed>

正在删除评论

如需删除评论,请向评论的修改网址发送 DELETE 请求。此网址在上方的评论 Feed 中会突出显示。

导出格式

Blogger 允许用户使用 Blogger 导出文件导出和导入博客。此导出文件包含某个博客的所有博文和评论。通过 格式与 与检索帖子和评论相关的部分。该导出文件将包含 帖子 Feed 的内容与评论 Feed 的内容合并 创建一个文档。

要使用导出格式导出或导入博客数据,您可以访问 博客的设置页面。如需使用 Data API 检索博客的导出文件,请使用以下网址:

GET http://www.blogger.com/feeds/blogID/archive

如需导入导出文件,请向以下网址创建 POST 请求,并将导出文件的内容作为请求数据,application/atom+xml 作为内容类型:

POST http://www.blogger.com/feeds/blogID/archive/full

上述两个网址均不支持查询参数。两个请求都必须 还包含身份验证信息,且仅包含 博客管理员将可以使用这些 Feed 导入/导出博客 网址。

注意:如果您要创建自己的 Blogger 导出文件,则目前存在一条关于博文和评论条目的排序的限制。Blogger 导出文件会先列出所有博文 然后是所有评论允许交错发布内容条目和评论条目,前提是评论条目位于相应评论所针对的发布内容条目之后。

有关 Blogger 如何在导出中使用 Atom 格式的详情 请参阅协议 参考指南

返回页首