开发者指南:JavaScript

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

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

除了介绍 Blogger Data API 功能的一些背景信息外,本文档还提供了使用 JavaScript 客户端库进行基本 Data API 交互的示例。如果您想详细了解 该库使用的底层协议,请参阅协议部分 此开发者指南。

目录

受众群体

本文档适用于想要编写可与 Blogger 交互的 JavaScript 客户端应用的程序员。该部分提供了一系列使用 JavaScript 客户端库进行基本 Data API 交互的示例。

有关 Blogger Data API 参考信息,请参阅协议参考指南。本文档假定您了解 Google Data API 协议背后的一般概念,以及 JavaScript 客户端库使用的模型和控制流。此外还假定您知道如何使用 JavaScript 编程。

有关 请参阅 JavaScript 客户端库 API 参考

本文档旨在按顺序阅读;每个示例都基于之前的示例。

使用条款

您同意遵守 Google JavaScript 客户端库使用条款

关于受支持的环境

目前,我们仅支持在浏览器的网页中运行的 JavaScript 客户端应用。目前支持的浏览器包括 Firefox 1.5 及更高版本,以及 Internet Explorer 6.0 及更高版本。

JavaScript 客户端库负责处理与服务的 服务器。如果您是经验丰富的 JS 开发者,可能会想:“但同源政策怎么办?”JavaScript 客户端库可让您的客户端 来自任何域的 Google Data API 请求,同时保持遵守 浏览器安全模型。

使用入门

在编写 JavaScript 客户端应用之前,您需要进行一些设置来获取该库。

创建 Blogger 账号

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

获取库

客户端必须先从服务器请求客户端库代码,然后才能使用客户端库。

首先在<script><head> 部分来提取 Google AJAX API 加载器:

<script type="text/javascript" src="https://www.google.com/jsapi"></script>

如需在提取加载器后获取 Google Data API 客户端库,请在 JavaScript 设置代码中使用以下代码行,该代码行必须从 HTML 文档的 <head> 部分(或从在 HTML 文档的 <head> 部分使用 <script> 标记包含的 JavaScript 文件)调用:

google.load("gdata", "1.x");

google.load() 的第二个参数是 JavaScript 客户端库的请求版本号。我们的版本号方案 是根据 Google Maps API 所使用的方法建模的。以下是 版本号及其含义

"1"
主要版本 1 的倒数第二个修订版本。
"1.x"
主要版本 1 的最新修订版。
"1.s"
主要版本 1 的最新稳定修订版。我们会根据从开发者那里收到的反馈,偶尔将某个版本的客户端库声明为“稳定”。但是,该版本可能并不具有最新的功能。
"1.0""1.1”等
库的特定版本,具有指定的主要版本号和次要版本号。

调用 google.load() 后,您必须告知加载器等待网页加载完成,然后再调用您的代码:

google.setOnLoadCallback(getMyBlogFeed);

其中,getMyBlogFeed() 是本文档后面部分中将要定义的函数。使用这种方法,不要使用 onload 处理程序已附加到 <body> 元素。

在 Blogger 服务中进行身份验证

您可以使用 Blogger 数据 API 访问公共和私有供稿。 公开 Feed 不需要任何身份验证,但会处于只读状态。如果您想修改博客,则客户端需要先进行身份验证,然后才能请求私享 Feed。

JavaScript 客户端库使用 AuthSub 身份验证系统。对于 有关一般使用 Google 数据 API 进行身份验证的更多信息,请参阅 身份验证 文档

AuthSub 代理身份验证

需要对用户进行 Google 账号身份验证的 Web 应用会使用 AuthSub 代理身份验证。网站运营商和客户端代码无权访问 Blogger 用户的用户名和密码;而是,客户端会获取特殊的 AuthSub 令牌,以便客户端代表特定用户执行操作。

