neta-ru[.]comを含むツイート主をブロックする
はじめに
Twitterあるじゃん?パクツイあるじゃん?neta-ru[.]comのページが良くぶら下げられてることあるじゃん?目触りじゃん?
ブロックしちゃうか^^
とはいえ、手動でやるなんてそんなクソ面倒なことしてらんないじゃん?ということでコードを書きました。
準備
python3の動くコンピュータがあればOK
自動定期実行するならファイルを置くサーバ(ラズパイでもなんでも常に起動してるコンピュータ)
僕はVPS(amazon lightsail)/centOS7を使います。
関連モジュールを入れる
$ pip3 install requests requests-oauthlib
僕の環境ではpython2系と3系が共存しているので、pip3
ですが、3系しか入ってないのであればpip
でも動くはず。
コード
## main.py ## import json from requests_oauthlib import OAuth1Session import keys from search_word import searchWord from get_userid import getUserids from block_user import blockUsers import datetime # from keys.py CK = keys.CONSUMER_KEY CS = keys.CONSUMER_SECRET AT = keys.ACCESS_TOKEN ATS = keys.ACCESS_TOKEN_SECRET # 認証 twitter = OAuth1Session(CK, CS, AT, ATS) # 検索 result = searchWord(twitter, "url:neta+ru.com exclude:retweets", 100) if result != [] : # userid(@hogehogeみたいなやつ)をtweetデータから取り出す user_ids = getUserids(result) # ↑で取り出したuseridを指定してブロック blockUsers(twitter, user_ids) # log用出力 print("-----------------------------") print(datetime.date.today()) print(user_ids) else : print("-----------------------------") print(datetime.date.today()) print("error")
## search_word.py ## import json def searchWord(twitter, word, cnt) : url = "https://api.twitter.com/1.1/search/tweets.json" params = {'q': word, 'count':cnt, 'result_type':'recent'} req = twitter.get(url, params = params) if req.status_code == 200 : searchResults = json.loads(req.text) return searchResults['statuses'] else : print("ERROR: %d" % req.status_code) return []
## get_userid.py ## def getUserids(result) : id_list = [] for tweet in result : user_id = tweet['user']['screen_name'] if not(user_id in id_list) : id_list.append(user_id) return id_list
## block_users.py ## def blockUsers(twitter, user_ids) : url = "https://api.twitter.com/1.1/blocks/create.json" for user_id in user_ids: params = {'screen_name': user_id} twitter.post(url, params = params)
main.py
ではkeys.py
からtoken情報を持ってきています。
適宜変えてください。
ツイートデータにはURLはt[.]co形式の短縮URLになって組み込まれているため検索が難しいのですが、url:
を指定することで、元のURLで検索できます。exclude:retweets
でRTを除外しています。
定期実行
これは実行時に100件検索してきてブロックするものなので、定期的に実行する必要があります。twitterAPIでは指定したtweetIDから検索することが可能なので、ページング処理して以前のツイートすべてを調べることが可能です。ただ、面倒だったし結局最初以外は定期的に処理していくしかないので、以前のは諦めてこれからのやつを適宜調べていくことにしました。
いまcentOS7を使っているのでcronを使って毎日0時に実行されるようにしました。
cronの設定方法については記事が豊富なので書かないですが、1日ごとの実行であれば、/etc/cron.daily/
の下にスクリプトを登録すればOKです。