「PHP + OAuth」で特定ユーザーのツイートを公式RTするbotを作成してみた。その2
とりあえず、PHPのコードを…。
今回のコードは、だいたいこんな感じです。
<?php
//最新ツイートを1件取得
$url = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=wired_jp&count=1";
$tweet = json_decode(file_get_contents($url,true));
$retweet = $tweet[0]->text;
$id = $tweet[0]->id_str;
// twitteroauth.phpを読み込む。
require_once("twitteroauth.php");
// Consumer keyの値
$consumer_key = "C7gMUYn*****LP7z9VQ";
// Consumer secretの値
$consumer_secret = "D21F7RWHouq*****";
// Access Tokenの値
$access_token = "134789305-***********vJUbZN";
// Access Token Secretの値
$access_token_secret = "rH3DM**********kdlmfA9k";
// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
// TwitterへRTする。
$req = $to->OAuthRequest("http://api.twitter.com/1/statuses/retweet/{$id}.xml","POST",array("status"=>$retweet));
?>
取得した最新データが既にRTされている場合には、TwitterのAPIはエラーを返すだけなので、今回のコードはやたら短いです。
こんなもんで公式RTのbotが作れちゃうんですね。
ま、実際に僕が書いたコードなわけですが…。
$urlにユーザーのタイムラインから最新の1件を取得してきて、そのデータを$tweetに入れてるのは、以前にやったやつとほとんど同じなので説明の必要はありませんね。
今回は中身(text)だけでなくツイートの固有ID(id_str)が必要になるので、それを変数に入れておきます。
あとは、前回ダウンロードしてきた「twitteroauth.php」を読み込んでOAuthオブジェクトを生成します。
この時にアプリ登録の際に取得した
・Consumer key
・Consumer secret
・Access token
・Access token secret
が必要になります。
後は、TwitterにRTするだけです。
Twitter-APIの使い方は、公式ドキュメントを参考にしてください。
これで、特定のユーザーのツイートを取得してきて公式リツイートするプログラムの出来上がりです。
よく考えたら
$req = $to->OAuthRequest("http://api.twitter.com/1/statuses/retweet/{$id}.json");でいいのかな…?
まあ、テストしてみます。
現状では、上記のコードでいけました。
ただ、このままではbotになりませんね。
一定期間毎に自動でプログラムを動かして、RTさせなきゃいけません。
これは、サーバーのcronを使わないとどうにもなりません。
というわけで、このプログラムにcron設定をして、終了です。
さくらサーバーのcron設定
レンタルサーバー各社によってcronの設定方法は違うと思いますが、僕の使ってるさくらサーバーはこんな感じです。

実行コマンドはこんな感じです。
今回のプログラム「retweet_bot.php」は、ルートディレクトリ(www)の下の「retweet」ディレクトリに置いてあります。
つまりフルパスだと
/home/webmage/www/retweet/retweet_bot.php
という感じです。
それを実行コマンドとして書く場合は、こんな感じです。
cd /home/webmage/www/retweet/ ; /usr/local/bin/php retweet_bot.php > /dev/null
さくらサーバーのcron実行は、2分おきが限界のようです。
なので、「分」のところに「*/2」としてあります。
これで、全て糸冬 了..._φ(゚∀゚ )アヒャ
Twitterのbotって、割と簡単に作れるんですよね。
公式RT云々…より簡単です。