开发者指南:协议

Blogger Data API 允许客户端应用以 Google Data API Feed 的形式查看和更新 Blogger 内容。

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

除了介绍一些有关 Blogger 数据 API 功能的背景信息之外,本文还提供了使用原始 XML 和 HTTPS 进行基本数据 API 交互的示例。阅读本文档后,您可以阅读本开发者指南中特定于编程语言的部分,详细了解如何使用我们的客户端库与 API 进行交互。

目录

受众

本文面向的是特定程序员,他们希望编写能够使用 XML 和 HTTPS 与 Blogger 进行交互的客户端应用。

本文档假定您了解 Google Data API 协议的一般概念。

如果您使用的是 UNIX 系统,并想不编写任何代码就尝试本文档中的示例,则可能会发现 UNIX 命令行实用程序 curlwget 很有用;如需了解详情,请参阅这些实用程序的手册页面。

有关 Blogger 数据 API 的参考信息,请参阅协议参考指南

开始使用

创建 Blogger 帐号

您可以注册 Blogger 帐号以进行测试。Blogger 使用的是 Google 帐号,因此如果您已经拥有 Google 帐号,就大功告成了。

向请求授权

当您的应用请求非公开用户数据时,必须包含授权令牌。Google 也可通过此令牌来识别您的应用。

关于授权协议

我们建议使用 OAuth 2.0 为请求授权。

Blogger GData API 也支持旧版授权选项,例如 OAuth 1.0AuthSubgclsrc;但在大多数情况下,我们都不建议您使用其他选项。如果您的应用已使用这些选项,我们建议您尽可能迁移到 OAuth 2.0。

如果您的应用有某些特殊授权要求(例如,在请求数据访问权限的同时登录 (hybrid) 或全网域授权委托 (2LO)),则您目前无法使用 OAuth 2.0 令牌。在这种情况下,您必须改用 OAuth 1.0 令牌。

使用 OAuth 2.0 给请求授权

针对非公开用户数据向 Blogger GData API 发出的请求必须由经过身份验证的用户授权。

OAuth 2.0 的具体授权流程可能会有所不同,具体取决于您编写的应用类型。以下常规流程适用于所有应用类型:

  1. 创建应用时,您需要向 Google 注册应用。然后,Google 会提供您稍后需要用到的信息,例如客户端 ID 和客户端密钥。
  2. 当您的应用需要访问用户数据时,它会请求 Google 提供特定范围的访问权限。
  3. Google 会向用户显示 OAuth 对话框,要求用户授权您的应用请求他们的某些数据。
  4. 如果用户批准,Google 会为您的应用提供一个短期访问令牌
  5. 您的应用会请求获取用户数据,并在请求中附上该访问令牌。
  6. 如果 Google 确定您的请求和令牌有效,就会返回您请求的数据。

部分流程还包含其他步骤,例如使用刷新令牌获取新的访问令牌。如需详细了解各种类型应用的流程,请参阅 Google 的 OAuth 2.0 文档

Blogger GData API 的 OAuth 2.0 范围信息如下:

https://www.blogger.com/feeds/

要通过 OAuth 2.0 请求访问权限,您的应用既需要范围信息,也需要 Google 在应用注册期间提供的信息(如客户端 ID 和/或客户端密钥)。

提示:Google API 客户端库可为您处理某些授权流程。并且支持多种编程语言;如需了解详情,请参阅“库和示例”页面

指定版本

您使用 Blogger Data API 发送的每个请求都应指定该 API 的版本 2。

如需指定版本号,请使用 GData-Version HTTP 标头:

GData-Version: 2

或者,如果您无法设置 HTTP 标头,则可以将 v=2 指定为网址中的查询参数。不过,建议您尽可能优先使用 HTTP 标头。

注意:客户端库会自动提供适当的版本标头,因此,在使用客户端库时,请勿使用 v=2 查询参数。

检索博客列表

Blogger 数据 API 提供的 Feed 列出了特定用户的博客;该 Feed 称为“元 Feed”。

向以下网址发送 HTTP GET 以检索博客列表:

https://www.blogger.com/feeds/profileID/blogs

其中,配置文件 ID 是指用户的个人资料网页的网址中的数字。

注意:您也可以使用 default 替换 User-ID,后者会告知 Blogger 为请求随附凭据的用户返回博客列表。

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

<entry gd:etag='W/"D08FQn8-eip7ImA9WxZbFEw."'>
  <id>tag:blogger.com,1999:user-userNumber.blog-blogID</id>
  <published>2006-08-02T18:44:43.089-07:00</published>
  <updated>2008-04-17T00:03:33.152-07:00</updated>
  <title>Lizzy's Diary</title>
  <summary type='html'>Being the journal of Elizabeth Bennet</summary>
  <link rel='self' type='application/atom+xml'
    href='http://www.blogger.com/feeds/profileID/blogs/blogID' />
  <link rel='alternate' type='text/html'
    href='http://blogName.blogspot.com/' />
  <link rel='http://schemas.google.com/g/2005#feed'
    type='application/atom+xml'
    href='http://blogName.blogspot.com/feeds/posts/default' />
  <link rel='http://schemas.google.com/g/2005#post'
    type='application/atom+xml'
    href='http://www.blogger.com/feeds/blogID/posts/default' />
  ...
  <author>
    <name>Elizabeth Bennet</name>
    <uri>http://www.blogger.com/profile/profileID</uri>
    <email>noreply@blogger.com</email>
  </author>
