Python
Twitter
TwitterAPI

めんどくさいおじさんをブロックするプログラムを書いた

暇だったので書いてみた。

経緯

Twitterにて。


Togetterもあった。
プロフィールに「面白きことのなき世を面白く」は即ブロックで問題なし。インターネットの歴史20年の学びです。- Togetter

使うもの

今回もVPSのDebianを使いました。適当に構築してください。

Tweepyのインストール

皆さんご存知のTwitterAPIをPythonから使えるようにするためのライブラリ。
Githubにもあるので書く必要ないですが一応。

pipの場合
sudo pip install tweepy
ソースからインストールする場合
git clone https://github.com/tweepy/tweepy.git
cd tweepy
sudo python setup.py install

ツイプロ検索APIについて

公式のTwitterAPIではbioの取得はできますが、bioからの検索ができないっぽい(?)
さすがにすべて取得して検索は面倒なのでツイプロのAPIを使用します。

このAPIに検索ワードを投げると、公式のAPIと同じようにユーザ情報がJSON形式で返ってきます。
bioのみを検索するのかと思いましたが、挙動を見る感じユーザ情報全体を検索してデータが返ってくるようです。(つまりbioに指定の単語が入っていなくても、スクリーンネームに入っていると引っかかる。)

あとこのAPIの取得件数が最大300件で、公式APIのように一度の問い合わせに対する最大取得件数ではなく上限300件の模様。
なので300件を超える場合には対応できなくなるかも。(取得件数は見れるので300件を超えているかどうかは分かる)

TwitterAPIの取得

このサイトがわかりやすい。

プログラム

APIkeyなんかは適宜書き換えてください。

block.py
#coding:utf-8
import tweepy
import json
import urllib2
import urllib

#各種キーの設定
CONSUMER_KEY = "xxxxxxxxxxxxxxxxxxxxx"
CONSUMER_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
ACCESS_TOKEN = "xxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
ACCESS_TOKEN_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

#リクエストURLの設定
params = {
    #検索ワード(必要に応じて変更)
    "q":"面白きことのなき世を面白く",
    #取得数(最大300)
    "num":300,
}
p = urllib.urlencode(params)
url = 'https://twpro.jp/1/search?' + p

#JSONの整形
r = urllib2.urlopen(url)
root = json.loads(r.read())
user = root['users']
count = root['count']

#APIインスタンスの作成
api = tweepy.API(auth)

#取得できた人数分ブロック処理
for i in range(count):
    user_name = user[i]['name']
    screen_name = user[i]['screen_name']

    #ブロック
    api.create_block(screen_name)

    #完了メッセージ
    print u"%s(%s)さんをブロックしました。" % (user_name,screen_name)

他にも・・・

togetterを見ると、他にもあるらしい。
ソースコード内のparamsの検索ワードを変えることで対応できます。

  • "のらりくらり"
  • 一人称が小生
  • 性別:生物学上は◯性
  • "日本をこよなく愛する"
  • "普通の日本人"
  • "普通のおっさん"
  • "貴女"
  • "ただの日本人です"
  • "◯◯なナマモノ"

あとがき

次はナイーブベイズとかでやりたいです。