级别: 中级 Vikram Vaswani, 创始人, Melonfire
2008 年 4 月 17 日 Trackback 在博客(blog)中扮演着非常重要的角色,它允许博客阅读者查找并访问相关链接,从而找到更多有用的内容。PEAR Services_Trackback 包使开发人员可以通过一个定义明确的 PHP API 手动创建这些 trackback,通过这个 PHP API,可以创建 trackback 请求并解析 XML 响应。
简介
blogosphere 的一大优点在于,它是一个高度网络化、发展迅速的社区。通过发布有用的内容并将其链接到其他博客作者发布的相关内容,博客作者可以快速实现社区体验,并且,在很短的时间内就可吸引大量的读者。
 |
常用缩写词
- API - 应用程序编程接口(application programming interface)
- PHP - 超文本预处理器(PHP: Hypertext Preprocessor)
- XML - 可扩展标记语言(Extensible Markup Language)
|
|
博客作者可以使用多种工具将多个博客发布项链接在一起,trackback 就是其中的一种,它提供了一种机制,允许博客作者通过一个反向链接(backlink)与相关发布项或资源的作者联系。Trackback 加强了博客之间的相互连接,并为博客阅读者提供了一种方便(自动)的方法查找有用的相关内容。
如果您已经拥有了一个博客,那么可以使用博客提供的内置功能创建到其他博客内容的 trackback。但是,如果您没有建立博客,但是希望在您的 Web 页面和其他博客之间创建 trackback,该怎么做呢?如果您使用 PHP,那么 Services_Trackback 包可以提供帮助,它提供了一个手动创建和发送 trackback 的通用机制。
安装
Services_Trackback 包由 Tobias Schlitt 维护,并在 PHP 许可下发布到 PHP 社区。它可以从 PEAR、PHP Extension and Application Repository 免费获得,最简单的安装方法是使用自动的 PEAR 安装程序,后者默认情况下随 PHP 版本附带。要进行安装,在 shell 提示符处中发出以下命令即可:
shell> pear install Services_Trackback
PEAR 安装程序现在将连接到 PEAR 包服务器,下载并将其安装到系统中的合适位置。本技巧使用的是 Services_Trackback V0.6.1 (beta)。
要手动安装这个包,需访问其主页,下载源代码归档文件,并将文件手动解压缩到期望的位置。注意,手动安装过程需要了解 PEAR 包的组织结构。您可以通过本技巧的 参考资料 部分中的链接访问 Services_Trackback 包的主页。
概览及基本用法
在深入研究 Services_Trackback 之前,将首先简单介绍一下 trackback 的工作原理。最初的 Trackback 规范由 SixApart 开发,它说明了如何发送一个 trackback 请求:通过 HTTP 向指定的 trackback URL 发送一个 POST 请求。trackback URL 是源博客定义的 URL,用来接收针对特定发布项的 trackback 请求。
这个 POST 请求包含了各种信息片段,从而使 trackback 更加有用:
- 发起 trackback 的 Web 页面的标题和名称
- 从页面内容中摘取的相关内容
- 发起 trackback 的页面的 URL
以上这些信息片段中,只有发起 trackback 的页面的 URL 是强制内容;然而,要创建具有相关性的有用的 trackback,应该始终包含其他字段中有意义的内容。
清单 1 显示了一个 POST 请求的示例,它创建了到 http://www.originating.blog.com/the/original/post 中的原始发布项的 trackback:
清单 1:trackback 的 POST 请求
POST /the/original/post/trackback
Content-Type: application/x-www-form-urlencoded
title=Trackback+Test&url= http%3A%2F%2Fmy.blog.domain%2Fsome%2Fpost%2F
&excerpt=This+is+what+I+said+about+your+post...&blog_name=My+Blog
|
现在,当目标服务器接收到这个 trackback 请求后,服务器将生成两种响应中的一种,并且都使用 XML 格式。如果 trackback 请求非常整齐,看上去不是垃圾邮件,并且发起 trackback 的主机没有出现在黑名单中,那么服务器通常会接受请求并创建 trackback 链接,并使用如 清单 2 所示成功消息作为响应:
清单 2:一个 XML 成功响应
<?xml version="1.0" encoding="utf-8"?>
<response>
<error>0</error>
</response>
|
另一方面,如果 trackback 失败,将生成如 清单 3 所示的错误消息:
清单 3:一个 XML 错误响应
<?xml version="1.0" encoding="utf-8"?>
<response>
<error>11</error>
<message>Database error, could not save trackback</message>
</response
|
幸运的是,Services_Trackback 负责生成 POST 请求并为您解析响应。清单 4 演示了该包的典型应用:
清单 4:使用 PHP 生成一个 trackback
<?php
$trackbackData = array(
'title' => 'Trackback Test',
'excerpt' => 'This is what I said about your post...',
'url' => 'http://my.blog.domain/some/post/',
'blog_name' => 'My Blog',
'trackback_url' => 'http://www.originating.blog.com/the/original/post/trackback'
);
// include class
include "Services/Trackback.php";
// initialize new instance
$trackback = new Services_Trackback();
// set object properties
foreach ($trackbackData as $k => $v) {
$trackback->set($k, $v);
}
// send trackback
$ret = $trackback->send();
if (PEAR::isError($ret)) {
echo "ERROR. Trackback failed because: " . $ret->getMessage();
} else {
echo "Trackback successfully posted";
}
?>
|
清单 4 在 PHP 中使用 Services_Trackback 包创建一个 trackback 并将其发布到一个博客发布项。它首先读取 Services_Trackback 类文件并初始化 Services_Trackback 类的对象实例。接下来,类的 set() 方法通过一个关联数组设置 trackback 的各种属性:trackback URL、发布项标题、发布项 URL、博客名称 以及一段发布项摘要。最后,对象的 send() 方法实际创建包含 trackback 请求的 POST 包并将其传递给 trackback URL。如果 send() 的返回值不是 PEAR Error,则显示一个表示成功的通知;如果返回的是 PEAR Error,用户将看到包含 XML 错误消息文本的错误通知。
一个简单的应用程序
可以很轻松地以一种交互的方式使用 Services_Trackback 包。您将创建一个 Web 表单,允许用户向提供支持的博客发布 trackback。如 清单 5 所示:
清单 5:通过交互的方式设置 trackback 的 Web 表单
<html>
<head></head>
<body>
<h2>Post a Trackback</h2>
<?php if (!isset($_POST['submit'])) { ?>
<form method="post" action="track3.php">
Trackback URL:
<br/>
<input type="text" name="tb_url" size="30" />
<p/>
Blog name:
<br/>
<input type="text" name="my_blog_name"/>
<p/>
Post title:
<br/>
<input type="text" name="my_post_title"/>
<p/>
Post excerpt:
<br/>
<textarea name="my_post_excerpt" cols="30" rows="5"></textarea>
<p/>
Post URL:
<br/>
<input type="text" name="my_post_url" size="30" />
<p/>
<input type="submit" name="submit" />
</form>
<?php
} else {
// encode POST data
$title = $_POST['my_post_title'];
$excerpt = $_POST['my_post_excerpt'];
$url = $_POST['my_post_url'];
$tburl = $_POST['tb_url'];
$name = $_POST['my_blog_name'];
$trackbackData = array(
'title' => $title,
'excerpt' => $excerpt,
'url' => $url,
'blog_name' => $name,
'trackback_url' => $tburl
);
// include class
include "Services/Trackback.php";
// initialize new instance
$trackback = new Services_Trackback();
// set object properties
foreach ($trackbackData as $k => $v) {
$trackback->set($k, $v);
}
// send trackback
$ret = $trackback->send();
if (PEAR::isError($ret)) {
echo "ERROR. Trackback failed because: " . $ret->getMessage();
} else {
echo "Trackback successfully posted";
}
}
?>
</body>
</html>
|
清单 5 生成了一个 Web 表单,要求用户输入各种不同的 trackback 属性:trackback URL、发布项标题和 URL、博客名称和摘录。这些信息随后被提交到一个 PHP 脚本,该脚本初始化一个新的 Services_Trackback 对象,并将 trackback 发布到指定的 URL。然后,对 XML 响应进行解析并显示表示成功或失败的通知。
图 1 演示了 Web 表单的外观:
图 1. 交互式生成 trackback 的 Web 表单
如示例所示,Services_Trackback 包提供了一种可以手动创建博客发布项请求 trackback 的简便方法。如果您需要生成内容的 trackback,那么这种方法非常有用,但是,对于博客来说却没有必要。尝试这种新方法并亲自感受一下吧!
参考资料 学习
获得产品和技术
讨论
关于作者
原文链接: http://www.ibm.com/developerwork...
|