記事一覧はこちら

twitlongerで返信が途切れる実例と検知方法

武雄市の樋渡市長による迷惑ツイート - Togetter
自称“日本ツイッター学会長”がどれだけ注意されても迷惑ツイートを繰り返している件 - Togetter
該当するツイートの一覧を作成しました。遡れる限界3200件で取得できた2012-05-02 20:14:45までが対象。 偶然IDが終わった段階で切れた場合もあるだろうから、twitlongerで元の文の調査まではしています。IDが存在するかは確認していません。

2012-05-08 22:24:23@b(cont) http://tl.gd/hb4f93http://twitter.com/hiwa1118/status/199852245716713472
2012-05-08 22:56:23@hiwa111(cont) http://tl.gd/hb4ujohttp://twitter.com/hiwa1118/status/199860299103346688
2012-05-08 23:16:36@h(cont) http://tl.gd/hb58glhttp://twitter.com/hiwa1118/status/199865387876229120
2012-05-08 23:31:36@hiwa111(cont) http://tl.gd/hb5fmvhttp://twitter.com/hiwa1118/status/199869161273434114
2012-05-08 23:42:34@Hiromits(cont) http://tl.gd/hb5l4ehttp://twitter.com/hiwa1118/status/199871920970285057
2012-05-08 23:46:37@HiromitsuTakag(cont) http://tl.gd/hb5n3mhttp://twitter.com/hiwa1118/status/199872941897424896
2012-05-09 08:53:35@hiwa111(cont) http://tl.gd/hbabqshttp://twitter.com/hiwa1118/status/200010590251532288
2012-05-11 21:45:13@Hiro(cont) http://tl.gd/hcch00http://twitter.com/hiwa1118/status/200929555224072193
2012-05-20 13:11:06@h(cont) http://tl.gd/hg21tqhttp://twitter.com/hiwa1118/status/204061662507040769
2012-05-23 01:02:18@ti(cont) http://tl.gd/hh4e41http://twitter.com/hiwa1118/status/204965416483819520
2012-06-01 09:19:29@Dongr(cont) http://tl.gd/hl2v4bhttp://twitter.com/hiwa1118/status/208352029486223360
2012-06-16 10:42:38@M(cont) http://tl.gd/hs2a0dhttp://twitter.com/hiwa1118/status/213808774908092416
2012-06-22 14:10:13@hiwa11(cont) http://tl.gd/hv8ed1http://twitter.com/hiwa1118/status/216035338882256896
2012-06-22 18:32:09@hiwa(cont) http://tl.gd/hvb9e0http://twitter.com/hiwa1118/status/216101256475848704
2012-07-25 23:20:04@Hiromi(cont) http://tl.gd/ih60tdhttp://twitter.com/hiwa1118/status/228132515259494402
2012-07-31 15:57:01@HimiOkaj(cont) http://tl.gd/ijrh06http://twitter.com/hiwa1118/status/230195344166768640
2012-08-17 20:55:39@hiw(cont) http://tl.gd/isv890http://twitter.com/hiwa1118/status/236431091555254272
2012-08-25 13:56:17@Hir(cont) http://tl.gd/j0v471http://twitter.com/hiwa1118/status/239224657910308864
2012-08-27 19:55:38@tss_ontap_(cont) http://tl.gd/j22b7ghttp://twitter.com/hiwa1118/status/240039864458964992
2012-08-28 20:28:11@HiromitsuTaka(cont) http://tl.gd/j2hs0ghttp://twitter.com/hiwa1118/status/240410446480437248
2012-08-30 18:23:46@h(cont) http://tl.gd/j3d8n5http://twitter.com/hiwa1118/status/241103909995806721
2012-09-04 16:05:47@Whiteh(cont) http://tl.gd/j5fnn1http://twitter.com/hiwa1118/status/242881126551666688
2012-09-08 23:36:59@undermu(cont) http://tl.gd/j79v82http://twitter.com/hiwa1118/status/244444225360510977
2012-09-14 08:31:02@hide08(cont) http://tl.gd/j9e3nhhttp://twitter.com/hiwa1118/status/246390563857899523
2012-09-15 09:35:58@hi(cont) http://tl.gd/j9qkh4http://twitter.com/hiwa1118/status/246769289791672321
2012-09-15 11:14:38@MO6jiji(cont) http://tl.gd/j9ree9http://twitter.com/hiwa1118/status/246794123724587010
2012-09-18 17:24:36@hiwa111(cont) http://tl.gd/jb44p1http://twitter.com/hiwa1118/status/247974388610236416
2012-09-18 18:35:14@danbooyots(cont) http://tl.gd/jb4lj2http://twitter.com/hiwa1118/status/247992165542809600
2012-09-20 08:37:42@Akira(cont) http://tl.gd/jbon3ohttp://twitter.com/hiwa1118/status/248566567925866496
2012-09-22 22:22:08@t_m(cont) http://tl.gd/jcpeiihttp://twitter.com/hiwa1118/status/249498817857200128
2012-09-26 01:32:27@tss_onta(cont) http://tl.gd/je0vishttp://twitter.com/hiwa1118/status/250633875951337473
2012-10-31 17:56:27@shi(cont) http://tl.gd/jraog7http://twitter.com/hiwa1118/status/263565084478025728
2012-10-31 22:31:52@hiwa111(cont) http://tl.gd/jrdsslhttp://twitter.com/hiwa1118/status/263634394454040576
2012-11-07 19:57:04@hiw(cont) http://tl.gd/jtupojhttp://twitter.com/hiwa1118/status/266132152104652800
2012-11-07 22:51:20@h(cont) http://tl.gd/ju1043http://twitter.com/hiwa1118/status/266176010821718018
2012-11-19 18:24:48@ysitt(cont) http://tl.gd/k2dhobhttp://twitter.com/hiwa1118/status/270457589861601280
2012-11-23 14:57:22@goldenhig(cont) http://tl.gd/k3q346http://twitter.com/hiwa1118/status/271854937858772992
2012-11-25 14:42:16@hiw(cont) http://tl.gd/k4hsoahttp://twitter.com/hiwa1118/status/272575914242617345
2012-11-25 18:22:23@burogut(cont) http://tl.gd/k4jjlbhttp://twitter.com/hiwa1118/status/272631308516216832
2012-11-25 23:07:50@ry(cont) http://tl.gd/k4n23fhttp://twitter.com/hiwa1118/status/272703143719096321
2012-12-03 18:19:24@hi(cont) http://tl.gd/k7fvuuhttp://twitter.com/hiwa1118/status/275529657640710144
2012-12-04 13:36:40@hiwa11(cont) http://tl.gd/k7pbushttp://twitter.com/hiwa1118/status/275820893626826753
2012-12-05 09:18:29@hiwa(cont) http://tl.gd/k831d8http://twitter.com/hiwa1118/status/276118308816822272
2012-12-18 11:50:21@lion_s(cont) http://tl.gd/kctsrnhttp://twitter.com/hiwa1118/status/280867569580265472
2012-12-18 16:55:08@NET(cont) http://tl.gd/kd0e55http://twitter.com/hiwa1118/status/280944271727673344
2012-12-26 23:30:41@mitsuru_kur(cont) http://tl.gd/kg9dathttp://twitter.com/hiwa1118/status/283942917838602241
2012-12-27 22:05:28@Qu(cont) http://tl.gd/kgleoghttp://twitter.com/hiwa1118/status/284283857610633217
2012-12-29 16:53:17@n(cont) http://tl.gd/khcqighttp://twitter.com/hiwa1118/status/284930070810882048
2012-12-30 17:26:32@baked_pu(cont) http://tl.gd/khq4k8http://twitter.com/hiwa1118/status/285300825717346305
2012-12-30 17:39:38@hiwa1(cont) http://tl.gd/khq87shttp://twitter.com/hiwa1118/status/285304124721999872
2012-12-30 18:28:47@Hirom(cont) http://tl.gd/khqm0chttp://twitter.com/hiwa1118/status/285316491384074240

ソートした結果が以下のとおり。 @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,"