下面简要概述了 基于网络的 JavaScript 客户端:

  1. 客户端应用调用 google.accounts.user.login() 方法,向其传递“作用域”值 用于指明要使用的 Google 服务。对于 Blogger,范围为 "http://www.blogger.com/feeds/"
  2. 客户端库会将浏览器发送到 Google 的“访问权限请求”页面,用户可以在该页面上输入凭据以登录服务。
  3. 如果用户成功登录,AuthSub 系统会发送 将浏览器返回至 Web 客户端的网址,同时传递身份验证信息 令牌。
  4. JavaScript 客户端库会将令牌存储在 Cookie 中,并将控制权返回给调用 google.accounts.user.login() 的客户端应用函数。
  5. 当客户端应用随后调用 与 Blogger 交互时,客户端库会自动将令牌附加到 所有请求

注意:为了让 JavaScript 客户端库在网络浏览器中发出经过身份验证的 Blogger 请求,您的网页必须包含与您的网页托管在同一网域中的图片。它可以是任何图片,甚至是 单像素透明图片,但网页上必须有图片。如果您 如果您不希望该图片显示在您的网页上,可以使用style <img> 标记中,将图像定位在 渲染区域例如 style="position:absolute; top: -1000px;"

以下是用于处理登录的客户端应用代码。我们将调用 setupMyService() 函数。

function logMeIn() {
  scope = "http://www.blogger.com/feeds/";
  var token = google.accounts.user.login(scope);
}

function setupMyService() {
  var myService =
    new google.gdata.blogger.BloggerService('exampleCo-exampleApp-1');
  logMeIn();
  return myService;
}

提示:我们强烈建议您提供 登录按钮或其他用户输入机制来提示用户开始登录 。如果您调用 加载后立即google.accounts.user.login(),而不使用 等待用户互动发生,那么用户在抵达时最先看到的内容 您的网页是 Google 登录页面。如果用户决定不登录,Google 不会将其重定向回您的网页;因此,从用户的角度来看,他们尝试访问您的网页,但被转到了其他位置,而未被重定向回来。这种情况可能会让用户感到困惑和沮丧。在本文档中的示例代码中,我们将在加载后立即调用 google.accounts.user.login(),以使示例保持简单,但我们不建议在实际客户端应用中采用这种方法。

请注意,您无需对名为 token 的变量执行任何操作;客户端库会跟踪令牌,因此您无需执行任何操作。

注意:创建新的 BloggerService 对象时,客户端库会调用名为 google.gdata.client.init() 的方法,该方法会检查客户端所运行的浏览器是否受支持。如果存在错误,则客户端库 向用户显示一条错误消息。如果您想处理此类错误, 则您可以明确调用 google.gdata.client.init(handleInitError),然后再创建 服务,其中 handleInitError() 是您的函数。如果发生初始化错误 则您的函数会收到一个标准 Error 对象;你可以做任何事 该对象所需的全部资源

该令牌将保持有效,直至您通过调用 google.accounts.user.logout()

function logMeOut() {
  google.accounts.user.logout();
}

如果您不调用 logout(),则存储 令牌的有效期为两年,除非用户将其删除。该 Cookie 会跨浏览器会话保留,因此用户可以关闭浏览器,然后重新打开并返回您的客户端,并且仍会处于登录状态。

不过,在某些异常情况下,令牌可能会在会话期间失效。如果 Blogger 拒绝令牌,您的客户端应通过调用 logout() 移除包含当前令牌的 Cookie,然后再次调用 login() 来获取新的有效令牌,以处理错误情况。

另外两种 AuthSub 方法也可用于各种 上下文:

  • google.accounts.user.checkLogin(scope) 可告知您浏览器当前是否拥有给定作用域的身份验证令牌。
  • google.accounts.user.getInfo()会提供详细信息, 关于当前令牌的信息,以用于调试。

详细了解如何使用 JavaScript 与 AuthSub 交互,包括 有关令牌管理、checkLogin()getInfo(),请参阅使用 “AuthSub”使用 JavaScript 客户端库进行身份验证 文档。

返回页首