内容


使用 Technorati API

创建自动博客搜索

Comments

什么是 Technorati?

在解释本文标题中提到的流行词之前,我们先解释另一个流行词:blogosphere(博客圈)

术语 blogosphere 是新闻记者和电脑迷的常用词。它是指一类特定的 Web 页面,其中 Web 页面的所有者(即 博主)表达自己的意见、观点、想法、感情。这些页面还包含到其他 Web 页面的链接。关键词 blog 是由 “Web log” 拼接而成的。

处理搜索条件

一些 Web 站点能够让不怎么精通网络技术的人管理自己的博客。WordPress 让非软件开发人员能够借助小部件、主题和模板创建相当高级的博客。这导致博主和博客突然猛增。就上一年而言,blogherald.com 的报告显示全球大约有 2 亿个博客。在撰写本文时,博客圈是了解发生在许多国家的新闻的主要信息来源。

由于博客圈包含了大量各不相同的信息,有人不禁会问:这些信息在什么地方进行分类、跟踪和标记以供搜索呢?

在 Google 中输入 Technorati 将搜索到这样的解释:“Technorati 收集、组织和分发全球的在线交谈。”Time 杂志的解释是:“如果 Google 是 Web 的图书馆,那么 Technorati 就是图书馆的咖啡厅。”(从 参考资料 部分可以找到 Technorati Media 和 Time 文章的链接)。

您可以通过网站 http://technorati.com 访问 Technorati。您将在顶部看到一个蓝绿色的搜索栏,其内包含单词 Search the blogosphere...。单击该栏并输入 Obama。然后单击旁边的放大镜。您马上就能够看到讨论美国总统的特色博文。

Technorati API

使用 Technorati Web 页面可以在博客圈中轻松搜索您需要的内容。不过,作为 Web 应用程序开发人员,您可能希望自动化这个搜索过程,或者让 Web 页面的访问者根据自己的搜索条件查看从博客圈找到的信息。

可以使用 Technorati API 实现以上目标。就像 Internet 上的许多 API 一样,Technorati API 使用 REST 服务。

什么是 REST?

REST 是 Representational State Transfer 的首字母缩写。详细解释 REST 定义涉及的所有东西超出了本文的范围;不过,可以在 IBM developerWorks 上找到详细解释(参考资料 部分提供相关链接)。对于本文讨论的主题而言,可以认为 REST 的作用是使开发人员能够通过简单的 HTTP 调用访问信息和资源。

可以这样思考 REST:要获得特定领域的数据,您仅需将 URL 指向特定的位置。在本文中,这种解释已经很充分中肯。您还可以将其看作是一个简化的 Web 服务器,但是如果您在其他场合宣扬这种思想,可能会招致热议。

对于当前需要讨论的主题而言,Technorati API 是一个 REST 服务,它使用户能够指向特定的 URL 并从博客圈中找到各种满足 URL 中指定的条件的文章。这允许您能够在 Web 应用程序中接受输入,然后使用一个简单的 URL 将输入编码成 API 可理解的格式,并根据输入动态地查询博客圈。

开始:一个简单的例子

考虑 清单 1 中的例子:

清单 1. 一个简单的搜索
http://api.technorati.com/search?key=xxxx&query=Obama

这个 URL 相当简单,它仅包含两个查询参数。

注意,实际的 Technorati API 函数是最后一个斜杠之后的单词(search)。显而易见,这表明 REST 调用将在博客圈中执行搜索。

第一个参数是密匙(key)。实际的 key 因用户而异,并不真的是 xxxx 字符串。要获得密匙,您需要注册 Technorati 并请求一个密匙。这很简单,也很容易。不幸的是,这意味着您不能将本文提供的 URL 复制粘贴到浏览器并查看结果。您必须使用自己的密匙替换 xxxx 字符串。

第二个请求参数是实际的查询。和手动例子一样,搜索使用关键词 Obama

在您使用自己的密匙替换 xxxx 字符串之后,您就可以将这个 URL 复制粘贴到 Web 浏览器并查看返回的结果。返回的结果不一定相同,这取决于 Web 浏览器的品牌和版本。不管屏幕上出现什么结果,最好右键单击页面并选择 View Source 查看返回的实际 XML。

尽管实际的内容与您执行的查询有关,但结果应该类似于 清单 2

清单 2. 一个简单搜索的结果(部分输出)
<?xml version="1.0" encoding="utf-8"?>
<!-- generator="Technorati API version 1.0 /search" -->
<!DOCTYPE tapi PUBLIC "-//Technorati, Inc.//DTD TAPI 0.02//EN" 
	"http://api.technorati.com/dtd/tapi-002.xml">
