Twitterのbotを作る #7「友達申請とフォロー解除」

2015年5月18日

サービス プログラミング 特集

twitterの各種のリストを取得できるようになったので、そのリストを元に、フォローしたり解除したりしてみたいと思います。 これにより、自動でユーザーを増減させる事ができるようになります。

事前準備

twitterのアカウント情報を毎回ソースに登録するのがめんどくさくなってきたので、設定ファイルを用意したいとおもいます。

key.json

{ "%半角英数で任意登録%":{ "consumer_key":"******", "consumer_secret":"******", "access_token":"******-******", "access_token_secret":"******" } }

特定のユーザーを登録

今現在フォローしていないユーザーをIDからPHPを通してフォローしてみたいと思います。 $res = $connection->post('friendships/create', array('id'=>"ユーザーID")); 上記1行に配列でユーザーIDを登録すればフォローすることができます。 $resには、postしたユーザー情報が返ってきます。

twitter_post_follow.php

<?php date_default_timezone_set('Asia/Tokyo'); //ライブラリ処理 require 'twitteroauth/autoload.php'; use Abraham\TwitterOAuth\TwitterOAuth; //CLIの場合argvをREQUESTに変換する。 if(!isset($_SERVER['SCRIPT_URI']) && isset($argv)){ for($i=0,$c=count($argv);$i<$c;$i++){ if(!$argv[$i]){continue;} //各クエリの分解 $q = explode("=",$argv[$i]); if(count($q)<2){continue;} if($q[0]!=''){ //requestに格納 $key = $q[0]; $val = join("=",array_slice($q,1)); $_REQUEST[$key]=$val; } } } if(!isset($_REQUEST['user']) || !$_REQUEST['user']){die("error:not-query-user");} //keyデータ処理 $key_json = json_decode(file_get_contents("./key.json"),true); $key = $key_json[$_REQUEST['user']]; $connection = new TwitterOAuth($key['consumer_key'],$key['consumer_secret'],$key['access_token'],$key['access_token_secret']); //フォロー処理 $res = $connection->post('friendships/create', array('id'=>$_REQUEST["uid"])); print_r($res);

実行

$ php twitter_post_follow.php ?user=%key.jsonに登録したユーザー名%

注意点

フォローは失敗する事があり、以下の要因が考えられます。
・既に登録済みである ・アカウントがフォローを拒否している ・ブロックされている ・パケットロスやサーバートラブル
上記のような場合は、登録失敗ということでフォロー処理をしても、友達登録は完了できません。 以後のシステムで登録失敗したアカウントはそもそも除外対象にするなどの処理が必要になりますね。 そもそも$resが返ってこない場合もエラーですが、上記理由の場合に以下の方法で失敗判定を行うことができます。

特定のユーザーをフォロー解除

フォローしているユーザーIDを解除してみます。 $res = $connection->post('friendships/destroy', array('id'=>"ユーザーID")); 上記とほとんど同じソースなので、そんなに難しくはないですね。 <?php date_default_timezone_set('Asia/Tokyo'); //ライブラリ処理 require 'twitteroauth/autoload.php'; use Abraham\TwitterOAuth\TwitterOAuth; //CLIの場合argvをREQUESTに変換する。 if(!isset($_SERVER['SCRIPT_URI']) && isset($argv)){ for($i=0,$c=count($argv);$i<$c;$i++){ if(!$argv[$i]){continue;} //各クエリの分解 $q = explode("=",$argv[$i]); if(count($q)<2){continue;} if($q[0]!=''){ //requestに格納 $key = $q[0]; $val = join("=",array_slice($q,1)); $_REQUEST[$key]=$val; } } } if(!isset($_REQUEST['user']) || !$_REQUEST['user']){die("error:not-query-user");} if(!isset($_REQUEST['uid']) || !$_REQUEST['uid']){die("error:not-query-uid");} //keyデータ処理 $key_json = json_decode(file_get_contents("./key.json"),true); $key = $key_json[$_REQUEST['user']]; $connection = new TwitterOAuth($key['consumer_key'],$key['consumer_secret'],$key['access_token'],$key['access_token_secret']); //フォロー処理 $res = $connection->post('friendships/destroy', array('id'=>$_REQUEST["uid"])); print_r($res);

実行

$ php twitter_dest_follow.php ?user=%key.jsonに登録したユーザー名% uid=%削除するユーザーID% $resについて、少し気がついたんですが、返り値は、処理をした結果ではなく、処理をする前の情報が返るようです。 なので、フォローcreateを送信しても、res値にはfollow=>0のままで、userinfoをその後取りに行くとfollow=>1で取得できます。 なので、$resの値は現時点では気にしないほうがいいかもしれません。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。