復興ログ

未来の被災地にいるアナタと数十年後のキミたちへ。すべての記録を残します。

PHP 60行で作るTwitterへRSSを投稿するbot

PHP 80行で作るTwitterへRSSを投稿するbotの以下の改良版です。

  • OAuth投稿対応
  • bit.lyを使ったURLの短縮化

それと、ちょっと、コードが短くなっただけです。
OAuthの登録についてはオリジナルtwitter投稿ツールの作成OAuthによる投稿までを参考にしてください。
bit.lyのAPIについてはbit.lyのAPIを参考にしてください。

<?php
define('API_KEY_BIT_LY' , '**************************'); // bitlyのAPIキー
define('API_LOGIN_BIT_LY' , '**************************'); // bitlyのログインアカウント名
define('CHECK_RSS_COUNT', 5); // 投稿するRSSのチェックする数
require("twitteroauth.php"); // OAuthライブラリ

// Consumer keyの値
$consumer_key = "**************************";
// Consumer secretの値
$consumer_secret = "**************************";
// Access Tokenの値
$access_token = "**************************";
// Access Token Secretの値
$access_token_secret = "**************************";
// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);

$status = $to->OAuthRequest("http://api.twitter.com/1/statuses/user_timeline.xml","GET",array("count"=>30));
$status = simplexml_load_string($status);

$url = '**************************'; // 投稿するRSS
$rss = file_get_contents($url);
$oXML = simplexml_load_string($rss);
$oItems = $oXML->channel->item;

$i = 0;
foreach ($oItems as $Item) {
	if ($i >= CHECK_RSS_COUNT) {
		break 1;
	}
	if ( !PostCheck($status,$Item->title) ){
		$xml = bitLyShorten($Item->link);
		$sLink = $xml->results->nodeKeyVal->shortUrl;
		$text = $Item->title . " " . $sLink; // ツイート文言
		$res = $to->OAuthRequest("http://api.twitter.com/1/statuses/update.xml","POST",array("status"=>$text));
	}
	$i++;
}

// twitterAPIの返りオブジェクト,RSSオブジェクトのタイトル
function PostCheck($status,$sHead){
	$sHead = (string) $sHead;
	foreach($status as $oItem){
		$sTitle = (string) $oItem->text;
		if(mb_strstr($sTitle,$sHead)){
			return 1; // 投稿済み
		}
	}
	return 0; // 未投稿
}

// ショートURL化
function bitLyShorten($link){
		$link = urlencode($link);
		$url = 'http://api.bit.ly/shorten?version=2.0.1&longUrl=' . $link . '&login=' . API_LOGIN_BIT_LY . '&apiKey='. API_KEY_BIT_LY .'&format=xml';
		$src = file_get_contents($url);
		return simplexml_load_string($src);
}
?>

まとめ

これで、好きなRSStwitterに自動投稿ができます。
自分のツイートを取り出して、今から投稿しようとする記事のタイトルと見比べているだけです。


きっと、Facebookのアプリや管理しているファンページでも同じことができるはずだー。