フィードリーダー作りに飽きた(?)ので、玉の気晴らしにちょちょっとコードを書いてみました。
codebird.phpを使用して検索キーワードからRSSフィードを取得するというものです。
今回はトークンを固定的に先にhttps://dev.twitter.com/で取得しておきました。
ここにサンプルプログラムを設置しました。http://garagekoh.xii.jp/twitter/
初期表示画面はこんな感じです。
キーワードを入力して「送信」ボタンをクリックするとそれに関連したTweetが20件、RSSとして返ってきます。
<?php error_reporting(0); // エラーを非表示(デバッグ時はこれを"E_ALL"とか"E_STRICT"にするとやりやすいです) ini_set("display_errors", 0); // エラーを出力するか(非表示:"0"、表示:"1") require_once ('codebird.php'); Codebird::setConsumerKey('カスタマーキー', 'カスタマーシークレットキー'); $cb = Codebird::getInstance(); $cb->setToken('OAuthトークン', 'OAuthトークンシークレット'); $q = htmlspecialchars($_GET['search'], ENT_QUOTES); if ($q == "") { // $qが空文字列かどうか ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form method="GET" action="./index.php"> <p>検索したいキーワードを入力してください</p> <input type="text" name="search" size="50" value="" /> <input type="submit" value="送信" /><input type="reset" value="リセット" /> </form> </body> </html> <?php die(); // ここでプログラムを終了する } $param = array( 'count' => '20', 'q' => urlencode($q), 'lang' => 'ja', 'include_entities' => 'true' ); $reply = (object)$cb->search_tweets($param); if ($reply->httpstatus == '200') { } else { header("Location: ./"); } header("Content-type: text/xml"); ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <channel> <title><?php echo "「" . $q . "」の検索結果"; ?></title> <link><?php echo "http://localhost" . $_SERVER['REQUEST_URI']; ?></link> <description><?php echo "「" . $q . "」の検索結果"; ?></description> <dc:language>ja</dc:language> <dc:creator>garagekoh</dc:creator> <dc:date><?php echo date("Y-m-d H:i:s"); ?></dc:date> <?php foreach ($reply->statuses as $tweets) { $id_str = $tweets->id_str; $reply2 = $cb->statuses_oembed(array('id' => $id_str)); echo "<item>\n"; echo "<title>" . $tweets->user->name . "のツイート</title>\n"; if ($reply2->httpstatus == '200') { echo "<link>" . $reply2->url . "</link>\n"; } else { echo "<link></link>\n"; } echo "<description>" . $tweets->text . "</description>\n"; echo "<dc:subject></dc:subject>\n"; echo "<dc:creator>" . $tweets->user->screen_name . "</dc:creator>\n"; echo "<dc:date>" . $tweets->created_at . "</dc:date>\n"; echo "</item>\n"; } ?> </channel> </rss>
foreach文まわりはめちゃめちゃ手を抜きました。ベターっと書き切ったと言いますか。
本当にざっくりした処理をしているので、ここから色々できるかな、と思います。
- 投稿タグ
- codebird.php, feed, RSS, Twitter
最近のコメント