メモ帳DPA

ぐぐってあまり引っかからないような何かがあったら書いたりする

パクリツイートしてる連中を一括ブロックするツール「パクころ」作った

概要

パクリで250favs以上稼いだユーザをブロックする
パクリ側をお気に入り登録していたらオリジナル側に付け替える

ここからどうぞ↓
パクころ
※8/30 ドメインを xvs.jp から de0.biz に変えました。(理由は後述)

意図

  • kill1000favs の対象外部分をカバーしようと思った
  • パクツイの森 は片っ端から拾ってしまいブロック対象として使うには精度が粗かった
  • ぱくったー は更新止まり気味だった
  • 上記の既存のパクリ検出は検出だけだったので自身のTLから見えなくしたかった
  • 星つけたのが後からパクリと判明したらイラッと来るのでどうにかしたかった

Kill 1000favs
おいでよ パクツイの森 #パク森
ぱくったー / Pakutter - うさだBlog / ls@usada's Workshop

検出のポリシー

  • @favstar250_ja、@favstar500_ja、@favstar1000_ja のいずれかによりRTされていること
  • 本文の長さが20文字以下でないこと
  • 本文が一致する他ユーザのツイートが存在すること
  • 上記を満たすツイート群のなかで投稿日時が最古ではないこと
  • useridがホワイトリストに載っていないこと(※3/22追加)
  • 投稿元クライアント名が「Tweet Button」「Tumblr」「Hatena」 でないこと(※3/23追加)
  • 判定の際に本文は ハッシュタグ、改行、スペース と 「」「」【】()()『』。、.,!!??・…'"’” を除去したものを用いる(※追加)

何もしなくても放っておけば蓄積が増えて勝手にどんどん精度が上がり続けていくのがポイントです。
とりあえず一週間放置してみてみましたが、一日5件前後くらいのペースで対象が増えています。
250favs以上なのでマックスコーヒーくらいクソ甘い基準のはずなんですがそれでもどんどん湧いてくるのでひどい状況だなあと思います。


なお、一旦パクりパクられの判定が行われても、判定は毎回過去にさかのぼってアップデートされます。
例えば、古い順に「ツイートA(オリジナル) → ツイートB(Aのパクリ) → ツイートC(AまたはBのパクリ) 」とした場合、ある時点でAが250favs到達していない場合はBがオリジナルと判定されますが、後からAも250favsに到達した場合は、AがオリジナルでBCがパクリと改めて判定されます。


現状自分のブロック基準に照らしてブロックして全く問題ないアカウントのみが検出されているように見えますが、もし何かいい感じの条件案あれば教えてください。
今後何らかの原因で誤検出がたくさん出てきたり他に良い条件付けが見つかった場合には、条件付けを変えるかもしれません。

ただし、明確な基準を設けて機械的に一定のラインを引きたいと思ってます。ブラックリスト/ホワイトリストのような人為的な選択や、 謎の複雑な重み付けのような処理は基本的には無しにしたいところです。



※3/22追記
ホワイトリストはなるべく無しにしたいと言ったが速攻で撤回しますさーせん。


乙ゲーのメーカーはキャラクター単位で複数の公式のtwitterアカウントを用意するケースが結構あるようです。全く知りませんでしたすいません。
以下の様な文面が各アカウントから投稿されブロック対象となっていました。

金久保誉 on Twitter: "ぬ・ぬぬぬーん、ぬ・ぬぬぬーん、ぬ・ぬ・ぬーんぬぬーん♪"
東月錫也 on Twitter: "ぬ・ぬぬぬーん、ぬ・ぬぬぬーん、ぬ・ぬ・ぬーんぬぬーん♪"
陽日直獅 on Twitter: "ぬ・ぬぬぬーん、ぬ・ぬぬぬーん、ぬ・ぬ・ぬーんぬぬーん♪"

こういった複垢使うケースはアカウントの文脈をわからないとパクリと全く区別がつきません。

この場合の機械的な判断は困難というか不可能なので、やっぱりホワイトリスト機能を付けました。運用でカバー。
誤検知がある場合はご連絡いただれけば、ここに適宜追加することとします。


