PHP+トラックバックでTwitterに投稿(ツイート)する

(1/1)
PHP でトラックバックを受け、Twitter にメッセージを投稿するプログラムを作る。
ぱふぅ家のホームページでは、実際にこのスクリプトを利用し、更新情報を Twitter - papa_pahoo に投稿している。
Twitter に投稿する部分は、前回の「PHP で Twitter に投稿する」で作成した関数をそのまま使い、今回はトラックバックを受ける部分を追加する形でスクリプトを作成していく。
2010 年(平成 22 年)8 月から BASIC認証が利用できなくなったため、OAuth認証が利用できるようにサンプル・プログラムをバージョンアップした。
2013 年(平成 25 年)6 月から Twitter API 1.0 が利用できなくなったため、API 1.1 が利用できるようにサンプル・プログラムをバージョンアップした。
2014 年(平成 26 年)1 月から Twitter API 呼び出しが https のみとなったため、サンプル・プログラムをバージョンアップした。

サンプル・プログラム

このプログラムを "http://localhost/hogehoge/tb2twitter.php" に設置したとして、この URL に対して普通のトラックバックを送ることによって、トラックバックのタイトルと URL を取り出して自動的に Twitter に投稿してくれる。
オリジナル・アイコンを同梱してあるので、Twitter にプログラム登録する際などに利用していただきたい。

【注意】
このスクリプトは、ローカルの PHP環境に置くべきである。
なぜなら、インターネットに公開されている PHP環境に設置すると、誰もがトラックバックできるので、勝手にあなたの Twitter にメッセージ投稿されてしまうからだ。

解説:準備

Twitter API を利用する関数群はクラス pahooTwitterAPI として別ファイル "pahooTwitterAPI.php" に定義してある。このファイルを  require_once  できるパスに配置すること。

OAuth認証を利用するため、プログラムを Twitter に登録する必要がある。その手順については「PHP で Twitter に投稿(ツイート)する」を参照のこと。取得したパラメータは、クラス pahooTwitterAPI 冒頭にあるクラス定数に記載すること。

https通信を使うため、PHP から OpenSSL を利用できるようにしておく必要がある。その手順は「PHP の https 対応」を参照のこと。
プログラムがうまく動かなかったら、「Twitter への再登録が必要な場合も」を参照のこと。

解説:トラックバックを受ける

0048: /**
0049:  * POST変数を取り出す(バリデーション付)
0050:  *
0051:  * @param string $name POST変数名
0052:  * @return string 取り出したPOST変数
0053: */
0054: function validParam($name) { 
0055:     global $InternalEncoding;
0056: 
0057:     $str = isset($_POST[$name]) ? $_POST[$name] : '';
0058:     $str = mb_convert_encoding($str, INTERNAL_ENCODING, 'auto');
0059:     $str = htmlspecialchars($str);
0060: 
0061:     return mb_substr($str, 0, 200);          //200文字以内
0062: }

0064: // メイン・プログラム =======================================================
0065: //トラックバックの取り出し
0066: $title     = validParam('title');        //タイトル
0067: $url       = validParam('url');        //URL
0068: $blog_name = validParam('blog_name');    //ブログ名
0069: $excerpt   = validParam('excerpt');    //本文

トラックバックPOST 変数 で渡される。ここでは、title, url, blog_name, except の 4 つの変数を受けている。

ユーザー関数 validParam により受け取った変数の文字コードを内部コードに統一し、長さに制限を付け、クロスサイトスクリプティング対策を行う。

解説:投稿(ツイート)

0070: $res       = TRUE;
0071: $ptw = new pahooTwitterAPI();
0072: 
0073: //Twitter投稿
0074: if ($url != FALSE) {
0075:     $msg = $title . ' ' . $excerpt;
0076:     $msg = $ptw->twitter_strcut($msg, 110);   //110文字以上なら末尾カット
0077:     $msg .= ' ' . $url;
0078:     $res = tweet($msg);
0079: }

Twitter への投稿は、「PHP で Twitter に投稿する」で作成したユーザー関数 putTwitter をそのまま使っている。

送られてきたトラックバックのうち、タイトル(title)と URL(url)のみを取り出して、Twitter へ投稿する。投稿書式は自由に変更してもらって構わない。

0088: /**
0089:  * Twitter用文字列カット
0090:  * @param string $str テキスト
0091:  * @param int    $len カットする長さ
0092:  * @return int 長さ
0093: */
0094: function twitter_strcut($str$len) {
0095:     if (mb_strlen($str) <= $len)    return $str;
0096: 
0097:     $str = mb_substr($str, 0, $len - 3) . '...';
0098: 
0099:     return $str;
0100: }

ツイートできる文字列長を 110 文字以内に制限している。これを超えたら、文末をカットし、'...'を付記する。
Twitter は 140 文字以内という制限があるが、その長さにかかわらず 1 つの URL につき 22~23 文字を消耗するという仕様になっている。そこで、余裕を見て 110 文字でカットするようにした。
文字列長をカウントして、指定の長さより長い場合にはカットして '...' を付記する関数を

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

0081: //応答メッセージ
0082: $error   = ($res == FALSE) ? 1 : 0;
0083: $message = ($res == FALSE) ? 'Cannot send Twitter' : 'Send Twitter successfully';
0084: 
0085: $ret =<<< EOD
0086: <?xml  version="1.0" encoding="utf-8" ?>
0087: <response>
0088:     <error>{$error}</error>
0089:     <message>{$message}</message>
0090: </response>
0091: 
0092: EOD;
0093: 
0094: echo $ret;

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

参考サイト

(この項おわり)
header