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