しょっちゅう出てくるようでしたらまた考えますが、複数の公式アカウントが存在し、同一の文面を投稿し、全アカウントが250favsに到達する、ようなケースは多分滅多にないかと思ってます。



データの収集

基礎となるデータの部分は favstar に全面的に寄生しています。当然、登録していない人やbanされている人は対象になりませんし、収集対象のbotが停止した場合にも収集を継続できません。


オリジナルがあってもfavstarのbotに拾われるまで検出できないのはこの方式上避けられないので仕様です。favstarに頼らずにいい感じに処理出来る何か他の良い方法思いついたら教えてください。


twitterの制限で3200件までしか過去ログを取得できないので、favstarbotの全件を取得できていません。誰か下さい。なんでもしますから。


なお、一度収集されたら元ツイートを消しても本ツールのDBにはそのまま残ります。従って、パクリを消してもブロックの対象からは外れません。また、オリジナル側が消えた場合でもパクリはパクリ扱いのままとなります。
もし対象から外してほしい場合はパクリを消した上で私に連絡いただければ個別に対処するかもしれません。


他のお気に入り収集サービス

収集対象として、aclog や favlook あたりの併用も考えましたが、とりあえず現状では favstar だけで何とかなっているので、寄生のためにtwitter外のサイトに負荷かけるのもなんだか申し訳ないので保留としています。(そもそも本当は自分でデータ収集まですべきなのかもしれませんが)

※追記:favstarだけだと割りと取りこぼしも多いので補足としてaclogとさまざまなめりっとからも取得するようにしました。


Twitter 分析サービス - aclog
ふぁぼるっく 注目 fav


本題のツール自体の話から逸れますが、aclogは 非常に充実したapi が揃っていてあって驚きました。
今回は250favs以上の抽出の用途としては直接は使えなかったので覗いただけで終わりましたが、物凄く有用だと思います。
apiを使用している例どころかaclogに言及しているサイト自体ほとんど見つかりませんでしたが、いろいろとfavstarを凌いでいるのでもっと評価されるべきだと思います。

表示について

自分のブロック済みユーザの状態は見ていません。なので、ブロック済みのユーザでもリストに出てきます。その場合、外してもブロック解除などはしません。単純に本当に何もせずそのままです。
ブロック済みのユーザについてはもう一回ブロックしてもしなくても一緒です。

※3/24追記 :ブロック済みはデフォルトでは表示しないようにしました。タブから切り替え可能。


お気に入りの付け替えについて

お気に入りの付け替えは自分のお気に入り一覧最新200件に入っている場合が対象になります。


公式のwebからでも起こるのでツール自体とは別の話ですが、これを書いている2014/3時点で、twitterのお気に入りリストの挙動がたまにおかしいです。
登録したものがリストに載らなかったり、登録順でない変な位置に挿入されたりします。
リストに載らない場合正直どうしようもないのでまたあとで試すか諦めて下さい。

※追記
対象を最新1200件に増やしました。

リストは登録順ではなくtweetid降順だったようです。また、ブロックするとリストに載らなくなるようです。
(ブロックする前に付け替えているので付け替えは働きます)

使ったものなど

えーぴーあいとかぴーえっちぴーとかウェブアプリ周り一式全くわからんところから始めましたが、製作期間は一日数時間かける4日で出来ました。Google先生と先人たちはすごい。
言い訳にする訳じゃないですが素人の習作みたいなところは正直あると思うので、もしかすると変な挙動とかがあるかもしれません。その際はぜひマサカリ投げて教えて下さい。よろしくお願いします。


FAQ(適宜追記)

使わない機能まで許可を要求されてるように見える

twitterの許可設定がread、read+write、read+write+DMの三種類しかないのでこれで最小限である。
もうちょい機能単位で細かく設定できると良いんだけどtwitter側的にはあんまり変える気はないっぽい


はちま禁止ぶろったーの二の舞では

この失敗例は認識しており、これらを踏まえて意識的に以下の動作にしている。

  • 判定アルゴリズムを明確にする
  • なぜ対象と判定されたかを参照可能にする
  • 処理を手動選択にする

