目的
上記の記事でTwitterAPI(tweepy)を使ったツイート検索を実施したが、2週間分の検索結果が出力されてしまう。
今日だけ、とか1日だけの結果を検索したかったため、期間指定して検索結果を出力する方法を模索した。
アプローチ
検索文字列にsince,untilを入れる
Twitterには検索文字にsinceやuntilなどのパラメータを指定してあげると、期間指定してツイートを検索することができる。
python since:2019-06-15 until:2019-06-16
こんな感じで検索すると、「python」というキーワードで2019年6月15日~6月16日のツイートを検索することができる。
これを利用して、検索文字にsinceとuntilを使って絞り込む方法を検討した。
def getTweetBySearch(s, since, until):
result = []
api = authTwitter() # 認証
## vars
sinceDate = since # この日付以降のツイートを取得する
untilDate = until # この日付以前のツイートを取得する
# 検索用文字列(リツイートは除外する)
sratchStr = s + ' since:' + sinceDate + ' until:' + untilDate + ' exclude:retweets'
print('検索文字列 : ' + sratchStr)
tweets = tweepy.Cursor(api.search, q = s, \
include_entities = True, \
tweet_mode = 'extended', \
lang = 'ja').items()
for tweet in tweets:
print('==========')
print('twid : ',tweet.id)
print('user : ',tweet.user.screen_name)
print('date : ', tweet.created_at)
print(tweet.full_text)
print('favo : ', tweet.favorite_count)
print('retw : ', tweet.retweet_count)
def main():
getTweetBySearch('python', yesterday.strftime('%Y-%m-%d'), nowdate.strftime('%Y-%m-%d'))
色々はしょったがやりたいことはわかるはず・・・
これでうまくいけば、昨日~今日の間の「python」というキーワードの検索結果が出てくるはずである。
が、うまくいかない。
この場合だと6/16以降のツイートで絞られるはずなのだが、15日以前のツイートも取得してしまっている。
tweepyでは検索文字列にsinceとuntilを入れてもうまく検索してくれないことが分かった。
searchパラメータにsinceとuntilを指定する
tweepyのドキュメントを頑張って読み込むと、searchパラメータにsinceとuntilを指定することができるらしい。
上記プログラムを以下に改修。
def getTweetBySearch(s, since, until):
result = []
api = authTwitter() # 認証
## vars
sinceDate = since # この日付以降のツイートを取得する
untilDate = until # この日付以前のツイートを取得する
# 検索用文字列(リツイートは除外する)
sratchStr = s + ' exclude:retweets'
print('検索文字列 : ' + sratchStr)
tweets = tweepy.Cursor(api.search, q = s, \
include_entities = True, \
tweet_mode = 'extended', \
since = sinceDate, \ # <-追加
until = untilDate, \ # <-追加
lang = 'ja').items()
for tweet in tweets:
print('==========')
print('twid : ',tweet.id)
print('user : ',tweet.user.screen_name)
print('date : ', tweet.created_at)
print(tweet.full_text)
print('favo : ', tweet.favorite_count)
print('retw : ', tweet.retweet_count)
def main():
getTweetBySearch('python', yesterday.strftime('%Y-%m-%d'), nowdate.strftime('%Y-%m-%d'))
これで想定通りの動作をすることができた。
ただし、検索結果はGMTのため、JSTにするにはいろいろ頑張る必要がある。
とはいえ、timedeltaで9時間ずらしてあげるだけの気がするが・・・
JSTで検索する方法
調べてみたら、Twitterの検索オプションでJST検索できるようなのでやってみた。
といってもやり方は簡単で、sinceもしくはuntilにて以下を引数にしてやればよい。
YYYY-MM-DD_hh:mm:ss_JST
(例)2019-06-17_00:00:00_JST
これだけでJSTにて検索ができるようになる。
具体的にはmain関数を以下のようにしてやればよい。
def main():
getTweetBySearch('python', \
yesterday.strftime('%Y-%m-%d_00:00:00_JST'), \
nowdate.strftime('%Y-%m-%d_00:00:00_JST'))
だたし、Twitter APIのcreate_atで取れるパラメータはJSTじゃないので注意。
コメント