IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML | Open source  >

技巧: 使用 PHP 实现引用链接(trackback)

使用 PHP 和 PEAR 手工创建博客发布项(blog post)的引用链接

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

讨论

英文原文

英文原文


级别: 中级

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 表单
交互式生成 trackback 的 Web 表单

如示例所示,Services_Trackback 包提供了一种可以手动创建博客发布项请求 trackback 的简便方法。如果您需要生成内容的 trackback,那么这种方法非常有用,但是,对于博客来说却没有必要。尝试这种新方法并亲自感受一下吧!



参考资料

学习

获得产品和技术

讨论


关于作者

Vikram Vaswani 是 Melonfire 的创始人和 CEO,该公司是一家专门研究开源工具和技术的咨询服务公司。他还著有 PHP Programming Solutions How to do Everything with PHP and MySQL 等著作。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

将您的建议发给我们或者通过参加讨论与其他人分享您的想法.







回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款