<tapi version="1.0">
<document>
<result>
    <query>Obama</query>
    <querycount>2270581</querycount>
    <rankingstart></rankingstart>
</result>
<item>
   <weblog>
      <name>Critica Pura</name>
      <url>http://criticapura.com</url>
      <rssurl>http://criticapura.com/feed/</rssurl>
      <atomurl></atomurl>
      <inboundblogs>7</inboundblogs>
      <inboundlinks>10</inboundlinks>
      <lastupdate>2009-06-21 17:13:23 GMT</lastupdate>
   </weblog>
   <title>Jib Jab Obama</title>
   <excerpt>Try JibJab Sendables</excerpt>
   <created>2009-06-21 17:13:23 GMT</created>
   <permalink>http://criticapura.com/2009/06/jib-jab-obama/</permalink>
</item>
...

有意思的是,第一个查询结果是一个外语博客条目(至少对讲英语的人而言是这样)。

result 元素提供关于查询结果的元数据信息。query 的子元素提供实际的查询关键词。querycount 子元素提供来自博客圈并且与查询匹配的文章的数量。

许多 item 元素都跟在 result 元素之后。每个 item 元素都对应一篇与搜索条件匹配的博客文章。

weblog 元素提供关于博客本身的信息。该信息是关于整个博客的信息,而不是仅关于匹配搜索条件的文章的信息。表 1 描述了 weblog 子元素。

表 1. weblog 子元素
元素说明
name博客的实际名称
url博客的 URL
rssurl针对该博客的 Really Simple Syndication (RSS) 提要的 URL
atomurl针对该博客的 Atom 提要的 URL
inboundblogs链接到该博客的博客的数量
inboundlinks链接回到该博客的外部站点的数量
lastupdate博客的最近更新日期和时间

表 2 中描述的元素是 item 而不是 weblog 的子元素。这些子元素引用文章本身。

表 2. item 子元素
元素说明
title博客文章的实际标题
excerpt博客文章的纲要
created文章的撰写日期和时间
permalink博客文章的 URL

基础的 Technorati API 函数

尽管 Technorati API 提供一个强大的搜索函数,但还有一个值得注意的地方,即该 API 还提供其他有用的函数。

cosmos 函数的名字并不直观。它允许您搜索链接到某个基 URL 的博客。例如,假设您想要查找链接回到在 http://nicole-rensmann.bookola.de/blog 中找到的博客文章的所有博客。为此,您应该调用这个 REST 调用:http://api.technorati.com/cosmos?key=xxxx&url=http://nicole-rensmann.bookola.de/blog。如果您将该 URL 复制粘贴到浏览器(可以使用密匙替换 xxxx 字符串),将得到类似于 清单 3 的结果。

清单 3. cosmos 函数的输出(缩略)
<?xml version="1.0" encoding="utf-8"?>
<!-- generator="Technorati API version 1.0" -->
<!DOCTYPE tapi PUBLIC "-//Technorati, Inc.//DTD TAPI 0.02//EN" 
  "http://api.technorati.com/dtd/tapi-002.xml">
<tapi version="1.0">
<document>
  <result>
    <url>http://nicole-rensmann.bookola.de/blog</url>
    <weblog>
        <name>Nicole Rensmanns kleine Welt</name>
        <url>http://nicole-rensmann.bookola.de/blog</url>
        <rssurl>http://nicole-rensmann.bookola.de/blog/?feed=rss2</rssurl> 
        <atomurl>http://nicole-rensmann.bookola.de/blog/?feed=atom</atomurl> 
        <inboundblogs>6</inboundblogs>
        <inboundlinks>6</inboundlinks>
        <lastupdate>2009-06-21 17:10:52 GMT</lastupdate>
        <rank>575630</rank>
    </weblog>
    <inboundlinks>7</inboundlinks>
    <rankingstart>1</rankingstart>
  </result>
  <item>
        <weblog>
            <name>Das Datenschutz-Blog</name>
            <url>http://www.datenschutzbeauftragter-online.de</url>
            <rssurl>http://www.datenschutzbeauftragter-online.de/feed/</rssurl>
            <atomurl>http://www.datenschutzbeauftragter-online.de/feed/atom/</atomurl>
            <inboundblogs>83</inboundblogs>
            <inboundlinks>343</inboundlinks>
            <lastupdate>2009-06-20 07:22:20 GMT</lastupdate>
        </weblog>
        <nearestpermalink>http://www.datenschutzbeauftragter-online.de</nearestpermalink>
        <title>Uberblick zum Thema Netzsperren</title>
        <excerpt>der Ursula von der Leyen Sachliche Debatte uber das Thema</excerpt>
        <linkcreated>2009-05-11 04:20:01 GMT</linkcreated>
        <linkurl>http://nicole-rensmann.bookola.de/blog/?p=3293</linkurl>
  </item>
