Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TwetterPremiumAPIの使用について #11

Open
suzukikeita0510 opened this issue Oct 29, 2021 · 3 comments
Open

TwetterPremiumAPIの使用について #11

suzukikeita0510 opened this issue Oct 29, 2021 · 3 comments

Comments

@suzukikeita0510
Copy link

gathertw.shを使用する際、StandardAPIではなく、PremiumAPIを使用する場合どこか変更する必要はありますでしょうか?
ご存じでしたら教えていただければ幸いです。
よろしくお願いします。

@colrichie
Copy link
Member

colrichie commented Oct 29, 2021

現状把握

改造ポイントを説明する前に、まず今のコマンドがどういう仕組になっているかを説明しよう。

APIにアクセスしているのは誰か?

APPS ディレクトリーにある gathertw.sh は、自ら Twitter API にアクセスはしない。BIN ディレクトリーにある btwsrch.sh または twsrch.sh を呼び出しており、それらが実際のアクセスをしている。

gathertw.sh と配下のコマンドの連携について

gathertw.sh は、配下の *twsrch.sh に対して次の要求をする。

  • gathertw.sh*twsrch.sh に対し、先頭または、指定したツイートIDを起点に、過去100件のツイートを返すように要求する。(最大100件であって常に100件返ってくるとは限らない)
  • *twsrch.sh は、RESデータファイル構造(1ツイートを7行で表現する) で、新しいツイートから順に結果を標準出力に返す。
  • gathertw.sh は、その結果として得られた一番最後のツイートに着目し、そのツイートIDを取得する。
  • gathertw.sh は、最後 *twsrch.sh` を実行するが、その際の起点とするIDは、先程得られたID番号-1とする。
  • (以上の手順を繰り返す)

プログラムの改造ポイント

以上を踏まえると、まず *twsrch.sh に変わる検索コマンドを作る必要がある。ただし、引数は *twsrch.sh 互換とし、かつ標準出力に返すデータのフォーマットも同じにしなければならない。そのためには、 *twsrch.sh (恐らく twsrch.sh の方がよい)を別名でコピーしたうえで、これに手を加えることになる。そして、呼び出し側の gathertw.sh にも若干の改造が必要になる。

twsrch.sh から派生させたコマンドの改造ポイント

まずは呼び出される側のコマンドについて。具体的には、

  • エンドポイントURLを Premium search API のもの にする。
  • APIが返す JSON を解釈する部分のコードを、上記APIが返すフォーマットに対応するように作り変える。

であろうと思う。OAuth認証の部分のコードは恐らくそのまま流用できるのではないかと思う。

gathertw.sh の改造ポイント

呼び出し側であるこちらについては、基本的には呼び出すコマンドの名前を変えるだけであるが、呼び出し頻度(レートリミット)の管理はこちら側の責任なので、Premium APIの仕様に揃えて調整する必要がある。現状では、

  • btwsrch.sh を呼び出す場合には 2秒に1回
  • twsrch.sh を呼び出す場合には 5秒に1回

に制限している。これは、それぞれのレートリミットが、前者は「15分間で450回まで」、後者は「15分間で180回まで」という制約に基づいている。Premium search APIの仕様によれば、「1分間に60回まで」のようなので、1秒に1回に緩和できるのではないだろうか。

@suzukikeita0510
Copy link
Author

ご丁寧なご回答ありがとうございます。
TwitterPremiumAPIを購入するのが11月なので、いじってない状態での質問になりますが、「twsrch.sh」の改造は

=== Set parameters of Twitter API endpoint =========================

(1)endpoint

API_endpt='https://api.twitter.com/1.1/search/tweets.json'
API_methd='GET'

(2)parameters

API_param=$(cat <<-PARAM |
count=${count}
geocode=${geocode}
lang=${lang}
locale=${locale}
max_id=${max_id}
since_id=${since_id}
until=${until}
q=${queries}
tweet_mode=extended
PARAM
grep -v '^[A-Za-z0-9_]{1,}=$')
readonly API_param

の部分だと認識しました。

色々調べましたが対応関係が不明なところがあるのですが、q=${queries}をquery=${queries}、until=${until}をtoDate=${until}にするような形でしょうか?
もしご存知でしたら教えていただければ幸いです。

よろしくお願い致します。

@colrichie
Copy link
Member

(1)(2)の認識はそれで合っていると思う。ただ、(2)のtoDateに関しては、仕様を見ると、Standard API では YYYY-MM-DD だったものが YYYYMMDDHHMM になっているようなので、そういった細かな違いは他にまだ残っているかもしれない。

あと、Standard API の search は GET メソッドだったのに対し、こちらのものは POST メソッドになっていて API の叩き方が若干違うのだが、POST メソッドの叩き方に関しては API_methd='POST' になっている他のコマンドの中のコードを参考にしてもらいたい。むしろその部分についてはそちらからコピー&ペーストしてくる方がよいかもしれない。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants