PHPでTwitterのBotを作ってみた(5)

こんにちは。
モモンガです。

今度こそお気に入りの取得やるぞ!
もはやBotあまり関係ないけど、やろう。

一部間違いがあったので修正しました。
追記:現在のTwitter APIの最新バージョンはv1.1です。
記事記載当時と多少異なっている部分がありますのでご注意ください。
気が向いたら最新版のやつ書きます!

お気に入りの取得は検索API同様、OAuth認証必要なし!
ということで、以下のURLにリクエストを投げればOK

http://api.twitter.com/1/favorites.(xml|json|rss|atom)

今回も例によってjsonで取得したいと思います。
このURLにパラメータをつけないでリクエストを送った場合はOAuthで認証されているユーザーのお気に入り情報が20件表示されるのだけれど、[id]パラメータにスクリーンネームかユーザーIDを指定すれば、そのユーザーの最新のお気に入りを20件認証無しで取得できるのだ!

さらに[count]パラメータをつければ取得件数を変更できるぞ。
@yu29ozakiのお気に入りを100件取得する場合

http://api.twitter.com/1/favorites.json?id=yu29ozaki&count=100

ブラウザのアドレスバーに突っ込んでもちゃんと値が帰ってくることが確認できるハズ

ちなみに帰ってくるjsonの中身は以下の通り

//お気に入りを取得するユーザー
$get_fav_user = "yu29ozaki";
//お気に入り取得数
$count = 100;

$url = "http://api.twitter.com/1/favorites.json?id=" .$get_fav_user ."&count=" .$count;
//※get_json()については記事の最後に書いています。
$favdata = get_json($url);

foreach($favdata as $key => $val){
	echo $key ."=>" .$val ."<br />\n";
	if(is_array($val)){
		foreach($val as $xkey => $xval){
			echo "   " .$xkey ."=>" .$xval ."<br />\n";
		}
	}
}

//以下、実行結果

0=>Array
   id_str=>17***5825***146***
   favorited=>
   in_reply_to_status_id_str=>
   coordinates=>
   user=>Array
   retweet_count=>21
   created_at=>Tue Mar 06 17:38:45 +0000 2012
   in_reply_to_user_id_str=>
   retweeted=>
   in_reply_to_status_id=>
   contributors=>
   place=>
   geo=>
   source=>EasyBotter
   in_reply_to_user_id=>
   truncated=>
   id=>1.7708582513******
   in_reply_to_screen_name=>
   text=>"お気に入りのつぶやき内容"

1=>Array
   id_str=>17708582******6688
   favorited=>
//...以下、取得件数分つづく

userの部分がarrayなので、もう一回まわすとつぶやいたユーザーの情報詳細も取得できます。

さて、ゆうのお気に入り(@yu_okini_Bot)というBotを作ったんだけど、このBotは何をしているかというと、上記APIを用いて@yu29ozakiのお気に入りを100件取得して配列に突っ込み、ランダムで投稿する。
それだけのBotなのだ…。

…面白くも何ともない?
そんなことを言わないでくれ。

サンプルコードを書いておく。

//twitteroauth.phpを読み込む。パスはあなたが置いた適切な場所に変更してください
require_once("./twitteroauth.php");

//アプリの情報
//Consumer keyの値
$consumer_key = "******************";
// Consumer secretの値
$consumer_secret = "******************";

//Botの情報
// Access Tokenの値
$access_token = "******************";
// Access Token Secretの値
$access_token_secret = "******************";

// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);

//お気に入りを取得するユーザー
$get_fav_user = "yu29ozaki";
//お気に入り取得数
$count = 100;

$url = "http://api.twitter.com/1/favorites.json?id=" .$get_fav_user ."&count=" .$count;
//※get_json()については記事の最後に書いています。
$favdata = get_json($url);

//乱数発生
$intmn = mt_rand(0,99);

// TwitterへPOSTする。パラメーターは配列に格納する
$req = $to->OAuthRequest(
	"http://api.twitter.com/1/statuses/update.xml",
	"POST",
	array("status"=>$favdata[$intmn]['text'])
);

以上。
実際は、実行された際にPOSTするかをランダムで判定して、投稿時間がまばらになるようにした。
(これは後から実装した機能なのだが…)

こんな感じでお気に入りも簡単取得できてしまう。

参考にしたサイト:php & javascript room

get_json()について
コードはこんな感じだ。

//jsonの取得(返り値は連想配列形式)
function get_json($url){
    $json_data = wbsRequest2('GET',$url);
    if ($json_data){
        //連想配列でデータを返す
        $data = json_decode($json_data, true);
        return $data;
    }else{
        return false;
    }
}
 
function wbsRequest2($method, $url, $params = array()){
    $data = http_build_query($params);
    if($method == 'GET') {
        $url = ($data != '')?$url.'?'.$data:$url;
    }
    $ch = curl_init($url);
    if($method == 'POST'){
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
    }
    //curl_setopt($ch, CURLOPT_HEADER,true); //header情報も一緒に欲しい場合
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_TIMEOUT, 2);
    $res = curl_exec($ch);
    //ステータスをチェック
    $respons = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if(preg_match("/^(404|403|500)$/",$respons)){
        return false;
    }
    mb_language("Japanese");
    //エンコードをUTF-8へ
    $res = mb_convert_encoding($res, "utf-8", "auto");
    return $res;
}
    • アリス
    • 2014 05/04 9:11pm

    参考になりました

  1. トラックバック 0

return top