福の神

趣味のホームページ制作
PHPでの手作りホームページ-XOOPSやMovableType等のCMSを使ってのサイトの作り方-

 
Web fuku-kami.net
 スペースの関係で「ホームページ」を「HP」と略している個所があります。
  トップページ -> WEBプログラム作成&技 -> ブログ的な機能 -> トラックバックの送信
更新通知pingの送信 <<− トラックバックの送信 −>> 後の記事無し
マロンの顔 トラックバックの送信
2006年9月28日
 
今回は、ブログには、欠かせないトラックバック(TrackBack)の機能を実装したいと思います。

多分、トラックバックの機能を実装したいと思っている人が読んでくれていると思うので、どういったものかの細かい説明は省きます。
簡単には、書いた側は、どこかのサイトの関連の記事を書いたので、「書いたよ!」って、いう合図を送って、リンクをはってもらい、
受ける側は、「書いたよ!」の合図を受け取って、リンクをはる事を行います。

MovableTypeに実装された技術で、オープンな規格として、公開されています。
英語仕様書
日本語訳


まずは、簡単そうな送信の方から作成します。

基本的には、POSTメソッドで、4つのパラメータ[blog_name,title,url,excerpt]を送れば良いだけです。
 
 

<form method="POST" action="トラックバックを受信してくれるURL">
  <input type="text" name="blog_name" value="ブログサイト名">
  <input type="text" name="title" value="記事のタイトル">
  <input type="text" name="url" value="記事が書かれたURL">
  <input type="text" name="excerpt" value="記事の概要">
  <input type="submit" value="トラックバック送信">
</form>

 

上記のようなHTMLを用意し、内容を適切なものに書き換えて、送信すると結果がXMLで戻ってきます。
 
 

<?xml version="1.0" encoding="UTF-8"?>
<response>
 <error>0</error>
</response>

 

正常時は、このように<error>タグに挟まれた数字が0で戻ってきます。

一方、指定された記事IDが存在しない等のエラーが発生すると
 
 

<?xml version="1.0" encoding="UTF-8"?>
<response>
 <error>1</error>
 <message>error message</message>
</response>

 

<error>タグに挟まれた数字が1(もしくは0以外)で戻ってきます。


流れとしては、こんな感じです。
毎回、HTMLを起動して、内容書き換えて送信しても良いのですが、あまりにも面倒だし、折角プログラムが作れるので、管理機能部で、簡単に送信できるように取り入れましょう。

※※
MovableTypeへのトラックバック送信は、上記静的HTMLからの送信で大丈夫でしたが、「ロリポップ」のロリポブログで作成の「映画のすすめ」では、[Trackback ping with invalid headers: denied.]とエラーになりプログラムから送信しないと駄目なようです。
※※
 
 

// POSTするデータを作る
$postdata = '';
foreach (array('blog_name','title','url','excerpt') as $key) {
 $value = $table_data[$key];
 $value = mb_convert_encoding($value, 'utf-8', 'euc-jp');
 $postdata .= $key.'='.urlencode($value).'&';
}

 


$table_data連想配列に、添え字 'blog_name','title','url','excerpt'の値が入っているものとします。
$postdata変数に、加工後のデータが、設定されます。

次に、上で作成のPOSTデータを、トラックバックしたいURL($ping_url変数に入っているものとします)へ送信します。
更新通知pingでも使用した、curl関数ライブラリーを使用します。

 
 

// curlのセットアップ
$ch = curl_init($ping_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);

ob_start();        //出力バッファON
curl_exec($ch);      // 送信実行
$xml = ob_get_contents(); //結果取得
ob_end_clean();      // バッファの破棄&バッファリング終了

curl_close($ch);  //curlの終了

 


そして戻ってきたXMLメッセージを解析して、エラーの場合は、エラー内容を$result変数へ代入します。

 
 

// 結果XMLの解析
if (preg_match('|(.+?)|', $xml, $matches)) {
 $is_error = $matches[1];   // 正しい結果XMLからerrorノードの値を取得
 if ($is_error > 0) {
  if (preg_match('|(.+)?|', $xml, $matches)) {
   $error_msg = mb_convert_encoding($matches[1], 'euc-jp', 'auto');
  } else {
   $error_msg = 'UNKNOWN ERROR';
  }
 }
} else {
 $is_error = 1;
 $error_msg = 'UNKNOWN ERROR'; // 不明なエラー
}

if ($is_error > 0) {$result = $error_msg;}

 


うまく、トラックバック送信出来ましたでしょうか?

更新通知pingの送信 <<− トラックバックの送信 −>> 後の記事無し
 

世界標準のブログソフトウェア「Movable Type」発売中!!
 
このページの先頭へ