【Python】tweepyでRTを除外する2つの方法
RTを除外したい
ツイッターAPIを利用してツイート検索をする時、リツイート(RT)を含まないオリジナルなツイートだけを取得したい場面もあると思います。
そこで今回はいくつかのパターンに分けて、RTを除外する方法をご紹介したいと思います。
検索の段階でフィルターする
まず一番シンプルな方法は検索の段階でフィルターしてしまうことです。
これは検索クエリに「 -filter:retweets」を追加するだけで実現できます。
import tweepy import datetime import pandas as pd CONSUMER_KEY = 'XXXXXXXXXXXXXXXXXXXXX' CONSUMER_SECRET = 'XXXXXXXXXXXXXXXXXXXXX' auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) ACCESS_TOKEN = "XXXXXXXXXXXXXXXXXXXXX" ACCESS_SECRET = "XXXXXXXXXXXXXXXXXXXXX" ACCESS_TOKEN_SECRET = "XXXXXXXXXXXXXXXXXXXXX" auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET) api = tweepy.API(auth) q_word="#ノベルアッププラス -filter:retweets" for status in api.search(q=q_word, result_type='recent',count=10): display(status.text)
参考ページ
取得済みツイートからRTのものを除外する
上記の方法でRTを簡単に除外することは実現できますが、一方でRTの数や誰がRTしているのかということも知りたいときには一旦、MySQLなどにツイートを集積した上でDBからの読み出し時にフィルターすると良いです。
SELECT * FROM table_name WHERE tw_text not like '%RT @%' ORDER BY tw_date DESC
上記のコードの場合、「table_name」 テーブルから、tw_text 列で「RT @」を含まない行を、tw_date列の新しい順に取得することができます。
if文で除外する方法もある
for status in api.search(q=q_word, result_type='recent', count=100): if not "RT @" in status.text[0:4]: display(status.text)
上記のコードの場合、一旦取得したツイートのうち「RT @」で始まるツイートを除外することができます。