【Python】tweepyで期間指定してツイートを検索する

Twitter

目的

上記の記事でTwitterAPI(tweepy)を使ったツイート検索を実施したが、2週間分の検索結果が出力されてしまう。

今日だけ、とか1日だけの結果を検索したかったため、期間指定して検索結果を出力する方法を模索した。

 

アプローチ

検索文字列にsince,untilを入れる

Twitterには検索文字にsinceuntilなどのパラメータを指定してあげると、期間指定してツイートを検索することができる。

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じゃないので注意。

 

コメント

タイトルとURLをコピーしました