...

这个 XML 格式的输出与 清单 2 中的输出极为相似,但也有几个显著的例外。在这里,weblog 元素提供带有入站连接的博客的信息。注意,url 子元素直接对应 url 请求参数。

在这里您又看到几个 item 元素。每个这些元素都包含关于链接回到您查询的博客的博客的信息。

tag 函数允许您搜索带有特定标记的博客文章。Technorati 使用标记对博客文章进行分类。博文作者能够给特定主题的文章放置一个或多个标记。

要在博客圈中查找关于钓鱼的文章,您可以使用这个 URL:http://api.technorati.com/tag?key=xxxx&tag=fishing。在这里同样需要使用您自己的密匙替换 URL 中的 xxxx 字符串。如果您将该 URL 复制粘贴到浏览器中,将看到类似于 清单 4 的结果。

清单 4. tag 函数的输出(缩略)
<?xml version="1.0" encoding="utf-8"?>
<!-- generator="Technorati API version 1.0" -->
<!DOCTYPE tapi PUBLIC "-//Technorati, Inc.//DTD TAPI 0.02//EN" 
 "http://api.technorati.com/dtd/tapi-002.xml">
<tapi version="1.0">
<document>
 <result>
  <query>fishing</query>
  <postsmatched>43655</postsmatched>
  <blogsmatched></blogsmatched>
  <start>1</start>
  <limit>20</limit>
  <querytime>3.126</querytime>
 </result>
 <item>
  <weblog>
   <name>Travel and Leisure Articles</name>
   <url>http://www.toptravelarticles.com</url>
   <rssurl>http://www.toptravelarticles.com/feed</rssurl>
   <atomurl>http://www.toptravelarticles.com/feed/atom</atomurl>
   <inboundlinks>40</inboundlinks>
   <inboundblogs>19</inboundblogs>
   <lastupdate>2009-06-21 17:06:01</lastupdate>
   <hasphoto></hasphoto>
  </weblog>
  <title>Visiting Ghana?</title>
  <excerpt>If you want to experience the culture up close</excerpt>
  <created>2009-06-21 17:06:01</created>
  <postupdate>2009-06-21 17:06:01</postupdate>
  <permalink>http://www.toptravelarticles.com/visiting-ghana.html</permalink>
 </item>
...

同样,这个输出类似于其他 Technorati API 函数的输出。基本区别是,在这里博客文章使用 fishing 进行标记。

一个尤其有趣的 Technorati API 函数是 toptagstoptags 函数在执行之后显示最常使用的标记。将这个 URL 复制粘贴到浏览器中(使用您的密匙替换 xxxx):http://api.technorati.com/toptags?key=xxxx。您将看到类似于 清单 5 的结果。

清单 5. toptags 函数的输出(缩略)
<?xml version="1.0" encoding="utf-8"?>
<!-- generator="Technorati API version 1.0 /topptags" -->
<!DOCTYPE tapi PUBLIC "-//Technorati, Inc.//DTD TAPI 0.02//EN" 
 "http://api.technorati.com/dtd/tapi-002.xml">
<tapi version="1.0">
<document>
<result>
<limit>20</limit>
</result>
<item>
<tag>Weblog</tag>
<posts>9578863</posts>
</item>
<item>
<tag>Life</tag>
<posts>7355121</posts>
</item>
<item>
<tag>News</tag>
<posts>4638644</posts>
</item>
...

这个输出很容易解析。不仅列出了每个标记,还在下一个元素中列出了包含该标记的博客文章的数量。

结束语

Technorati 是一个 Web 站点,它维护关于在博客圈中发布的文章的信息。通过 Technorati,您能够根据特定的条件查询博客文章。

为了遵循信息高速路上的未成文规则,Technorati 还提供一个 API,从而使我们能够根据特定的条件集通过编程的方式搜索博客文章。这个 API 通过 REST 调用进行工作。

Web 应用程序开发人员可以使用 Technorati REST API 自动化博客搜索。开发人员可以在 Web 应用程序上实现自动化博客搜索,让用户能够在博客圈中搜索符合自己的兴趣的文章。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=XML, Open source, Web development
ArticleID=438139
ArticleTitle=使用 Technorati API
publish-date=10192009