ホワイトリストは唯一人の手が入ってしまう点であるが、リスト入り"しない"ことの制御にしか介入できないので、ブラックリストを手動管理するのとは全く性質が異なる。

自動でブロックして欲しい

上記の理由によりブロック処理を自動化するつもりはない。

リスト表示が重い

レンタルサーバなのでスペックがしょぼいってのもあるんだけど、それ以上に以下の理由での影響が大きいのであんまり改善は期待できない。
非同期処理とかにしたら多少ましに見せられたかもしれないなと思ってはいるが今更作りなおす気があんまりしない。

  • ブロック状況(blocks/ids)を取得しているため
  • フォロー状況+ユーザ情報(users/lookup)を取得しているため
  • 特に初回は単純に対象ユーザが数千人出るためブラウザ側としても重い
実行が重い

これも同様にあんまり改善が期待できない。
そんな頻繁に使うもんでもないし大目に見て欲しい。

  • お気に入り一覧(favorites/list)取得してるので時間がかかる
  • ブロック(blocks/create or users/report_spam)がtwitter仕様上一件ずつしか行えない
tweetbutton等の定型文が引っかかってしまうのでは

そもそもサイトの紹介で250favs行くものは大抵何かしらいい感じのコメントを付加している。
保険として一応それっぽいクライアントは除外するようにしたが、tweetbutton,tumblr,hatenaからの定型文そのままでブロック対象として検出されたのは25万ツイート収集した現状で0件である。


パクリくらいしても良くね

これを読んで欲しい
というかそこにRTボタンがあるでしょ。

ソースくれ

あんまり公開するの前提にしてなかったし覚えながら継ぎ足し継ぎ足しして作ったのでぐっちゃぐっちゃだったりファイルにキーが入ってたりする。
githubに上げるの正直現状では躊躇われるので欲しい人は連絡してくれれば個別で送る。
そのうち整理できたら公開したいとは思うが整理できるのかわからない。

スパム報告の上限に合わせて選択できるようにして欲しい

このツールの対象に検出されることは必ずしもスパムであることを意味しないので片っ端からスパム報告するべきでない。
そもそもスパム報告機能はおまけ扱い程度で付けたのであんまりいじる気はない。

微妙に改変したパクリを認識できないのでは

パクリであっても判定条件にマッチしないものは対象とはしないので仕様である。
末尾に@なしのユーザ名を付加したり語尾をキャラに合わせて改変したりするものは検出できない。
ただ意外とそういうものでも複数のパクリbot間で共食いしあってブロック対象として結果的に割と検出できたりする。

RTは移し替えないのか

お気に入りと違ってRTはするタイミング的なものがあると思う。
検出した場合は詳細へのリンクが表示されるので取り消すなりオリジナルをRTし直すなり放っておくなり任意で判断して欲しい


アカウント潰しきれてないのでは

多少ブロックされた程度じゃ滅多に凍結されるもんでもないし、そもそもTwitter公式がどうにかしない限り確実に無限に沸くのでアカウントの存在自体は割とどうでもよいと思う。
これは完全にネーミングが良くなかったですが、自分から見える範囲のノイズを減らすのが主目的であり、どっちかというと住み分けをしたいだけだったりする。
普通は数10favsみたいなパクリが自分のTLに流れてくる確率は低いと思うので、別にブロックしてもしなくても見え方そんなに変わらんだろうし、そういうのが一杯流れてくるようだったらフォローしてる人考えなおしたほうが良いと思う。


しきい値を250favsから下げてほしい

安サーバなのでストリーミング系が使えない。
良い具合の収集方法思いつかないのと、現状既に重いのが余計に重くなる問題がある。
今の収集法のままやるとメインの取得元が250のfavstarbotであり精度が落ちそうなので現状変える気はない。
希望するならソース差し上げるので作っても良いです。


名前が酷い

わかる
そんなに使う人大勢いないと思ってくっそ適当に付けたがもうちょいちゃんと考えればよかったと思う
→「パクころ」に変えた。

検索で引っかからなくなった


こういうことっぽい。どうするか考え中。
ドメイン変えた。