概要
私はロードレース大好きなので、ここ数年Twitterで公式タグ「#TDF」を追っているだけで腐女子様のTweetが引っかかってくるという現象に悩まされていました。TDFは終わりましたが、ブエルタの前に、腐女子様をあらかじめブロックするコードをPythonで書いたので共有させていただきます。
Twitter認証
こちらを参考に、Consumer key、Consumer secret、Access token、Access token secretを取得。
コーディング
こちらを参考に、腐女子様的ワードをひねり出してコーディング。
ロジック
- 今回はロードレース観戦を快適にしたいので、まず、「弱虫ペダル」でTwitter検索をかけます。
- 引っかかってきたTweetについて、Tweet主の名前とプロフィールを確認。
- 名前かプロフィールに「腐女子様的ワード」が入っていたらブロックします。
コード
一夜漬けコード。
config.py
CONSUMER_KEY = "XXXX"
CONSUMER_SECRET = "XXXX"
ACCESS_TOKEN = "XXXX"
ACCESS_TOKEN_SECRET = "XXXX"
main.py
# -*- coding: utf-8 -*-
import json, config
from requests_oauthlib import OAuth1Session
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS)
url = "https://api.twitter.com/1.1/search/tweets.json"
url_block = "https://api.twitter.com/1.1/blocks/create.json"
url_prof = "https://api.twitter.com/1.1/users/show.json"
NG_WORDS = 'BL', '腐', '厨', 'CP', 'コス', 'cos', 'グッズ', 'bot', '成人済'
params = {'q':'弱ペダ','count': 10, 'result_type' : 'recent'}
req = twitter.get(url, params = params)
if req.status_code == 200:
search_timeline = json.loads(req.text)
print(req.text)
for tweet in search_timeline['statuses']:
name = tweet['user']['name']
screen_name = tweet['user']['screen_name']
description = tweet['user']['description']
L = name+description
print(L)
if any(ng_word in L for ng_word in NG_WORDS):
print("腐")
print('----------------------------------------------------')
params2 = {'screen_name': screen_name}
twitter.post(url_block, params = params2)
else:
print("not腐")
print('----------------------------------------------------')
else:
print("ERROR: %d" % req.status_code)
今後の改善点
- どこかのサーバーにおいて定期的にブロッカーを動かすコードへの変換
- はじくためのキーワードを入力するUIの作成
- ブラウザで動くサービスとしての提供
最後に
改善でき次第こちらにUpしていきたいと思います。(なのでタイトルに①がついています)
お手伝いしてくださる方大歓迎です。よろしくお願いいたします。