こんにちは @ketancho です。今年もよろしくお願いします。
エゴサーチを自動化したく、表題の件を調査したのでそのメモです。やりたかったことは、
- 特定の文字列が含まれるツイートを取得する
- 時間を指定する(例:直近1時間)
- 自身のツイートは除外
- RT も除外
です。下記の Standard Search API を利用しました。
Parameters 一覧を見ても、時間指定や除外条件あたりがなかったので、"特定の文字列が含まれるツイート" 全量を引いてきてゴリゴリ除外しないといけないのかな?と最初思ったのですが、q
に普段 Twitter 検索しているのと同じ要領で時間の範囲、除外条件を渡してあげるだけで OK でした。
例えば log4ketancho -from:ketancho -RT since:2020-01-08_07:00:00_JST until:2020-01-08_08:00:00_JST
このような値を渡してあげれば期待する値が取得できました。
書いたコード
例によって AWS Lambda 上で動かす前提です。もっとキレイに書けないものか。2020年は Python 力上げたい。
import os import json from requests_oauthlib import OAuth1Session from datetime import datetime, timedelta, timezone JST = timezone(timedelta(hours=+9), 'JST') CK = os.environ['CK'] # * enter your Consumer Key * CS = os.environ['CS'] # * enter your Consumer Secret * AT = os.environ['AT'] # * enter your Access Token * AS = os.environ['AS'] # * enter your Accesss Token Secert * twitter = OAuth1Session(CK, CS, AT, AS) def lambda_handler(event, context): _search_tweet("log4ketancho") def _search_tweet(target_word): now = datetime.now(JST).strftime("%Y-%m-%d_%H:00:00_JST") one_hour_ago = (datetime.now(JST) - timedelta(hours=1)).strftime("%Y-%m-%d_%H:00:00_JST") query_str = target_word + " " \ "-from:ketancho -RT " \ "since:" + one_hour_ago + " "\ "until:" + now print(query_str) params = { "q": query_str } twitter_search_url = 'https://api.twitter.com/1.1/search/tweets.json' req = twitter.get(twitter_search_url, params = params) if req.status_code == 200: tweets = json.loads(req.text)['statuses'] print(tweets) return tweets else: return req.status_code
毎時1分に動かして、直近1時間以内の該当ツイートを取得しようと考えています。