PHP+トラックバックでTwitterに投稿する

(1/1)
PHP でトラックバックを受け、Twitter にメッセージを投稿するプログラムを作る。
ぱふぅ家のホームページでは、実際にこのスクリプトを利用し、更新情報を Twitter - papa_pahoo に投稿している。
Twitter に投稿する部分は、前回の「PHP で Twitter に投稿する」で作成した関数をそのまま使い、今回はトラックバックを受ける部分を追加する形でスクリプトを作成していく。

サンプル・プログラム

ダウンロード(PHP4/5共用)

"http://localhost/hogehoge/tb2twitter.php" に設置したとすると、この URL に対して普通のトラックバックを送ることによって、トラックバックのタイトルと URL を取り出して自動的に Twitter に投稿してくれる。
space
【注意】
このスクリプトは、ローカルの PHP環境に置くべきである。
なぜなら、インターネットに公開されている PHP環境に設置すると、誰もがトラックバックできるので、勝手にあなたの Twitter にメッセージ投稿されてしまうからだ。

サンプル・プログラムの解説:準備

0013: $Username = 'xxxxxxxxxx';         //あなたのTwitterユーザー名
0014: $Password = 'xxxxxxxxxx';         //あなたのTwitterパスワード

Twitter に投稿するには、ユーザー名とパスワードで BASIC認証* を受ける必要がある。まず、ユーザー名を $Username に、パスワードを $Password にセットする。
space

サンプル・プログラムの解説:トラックバックを受ける

0024: /**
0025:  * POST変数を取り出す(バリデーション付)
0026:  *
0027:  * @param string $name POST変数名
0028:  * @return string 取り出したPOST変数
0029: */
0030: function validParam($name) { 
0031:     global $InternalEncoding;
0032: 
0033:     $str = isset($_POST[$name]) ? $_POST[$name] : '';
0034:     $str = mb_convert_encoding($str$InternalEncoding, 'auto');
0035:     $str = htmlspecialchars($str);
0036: 
0037:     return substr($str, 0, 200);         //200文字以内
0038: }

0147: //トラックバックの取り出し
0148: $title     = validParam('title');        //タイトル
0149: $url       = validParam('url');            //URL
0150: $blog_name = validParam('blog_name');    //ブログ名
0151: $except    = validParam('except');        //本文

トラックバックPOST 変数 で渡される。ここでは、title, url, blog_name, except の 4 つの変数を受けている。
space
受け取った変数の文字コードを内部コードに統一し、長さに制限を付け、クロスサイトスクリプティング対策を行うためのユーザー関数 validParam を用意した。
space

サンプル・プログラムの解説:投稿

0153: //Twitter投稿
0154: $msg = "{$title} - {$url}";            //投稿フォーマット
0155: if (strlen($msg) > 0)   $res = putTwitter($msg$Username$Password);

Twitter への投稿は、「PHP で Twitter に投稿する」で作成したユーザー関数 putTwitter をそのまま使っている。
space
送られてきたトラックバックのうち、タイトル(title)と URL(url)のみを取り出して、Twitter へ投稿する。投稿書式は自由に変更してもらって構わない。

サンプル・プログラムの解説:トラックバック応答

0161: $ret =<<< EOD
0162: <?xml  version="1.0" encoding="utf-8" ?>
0163: <response>
0164:     <error>{$error}</error>
0165:     <message>{$message}</message>
0166: </response>
0167: 
0168: EOD;
0169: 
0170: echo $ret;

投稿が完了したら、成功か失敗かをトラックバック応答として返す。
space

参考サイト

参考書籍

(この項おわり)
header