4
2

More than 1 year has passed since last update.

TwitterAPIを使ってTweetをリアルタイムで取得したい

Last updated at Posted at 2021-11-12

はじめに

  • Qiita初めてなので慣れてないです
  • SE歴4年ほど(コードを書くのは本業ではない)
  • TwitterAPIを使って自由自在にツイートを取得したい
  • 飽き性です

事前準備

  • TwitterのDevelopperアカウントの作成
  • pythonの実行環境整備(私はjupyterを使用しています)

ストリームって何?

よくわかりません。
なんかリアルタイムで情報をやりとりするっていう感覚です。

とりあえずドキュメントを漁ってみる

TwitterAPIのv2ってやつが最新っぽいのでそれを使います
https://developer.twitter.com/en/docs/twitter-api

Filterd streamっていうやつがなんか名前的にそれっぽい
https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/introduction

quick startを読んでみる
https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/quick-start

quick startをまとめると

1.ルールを作りましょう
 →ストリーム配信する定義の設定をする
  「ルール」=「取得するツイートのクエリ」といったイメージでしょうか
 →後続を読む感じ複数設定できそう

2.ルールにタグをつけましょう
 →ルールにタグを設定すると、どのルールでマッチしたかわかるように、タグをpayloadに記載してくれるらしい

3.ストリームにルールを追加しましょう
 →addというのを使ってルール(value)とタグ(tag)をセットしているっぽい

4.Bearer Tokenを使って認証を通そう

5.ストリームにルールを追加しましょう
 →なぜか2回目の登場だが、3.はあくまで説明で、実行順序としては「認証を通す」→「ルールの追加」って感じがする

6.取得したいフィールドを設定しよう
 →デフォルトだけで不満だったらいろいろカスタマイズできるみたい

つまりよくわからん

とりあえずやってみる

サンプルコードがあるのでやってみる
https://github.com/twitterdev/Twitter-API-v2-sample-code/blob/main/Filtered-Stream/filtered_stream.py

まるまるコピペして、
bearer_tokenのところだけ書き換えます

# To set your enviornment variables in your terminal run the following line:
# export 'BEARER_TOKEN'='<your_bearer_token>'
bearer_token = "XXXXXXXXXXXXXXX"

上から順番に実行していくと・・・
こんな感じのレスポンスが帰ってきました

まずツイートじゃないところ

{"meta": {"sent": "2021-11-12T16:41:47.610Z", "result_count": 0}}
{"data": [
  {"value": "cat has:images -grumpy", "tag": "cat pictures", "id": "1459199771915452417"}, 
  {"value": "dog has:images", "tag": "dog pictures", "id": "1459199771915452416"}
], 
"meta": {"sent": "2021-11-12T16:41:51.249Z", "summary": {"created": 2, "not_created": 0, "valid": 2, "invalid": 0}}}
200

最初の行はget_rules()のログでしょうかね
ルールを取得しに行きますが、初期状態だと設定されているルールがないので、送信時間と、result_count:0が帰ってきてますね

ルールが設定されていないのでdelete_all_rules(rules)はreturn Noneが実行されるため、ログ出力なし

そしてset_rules(delete)のログっぽいのが帰ってきていて、
各種ルールとタグが設定され、IDがふられた感じになっているのでしょうか

そしてお待ちかねツイート

{
    "data": {
        "id": "1459199755876134915",
        "text": "RT @AdoptMePimaAZ: Adoptable #Dog #Casper_PIMAAZ_04 Tongue tied \ud83e\udd23 https://t.co/TyXx8oO5zW https://t.co/xlQIgPbhIN"
    },
    "matching_rules": [
        {
            "id": "1459199771915452416",
            "tag": "dog pictures"
        }
    ]
}

dataの中身はツイートIDとそのテキストですかね
この感じだとRTか引用RTを取得している気がします。

そしてそのツイートを取得するのにどのルールがマッチしたかが書いてあるようです。

とりあえずストリームの取得?はできました。

今後

ストリームできましたが、まだまだやりたいことはたくさんあります。

  • RTを省きたい
    →ツイートを取得する上でRTが混ざっていると、何個も同じツイートを拾ってしまうのでそこを避けたい

  • このストリームをクラウドサービスと連携させてデータを蓄積したい
    →これを機に少しでもクラウドに触れてみたいなあという気持ちがあります。
    →AWSのkinesisかSQSってやつが使えそうで、大容量でもないし、金もないのでSQSってやつが有力候補

  • データ分析とかできたら楽しそう
    →分析したい内容がないのに、とりあえず取得したデータで分析するって言い出すのは馬鹿がやることだと思っていますが、データを分析基盤まで持っていくというクラウドのアーキテクチャは気になります。
    →分析だとGoogleのBigQueryが気になります。
     AWS→GCPのデータの移行の話とかも触れたら楽しそうだなあとか思ってます。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2