</entry>

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

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

创建帖子

您可以使用 Blogger Data 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 请求的正文中。然后,通过查找 rel 属性以 #post 结尾的 <link> 元素,在元 Feed 中查找博文网址。博文的网址将作为此元素的 href 属性提供,并采用以下格式:

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

注意:此网址与简单易懂的博客版本 <head> 部分中显示的 <link rel="service.post"> 标记中的网址相同。

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

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

创建博文草稿

草稿帖子的创建方式与公开帖子相同,但在条目中会添加一个 <app:control> 元素,这表示帖子应该(尚未)发布。

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

<app:control xmlns:app='http://www.w3.org/2007/app'>
  <app:draft>yes</app:draft>
</app:control>

<app:draft> 元素中包含的数据必须是字符串 yes,系统才会将博文识别为草稿。

您可以将现有的博文草稿检索到,并将 <app:draft> 元素的数据设置为字符串 no,然后更新该博文,从而将其转换为已发布的博文。接下来的两部分中介绍如何检索和更新帖子。

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

检索帖子

以下部分介绍了如何检索带查询参数和不带查询参数的博文列表。

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

检索所有博文

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

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

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

以下是仅包含一篇博文的博客的 Feed 示例。请注意,我们稍微修改了此示例,使其更便于用户阅读。特别是,真实的 Blogger Feed 包含实际 ID 和网址。

<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet href="http://www.blogger.com/styles/atom.css"
  type="text/css"?>
<feed xmlns='http://www.w3.org/2005/Atom'
    xmlns:gd='http://schemas.google.com/g/2005'
    gd:etag='W/"D08FQn8-eip7ImA9WxZbFEw."'>
  <id>tag:blogger.com,1999:blog-blogID</id>
  <updated>2008-04-17T00:03:33.152-07:00</updated>
  <title>Lizzy's Diary</title>
  <subtitle type='html'></subtitle>
  <link rel='http://schemas.google.com/g/2005#feed'
    type='application/atom+xml'
    href='http://blogName.blogspot.com/feeds/posts/default' />
  <link rel='self' type='application/atom+xml'
    href='http://www.blogger.com/feeds/blogID/posts/default' />
  <link rel='alternate' type='text/html'
    href='http://blogName.blogspot.com/' />
  <author>
    <name>Elizabeth Bennet</name>
    <uri>http://www.blogger.com/profile/profileID</uri>
    <email>noreply@blogger.com</email>
  </author>
  <generator version='7.00'
    uri='http://www2.blogger.com'>Blogger</generator>
  <entry gd:etag='W/"D0YHRn84eip7ImA9WxZUFk8."'>
    <id>tag:blogger.com,1999:blog-blogID.post-postID</id>
    <published>2008-04-07T20:25:00.005-07:00</published>
    <updated>2008-04-07T20:25:37.132-07:00</updated>
    <title>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='edit' type='application/atom+xml'
      href='http://www.blogger.com/feeds/blogID/posts/default/postID' />
    <link rel='self' type='application/atom+xml'
      href='http://www.blogger.com/feeds/blogID/posts/default/postID' />
    <link rel='alternate' type='text/html'
      href='http://blogName.blogspot.com/2008/04/quite-disagreeable.html' />
    <author>
      <name>Elizabeth Bennet</name>
      <uri>http://www.blogger.com/profile/profileID</uri>
      <email>noreply@blogger.com</email>
    </author>
  </entry>
</feed>

再次检索博文

如果您要检索之前检索过的博文,则可以让 Blogger 仅在该博文自上次检索后发生了变化,从而提高效率。

如需进行此类条件检索,请发送包含 HTTP If-None-Match 标头的 HTTP GET 请求。在标头中,指定该条目的 ETag(可在 <entry> 元素的 gd:etag 属性中找到)。

例如:

If-None-Match: W/"D08FQn8-eil7ImA9WxZbFEw."

Blogger 收到此请求后,会检查您请求的条目是否与您指定的 ETag 相同。如果两个 ETag 匹配,则表示该条目没有更改,且 Blogger 会返回 HTTP 304 Not Modified 状态代码。

如果两个 ETag 不匹配,则相应条目自您上次请求后已被修改,Blogger 会返回该条目。

如需详细了解 ETag,请参阅 Google 数据 API 参考指南

使用查询参数检索帖子

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

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

GET https://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 状态代码和一个 Feed,其中包含在指定日期范围内创建的所有博文。

updated-minupdated-max 参数还可用于更新指定范围内的所有博客条目。但请注意,除非 orderby 参数也设置为 updated,否则这些参数会被忽略。

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

