なろう分析記録

『小説家になろう』をふくめ『ネット小説投稿サイト』を分析する。コード置き場,主にPython,javascript,たまに創作。

【Python】tweepyでRTを除外する2つの方法

RTを除外したい

ツイッターAPIを利用してツイート検索をする時、リツイート(RT)を含まないオリジナルなツイートだけを取得したい場面もあると思います。

そこで今回はいくつかのパターンに分けて、RTを除外する方法をご紹介したいと思います。

f:id:karupoimou:20191009013603p:plain:w400
取得例

検索の段階でフィルターする

まず一番シンプルな方法は検索の段階でフィルターしてしまうことです。

これは検索クエリに「 -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)

f:id:karupoimou:20191009011018p:plain
取得結果

参考ページ

uluhashi.hatenablog.jp

取得済みツイートから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 @」で始まるツイートを除外することができます。