トラックバックの実装
■トラックバック技術仕様書:Discreet Blog■Services_Trackback:PEAR
■トラックバックってなに?:レントラ
■あなたのサイトを一斉送信!:PinGoo!
PEARが提供するトラックバックのサンプルを紹介します。
Services_Trackbackにはスパムチェック機能もついています。
現在(2006/06/06)スパムチェックに「Akismet DNSBL Regex SURBL Wordlist」の5つが用意されています。
私が確認したTrackback.php,v 1.18 2006/02/16 22:57:04のバージョンでは397行目
Services_Trackback::send($data = null)内の以下のコードに誤りを確認しました。
$req->addHeader("User-Agent", $this->_options['useragent']);
/* 第二引数に$optionsを指定します */
$req->addHeader("User-Agent", $options['useragent']);[サンプル]
●トラックバックPing
●トラックバックPingの一覧
●テスト用トラックバックURL
http://study.rakuto.net/sample/trackback/trackback.php
トラックバックPing
require_once 'Services/Trackback.php'; // Services_Trackbackオブジェクトの生成 $trackback = new Services_Trackback(); $title = empty($_REQUEST['title'])?'タイトル':$_REQUEST['title']; $url = empty($_REQUEST['url'])?'http://rakuto.net/':$_REQUEST['url']; $excerpt = empty($_REQUEST['excerpt'])?'要約':$_REQUEST['excerpt']; $blog_name = empty($_REQUEST['blog_name'])?'ブログ名':$_REQUEST['blog_name']; $ping = 'http://study.rakuto.net/sample/ServicesTrackback/trackback.php'; // 各送信トラックバック情報を設定 $trackback->set('title', $title); $trackback->set('url', $url); $trackback->set('excerpt', $excerpt); $trackback->set('blog_name', $blog_name); $trackback->set('trackback_url', $ping); header('Content-Type: text/html; charset=UTF-8');
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>トラックバックピング</title> </head> <body> <?php if (!empty($_REQUEST['send'])){ $result = $trackback->send(); if (PEAR::isError($result)) { echo $result->getMessage(); } } //if (!empty($_REQUEST['send'])) ?> <form name="ping" method="get" action="<?php echo $_SERVER['PHP_SELF'];?>"> <label for="url">固定リンク</label>: <input id="url" type="text" name="url" value="" size="32"><br /> <label for="title">タイトル</label>: <input id="title" type="text" name="title" value="" size="32"><br /> <label for="blog_name">ブログ名</label>: <input id="blog_name" type="text" name="blog_name" value="" size="32"> <br /> <label for="excerpt">抜粋、要約</label>: <textarea id="excerpt" name="excerpt" cols="40" rows="4"></textarea> <br /> <input type="submit" name="send" value="TB送信" /><br /> </form> </body> </html>
トラックバック受信
require_once 'Services/Trackback.php'; // トラックバック情報 $trackbackData = array( 'id' => 1, 'host' => $_SERVER['SERVER_ADDR'], 'title' => 'トラックバックテスト', 'excerpt' => 'rakutoネットです。', 'url' => 'http://rakuto.net/', 'blog_name' => 'rakutoネットブログ', 'trackback_url' => $_SERVER['PHP_SELF'] ); // Services_Trackbackオブジェクトの作成 $trackback = Services_Trackback::create($trackbackData); // 送信されたトラックバック情報を受信 $result = $trackback->receive(); if (PEAR::isError($result)) { echo $trackback->getResponseError($result->getMessage(), 1); } else { // 送信された各情報を取得する $values = array( 'host' => $trackback->get('host'), 'title' => $trackback->get('title'), 'excerpt' => $trackback->get('excerpt'), 'url' => $trackback->get('url'), 'blog_name' => $trackback->get('blog_name'), ); insert($values); echo $trackback->getResponseSuccess(); } /** * データ操作設定・実行 * * @access public * @param array $values * @return integer データ操作結果 */ function insert($values) { foreach ($values as $key=> $value){ $values[$key] = sqlite_escape_string($value); } $timestamp = date('Y-m-d H:i:s',time()); $dbh = sqlite_open('tb.db', 0666); $sql = 'INSERT INTO '. 'tb ('. 'timestamp,'. 'title,'. 'excerpt,'. 'url,'. 'blog_name,'. 'ip_address'. ') VALUES ('. "'".$timestamp."',". "'".$values['title']."',". "'".$values['excerpt']."',". "'".$values['url']."',". "'".$values['blog_name']."',". "'".$ip_address."'". ')'; return sqlite_query($sql, $dbh); }
