PHP 80行で作るTwitterへRSSを投稿するbot
石巻かほくさんの見出しをtwitterへ投稿する仕組みを作ってみました。→ @isnmk_kahoku
個人的にRSSは、なかなか読みません。
そこで、twitterに投稿するbotにしてしまえば、タイムライン上でだらだらと、目にすることができるので情報収集がしやすくなります。
今回投稿したRSSは自分で作っている蛇田.jpの石巻かほくRSSです。
いくつかRSSを投稿するbotを作成したのですが、手法が固まってきたのでメモ!
確認点
利点
- DBを使用しない
- 数行修正するだけでRSSを投稿できる
といった点です。
ただ、PHPの最強関数の
file_get_contentsが使用可能か確認してください。
php.iniにおいて
allow_url_fopen on
に設定されていないと外部URLに対しては使用できない関数です。
ソースコード
<?php //echo "\n twitter投稿モジュール \n"; // twitterのアカウント・・・(1) $username = 'isnmk_kahoku'; // twitterのパスワード・・・(2) $password = '********'; // APIから取得するツイートの件数 $api_count = 20; // twitterのツイート更新API $url = "http://twitter.com/statuses/update.xml?"; $sTime = time(); // 投稿するRSSの取得・・・(3) $sRSS = file_get_contents('http://hebita.jp/rss/ikahoku.xml'); // オブジェクト化 $oXML = simplexml_load_string($sRSS); // RSSのitem以下のノードを使用する $oItems = $oXML->channel->item; // 投稿するアカウントの直近$api_count件数のツイートを取得 $sTw = file_get_contents("http://twitter.com/statuses/user_timeline.rss?screen_name=$username&count=$api_count"); $oTw = simplexml_load_string($sTw); $oTwItems = $oTw->channel->item; foreach($oItems as $oItem){ // 投稿するRSSのitem(投稿する文字列)を取り出す・・・(4) $sTitle = $oItem->title; // 投稿済み1 未投稿0 if(!PostCheck($oTwItems,$sTitle)){ // ソースはEUC-JPで記述されているためUTF-8へ変換する $sDate = E2U(date(" - n月j日G時i分",$sTime)); // RSSオブジェクトからリンクを取得・・・(5) $sLink = $oItem->link; // 投稿形式に文字列を成型 $sMassage = $sTitle . $sDate ." ". $sLink; $params = "status=". rawurlencode($sMassage); echo $sMassage . " OK\n"; // 投稿 $result = file_get_contents($url.$params , false, stream_context_create(array( "http" => array( "method" => "POST", "header" => "Authorization: Basic ". base64_encode($username. ":". $password) ) ))); } } // RSSオブジェクト,見出し function PostCheck($oItems,$oHead){ $sHead = (string) $oHead; foreach($oItems as $oItem){ $sTitle = (string) $oItem->title; // 投稿済みの確認 if(mb_strpos($sTitle,$sHead,0,'UTF-8') > 0){ // 投稿済み return 1; } } // 未投稿 return 0; } // EUC-JPからUTF-8へ変換 function E2U($sStr){ return mb_convert_encoding($sStr,'UTF-8','EUC-JP'); } ?>