alt
要返回的 Feed 的类型,例如 atom(默认)或 rss
/category
指定类别(也称为标签)以过滤 Feed 结果。例如,https://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie 会返回带有 FritzLaurie 标签的条目。
max-results
要返回的条目数上限。
orderby
返回条目的顺序,例如 lastmodified(默认值)、starttimeupdated
publish-min、publish-max
条目发布日期的边界。
start-index
要检索的第一个结果的索引(从 1 开始,用于分页)。
updated-min, updated-max
条目更新日期的边界。除非 orderby 参数设置为 updated,否则这些查询参数将被忽略。
路径
帖子的固定链接路径。例如,对于网址为 http://buzz.blogger.com/2011/08/bloggers-fresh-new-look.html 的博文,其固定链接路径为 /2011/08/bloggers-fresh-new-look.html
q
完整文本查询字符串。这样,您便可以在博客中搜索与查询匹配的博文。

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

正在更新帖子

如需更新现有博文,请先检索要更新的条目,然后修改该条目,最后向帖子的编辑网址发送 PUT 请求,同时在帖子正文中包含更新后的条目。请确保您 PUT 的条目中的 <id> 值与现有条目的 <id> 完全匹配。

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

<entry gd:etag='W/"CUYDSXo8fSp7ImA9WB9UFkU."'>
  <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 消息。为了解决这个问题,您可以在 POST 请求中添加 X-HTTP-Method-Override: PUT 标头。如需了解详情,请参阅 Google 数据 API 协议基础知识文档。

删除帖子

要删除帖子,请向帖子的编辑网址发送 DELETE 请求。 该网址与更新帖子的网址相同。

问题排查提示:某些防火墙会阻止 HTTP DELETE 消息。为了解决这个问题,您可以在 POST 请求中添加 X-HTTP-Method-Override: DELETE 标头。如需了解详情,请参阅 Google 数据 API 协议基础知识文档。

备注

Blogger Data 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>

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

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

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

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

检索评论

您可以通过对特定帖子的评论 Feed 网址发送 GET 来检索特定帖子的评论:

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

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

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

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

<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet href="http://www.blogger.com/styles/atom.css"
  type="text/css"?>
<feed xmlns='http://www.w3.org/2005/Atom'
    xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/'
    xmlns:gd='http://schemas.google.com/g/2005'
    gd:etag='W/"CUYMQ348fyp7ImA9WB9UFkU."'>
  <id>tag:blogger.com,1999:blog-blogID.postpostID..comments</id>
  <updated>2007-12-14T17:46:22.077-08:00</updated>
  <title>Comments on Lizzy's Diary: Quite disagreeable</title>
  <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://www.blogger.com/feeds/blogID/postID/comments/default' />
  <link rel='alternate' type='text/html'
    href='http://blogName.blogspot.com/2007/12/quite-disagreeable_5283.html' />
  <author>
    <name>Elizabeth Bennet</name>
    <uri>http://www.blogger.com/profile/profileID</uri>
    <email>noreply@blogger.com</email>
  </author>
  <generator version='7.00'
    uri='http://www.blogger.com'>Blogger</generator>
  <openSearch:totalResults>1</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <entry gd:etag='W/"CUYCQX47eSp7ImA9WB9UFkU."'>
    <id>tag:blogger.com,1999:blog-blogID.post-commentID</id>
    <published>2007-12-14T17:46:00.001-08:00</published>
    <updated>2007-12-14T17:46:00.001-08:00</updated>
    <title>Darcy FTW!</title>
    <content type='html'>Darcy FTW!</content>
    <link rel='edit' type='application/atom+xml'
      href='http://www.blogger.com/feeds/blogID/postID/comments/default/commentID' />
    <link rel='self' type='application/atom+xml'
      href='http://www.blogger.com/feeds/blogID/postID/comments/default/commentID' />
    <link rel='alternate' type='text/html'
      href='http://blogName.blogspot.com/2007/12/quite-disagreeable_5283.html?showComment=1197683160001#ccommentID'
      title='' />
    <author>
      <name>Elizabeth Bennet</name>
      <uri>http://www.blogger.com/profile/profileID</uri>
      <email>liz@gmail.com</email>
    </author>
    <thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0'
      href='http://blogName.blogspot.com/2007/12/quite-disagreeable_5283.html'
      ref='tag:blogger.com,1999:blog-blogID.post-postID'
      source='http://www.blogger.com/feeds/blogID/posts/default/postID'
      type='text/html' />
  </entry>
</feed>

删除评论

要删除评论,请向评论的编辑网址发送 DELETE 请求。此网址在上方的评论 Feed 中突出显示。

导出格式

Blogger 允许用户使用 Blogger 导出文件来导出和导入自己的博客。此导出文件包含博客的所有博文和评论。导出文件的格式与检索帖子和评论的部分中描述的 Atom 格式完全相同。此导出文件将包含帖子 Feed 的内容和评论 Feed 的内容,这些文件合并成了一个文档。

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

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

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

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

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

注意:如果您要创建自己的 Blogger 导出文件,目前博文和评论条目的顺序存在一个限制。Blogger 导出文件会先列出所有博文,然后再列出所有评论。允许交错发布和评论条目,只要评论条目在评论对应的帖子之后即可。

要详细了解 Blogger 在导出文件中使用 Atom 格式的方式,请参阅协议参考指南

返回页首