こんにちは @ketancho です。以前、Twitter ボットを作って運用するのは勉強になりますよー、と書きました。
これまで私が作った Twitter Bot は「ツイートする」機能のみを使うものばかりだったのですが、「自分のタイムラインから過去のツイートを取得する」機能が必要なボットを作りたくなったので、そのあたりの実装メモをポストしたいと思います。取得条件は、
- 自分のツイートのうち、その時点で最新のもののテキスト部分がほしい
- ただし、RT や他の人への Reply は除いた「最新」が取りたい
です。
直近ツイートを取得する機能はあるだろうなーと思っていたので、最悪20ほど直近ツイートを取得し、上から順になめて "RT" 始まりのものと "@" 始まりではないものをクルクル探していけば、最低限の要件は満たせるかなと考えていましたが、調べてみると思いの外簡単に取得することができました。
GET statuses/user_timeline を使う
まず GET statuses/user_timeline
を使うことで、自分の直近ツイートを取得することができます。上のドキュメントを見ると、ユーザーが渡せるパラメータ一覧が書いてあるのですが、
- count: 取得するツイートの数を指定
- exclude_replies: Reply を除外するか
- include_rts: RT を含めるか
といったものがあり、私がやりたかったことが全てできそうな雰囲気です。Twitter API すばらしい。
コード化してみる
Python で実装していきます。最終的には AWS Lambda 上で動かしたいので、こんなコードになっています。実装のベースは下記の記事もあわせてご覧いただければと思います。
import os import json from requests_oauthlib import OAuth1Session 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): newest_tweet = _get_newest_tweet()['text'] print(newest_tweet) def _get_newest_tweet(): url = 'https://api.twitter.com/1.1/statuses/user_timeline.json' params = { "count": 1, "exclude_replies": True, "include_rts": False } req = twitter.get(url, params = params) if req.status_code == 200: newest_tweet = json.loads(req.text)[0] return newest_tweet else: return req.status_code
結果は、、、
Function Logs 日曜日は来ないが土曜日は来るはず🤔 https://t.co/QYfCZ4Yely
いい感じですね;)
まとめ
- Twitter API で自分のタイムラインを取得する方法を整理しました
- 用意されているパラメータで、ユースケースが満たせそうな雰囲気を感じました
- Python 化しました
それでは良い週末を!