« あぅ、Movable type日本語関連バグ多し・・・ | メイン | Fedora4にしたら、PHPが起動しない? »

2005年09月21日

トラックバックを受け取るPHPスクリプト

PHPスクリプトで作る、トラックバック受信スクリプト。ひな形バージョン

トラックバック仕様書

トラックバック技術仕様書

問題点

トラックバックPingがMTのバグなどでUTF-8以外で来ることがある。
  mb_convert_encodingを"auto"で受けるようにした。

トラックバックPing内にHTMLやPHPコードが合った場合に実行する可能性がある
  htmlspecialcharsでコードを可視コードに変換

完成コード

今回の目標:トラックバックを受け取る。

DBにはまだ書き込めないので、ファイルに保存して、目で見る。

<html>
<?php
//必要に応じて書き換え、システム側の漢字コード
$target_code="EUC-JP";
//$target_code="UTF-8";
//$target_code="Shift-JIS";
//必要に応じて書き換え、リモート側の漢字コード
$remote_code="auto";
//$remote_code="UTF-8";
$query = getenv ("PATH_INFO");
$info = split ("[/\.]", $query);
$cnt = count($info);
$ret = "";
//実際にトラックバックを処理する関数
//今回はファイル保存のために変数に内容を記録するだけ
//$target_id:トラックバックのターゲットID
//$title:Pingで飛んできたトラックバック元の記事タイトル
//$excerpt:Pingで飛んできたトラックバック元の概要
//$blog_name:Pingで飛んできたトラックバック元のブログ名
//$url:Pingで飛んできたトラックバック元の記事のURL
function call_back_trackback($target_id,$title,$excerpt,$blog_name,$url){
//ここにトラックバックPing受け取り時の処理を書く
global $ret;
$ret .= "ターゲットID : ${target_id}<br />\r\n";
$ret .= "トラックバック元の記事タイトル : ${title}<br />\r\n";
$ret .= "トラックバック元の概要 : ${excerpt}<br />\r\n";
$ret .= "トラックバック元のブログ名 : ${blog_name}<br />\r\n";
$ret .= "トラックバック元の記事のURL : ${url}<br />\r\n";};//Pingをパースするための関数
function parse_ping(){
global $target_code,$remote_code,$info;

$targetid = htmlentities($info[1]);
$title = htmlspecialchars (mb_convert_encoding($_POST["title"],$target_code,$remote_code));
$excerpt = htmlspecialchars (mb_convert_encoding($_POST["excerpt"], $target_code,$remote_code));
$blog_name = htmlspecialchars (mb_convert_encoding($_POST["blog_name"], $target_code,$remote_code));
$url = htmlspecialchars (mb_convert_encoding($_POST["url"], $target_code,$remote_code));
call_back_trackback($targetid,$title,$excerpt,$blog_name,$url);
}
?>
<head>
<title>
トラックバックテスト1
</title>
</head>
<body>
<?php
$ret ='<html><head><meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /></head><body>';
if($cnt == 2){
parse_ping();
}else{
$ret .= "URLパラメータの数が正しくなかったよ<br />\r\n";
}
$ret .= "</body></html>";
file_put_contents("trackback_r1.html",$ret);
?>
</body>
<html>

実際のコード

ここにトラックバックを打つと上のコードが走る。 http://revilog.com/program/sample/trackback_test1.php/1

処理された内容はファイルから見ることが出来る。 http://revilog.com/program/sample/trackback_r1.html
※排他制御はしていないので、同時にトラックバックが打たれると最新の物だけ表示します。

このコードをダウンロードする。(右クリックで保存してください。)

残課題

DBに保存
仕様書に記載されているGETによるトラックバック一覧表示
トラックバックにレスポンスを正常にかえしていないので、正常にかえす

トラックバック結果をjavascriptでBlogに貼れるようにする(MTのトラックバックをリプレイス)

ライセンス

クリエイティブ・コモンズ・ライセンス
この作品(このページおよび、このページのコードに限定して)は、クリエイティブ・コモンズ・ライセンス 帰属の下でライセンスされています。 Only this page and this page's code

カテゴリ:[PHP][Trackback]

投稿者 kokorohamoe : 2005年09月21日 01:58

トラックバック

このエントリーのトラックバックURL:
http://revilog.com/tb_ping.php/6291


スパム防止のため、当サイトへのリンクの無い記事からのトラックバックを禁止する設定にしてあります。
トラックバックされる場合は、リンクを作成してから、トラックバックを打ってください。

コメント

コメントしてください




保存しますか?