武雄市の樋渡市長による迷惑ツイート - Togetter
自称“日本ツイッター学会長”がどれだけ注意されても迷惑ツイートを繰り返している件 - Togetter
該当するツイートの一覧を作成しました。遡れる限界3200件で取得できた2012-05-02 20:14:45までが対象。
偶然IDが終わった段階で切れた場合もあるだろうから、twitlongerで元の文の調査まではしています。IDが存在するかは確認していません。
ソートした結果が以下のとおり。 @Akira @Dongr @HimiOkaj @Hir @Hiro @Hirom @Hiromi @Hiromits @HiromitsuTaka @HiromitsuTakag @M @MO6jiji @NET @Qu @Whiteh @b @baked_pu @burogut @danbooyots @goldenhig @h ×4回 @hi ×2回 @hide08 @hiw ×3回 @hiwa ×2回 @hiwa1 @hiwa11 ×2回 @hiwa111 ×5回 @lion_s @mitsuru_kur @n @ry @shi @t_m @ti @tss_onta @tss_ontap_ @undermu @ysitt
次に検知。 ツイッターの検索APIでtl.gdを含むツイートを検索。その後正規表現で(cont)の直前に返信が来ているツイートを抽出。 この段階では返信が 1、名前は切れちゃったけど存在しないユーザー名になったから関係ない 2、丁度名前が終わる所で切れたから誤爆してない。 3、名前が切れて別のユーザーに誤爆している の三通り考えられます。1についてapiから返ってくるtweetObjectのentitiesでユーザー名が有効か無効か調べることが出来るのでそれを調査します。 2か3については一つ一つtwitlongerにアクセスする必要がありますので分けておきました。
<?php $to=//new TwitterOAuth()を各自入れて下さい $req=$to->get("https://api.twitter.com/1.1/search/tweets.json",["q"=>"tl.gd cont","result_type"=>"recent","count"=>"100","lang"=>"ja"]); foreach($req->statuses as $one){ if(!isset($one->retweeted_status) && preg_match('{@([a-z0-9_]+)(cont)}i',$one->text,$match)){ $repUser=strtolower($match[1]);//このidの人に返信してしまった $gobaku=false; foreach($one->entities->user_mentions as $data){ if(strtolower($repUser)==strtolower($data->screen_name)){ $gobaku=true;//Entityにデータがある=有効な誰かに返信している break; } } if($gobaku){ print($one->text."n"); } } } /* $repId="fushihara";存在するか調べたいid $longHtmlRaw=file_get_contents("http://www.twitlonger.com/show/{$twitlongerId}"); preg_match('{<p>(.+?)<span id="postactions">}s',$longHtml,$match); $longHtml=trim($match[1]); if(false===stristr($longHtml,"