技术开发 频道

使用 PHP 将 Twitter 转换为 RSS

  Twitter API 的技术背景

  从表面上看,Twitter 基本上是一个精简版的博客服务。您拥有发布 tweet 的用户。Tweet 被限制为 140 个字符,带有日期和时间戳。用户可以相互追随,这实际上就是一个简化的联合(syndication)服务。与 Twitter 帐户及相关的时间线和 tweet 有关的信息不仅对标准 Web 界面可用,而且可以通过 Twitter API 被第三方应用程序所用。这个 API 通过具象状态传输(Representational State Transfer,REST)或搜索 API 公开 Teitter 数据和服务。

  本文只讨论 REST API,因为您确实不需要利用搜索功能来发布 tweet 的 RSS 提要。毋庸多言,搜索 API 非常有用,它提供 Atom 和 JavaScript Serialized Object Notation(JSON)格式的数据,允许各种搜索条件(包含一个单词的 tweet,来自某一特定用户,发送给某一特定用户,引用了某个特定用户,包含一个 hashtag,或同时包含以上所有条件)。REST API 同样有用,它提供 RSS、XML、JSON 和 Atom 格式的数据。

  REST API 使用 HTTP 基本身份验证作为它的身份验证模式,大多数库和实用工具的启动都需要使用 Twitter 用户名和密码。如果没有 Twitter 帐户,则需要一个帐户来启动程序,或者至少访问 Twitter 帐户的身份验证凭证。但是,如 Twitter API 的 wiki 所述:所有响应都与进行身份验证的用户的上下文有关。如果试着从您没有追随的受保护用户获得信息,请求就会失败。

  REST API 的名称表明,Twitter API 试着符合具象状态传输的设计原理。REST 通常用来不确切地描述一类简单的接口,它们通过 HTTP 在没有任何额外层(如 SOAP 或 cookies)的情况下传递特定于域的数据。RESTful 服务通常涉及一个或更多的资源,每一个都与一些可独立寻址的内容关联 — 即统一资源标识符(Uniform Resource Identifier,URI)。在 Twitter API 上下文中,有多种 RESTful 服务可用于提取有关用户、追随者、时间线等内容的信息。

  使用 Twitter 涉及一些熟悉的方法。在许多情况下,您可以从一种数据类型切换到另一种数据类型,只需更改文件扩展名即可。需要 Atom 而不是 RSS?切换文件扩展名就行,而且,如果有特定的方法支持它,那么就获得了新格式化的数据流。将请求参数转换为 8 位 Unicode 转换格式(Unicode Transformation Format,UTF-8)并使用统一资源定位符(Uniform Resource Locator,URL)编码也是一个不错的主意,特别是在这些请求参数涉及复杂的字符串时。

  特别注意,Twitter API 支持以下请求类型:

  ·GET,用于数据检索

  ·POST,用于提交、更改或销毁数据

  ·DELETE,也用于销毁数据

  如果试图使用 POST 操作检索数据,API 就会返回一条错误 — 在调试时,最好从带有请求类型的匹配方法入手。

  与其他使用 HTTP 的 REST 服务一样,Twitter API 使用一组状态码和错误消息。Twitter API 为每个请求返回标准且对应的 HTTP 状态码,如 表 1 中所述。这使得使用 Twitter API 就好像使用其他您已经习惯使用的基于 HTTP 的操作一样(如果不是无法区别的话),如 Asynchronous JavaScript + XML (Ajax) 和简单的同步 GET 和 POST 操作。

  表 1. Twitter API 状态码

  错误消息通常以请求的格式返回。如果请求 XML,得到的所有错误消息都将是 XML 格式的。例如,清单 1 是 Twitter API wiki 发布的一条错误消息的一个片段。

  清单 1. 错误消息片段(XML 格式)

<?xml version="1.0" encoding="UTF-8"?>
<hash>
?
<request>/direct_messages/destroy/111.xml</request>
?
<error>No direct message with that ID found.</error>
</hash>

  关于速率限制还有最后一点要注意:允许客户机每小时发出 100 个请求,从他们的第一个请求开始,不包括 POST 更新。未经身份验证的请求将被跟踪 IP 地址,而经过身份验证的请求则对发出请求的用户进行跟踪。只要超过速率限制,Twitter 就会返回一条 400 错误消息,因此您需要考虑在您这一端实现本地缓存。公共时间线会被 Twitter 缓存至少 60 秒,因此请求更新是非常浪费时间的。

  但是,如果您发现自己突然到达速率限制时,可以从 Twitter 请求白名单(请参阅 参考资料)。您会在 48 小时之内得到回复,而请求如果批准的话,您的应用程序将被允许每小时发出多达 20,000 个请求。

0
相关文章