【Twitter API】特定キーワードを含むツイートの件数推移が知りたい！無料でどこまで調べられる??

#はじめに
とあるメーカー。
上司　「今度、山登りをテーマにした商品を企画しようと思っててさ」
上司　「今、山登りが流行ってるじゃん？」
上司　「流行っているっていう根拠になる数字が欲しいんだよね」
上司　「例えばSNSでこれだけ山登りに関するキーワードの検索数が増えています！とか」
上司　「そういう数字、集めてくれない？」
うめ　「了解です！」

・・・（検索検索）・・・

うめ　「うーん…、[twimp](https://twimp.nu/)は3か月前まで（Twitter）、かつ調査に時間がかかるし...」
うめ　「[Yahooのリアルタイム検索](https://search.yahoo.co.jp/realtime/search?p=%E5%B1%B1%E7%99%BB%E3%82%8A&ei=UTF-8&ifr=tp_sc)は30日前まで（Twitter）のデータだし...」
うめ　「[InstantTrends](https://trends.aiqlab.com/search/%E5%B1%B1%E7%99%BB%E3%82%8A)は直近の11日（Instagram）...」
うめ　「もっと長期的な推移を無料で見る方法って無いの??」

・・・（検索検索）・・・

うめ　「あった！Twitter API？？APIって、聞いたことはあるけど何が何だかわからないな」
・・・見つけた記事＝[【難解!?】Twitter APIを使って投稿データを収集する方法](https://gaaaon.jp/blog/twitterapi)・・・

うめ　「会員登録が必要？無料/有料版があるのか。無料版でも「Premium/Sandboxプラン」なら、フルアーカイブを一部無料で使うことができるみたい！」
うめ　「このプラン登録して、どこまでできるか試してみたいな。よし、やってみよ！」

・・・（検索検索）・・・

うめ　「ちょっと待った！このプランはv1のもので、今はv2っていう新バージョンが登場しているみたい。」
うめ　「[登録フォーム](https://developer.twitter.com/en/apply-for-access)にも、"you can begin to use our new Twitter API v2, or our v1.1 standard and premium APIs."ってあるよ。」
うめ　「最新の情報はどれなんだろ？Twitter API利用のための会員登録の解説記事も色々で回っているみたい。どれが最新情報？わからんーー！！」
うめ　「とにかく、Twitter Developerの公式サイトから会員登録を進めながら調べていくのがよさそう。よし、やろう！」

#やりたいこと
・「山登り」を含むツイートが日ごとに何件あるか、推移を調べたい。
（直近の半年分集められたら嬉しい。年毎の数も10年分とか集められたらなお嬉しい。…できるのか！？）
・「山登り」をキーワードに検索された件数を調べたい。
・「山登り+〇〇」と、どのワードと組み合わせて検索されたのか、知りたい。

#環境
Windows10

#スタート時点の私の状況
・Twitter API　なるものがあるらしい。APIって何ぞや？？どうやって使うの？？
・Python触ったこと無いよ。

#結論
・結局、今の私の力量では欲しい情報をAPIから取得することはできず、業務では[Yahooのリアルタイム検索](https://search.yahoo.co.jp/realtime/search?p=%E5%B1%B1%E7%99%BB%E3%82%8A&ei=UTF-8&ifr=tp_sc)のツイート数グラフから30日分の1日の件数(「山登り」を含むツイートの件数)を手作業で拾って、その数値を使った。

・Pythonで欲しいデータを取得できるようだったが、Pythonを触ったことがない現段階で「直近7日のツイートから"山登り"を含むツイートの件数を取得する」というのは、難しい。Pythonの基本を学び、必要な情報は何なのかを整理し、その情報を集めて勉強してからチャレンジした方が良さそう。

【v2 スタンダード版(無料)について、[Twitter公式ドキュメント](https://developer.twitter.com/en/docs)の内容】
（ドキュメントから読みとった内容だが、正しく読み取れているか自信無し。）
・無料で利用できるのは直近7日分のデータのみ。
・ひと月の最大検索ツイート数＝50万ツイート
・レート制限＝（Recent searchについて）450リクエスト/15分（アプリ毎）、180リクエスト/15分（ユーザー毎）
・リクエストごとに取得できるスイート数＝最大100ツイート/1リクエスト
参考＝エンドポイントの一覧（[Comparing Twitter API’s Search Tweets endpoints](https://developer.twitter.com/en/docs/twitter-api/tweets/search/migrate)）

#1.Twitter Developer公式サイトで会員登録
1.「Twitter Developer」でグーグル検索→[公式サイトトップページ](https://developer.twitter.com/en)に到着。
2.会員登録については、こちらの記事にまとめました。

https://qiita.com/ume-san/items/c32e5378e66cd888758c

#2.特定キーワードを含むツイートの件数を調べる方法
##2-1.下調べ

・30日以内であればYahooの[リアルタイム検索](https://search.yahoo.co.jp/realtime/search?p=%E5%B1%B1%E7%99%BB%E3%82%8A&ei=UTF-8&ifr=tl_sc)で事足りそう。件数を取得するには、グラフから手作業で1日ずつメモするしか無い？？

・NTT DATAがTwitterデータ提供サービスを展開しているみたい。料金表はこんな感じ。
　→[NTT DATA料金表](https://nttdata-nazuki.jp/data/twitter.html)　

・無料版だと取得できるツイートは、過去7日前のものまで。
>This endpoint gives you conversations from Twitter for the last 7 days.
（このエンドポイントは、過去7日間のTwitterからの会話を提供します。）
　引用元：Twitterドキュメント（[Tutorials / Analyze past conversations<チュートリアル/過去の会話を分析する>](https://developer.twitter.com/en/docs/tutorials/analyze-past-conversations)）

→年単位、月単位の長期的なツイート数推移を調べたいと思っていたけれど、課金が必要。
→Twitter API v2は「スタンダート/学術研究/ビジネス」の3段階のプロダクトトラックが存在する。学術研究/ビジネスについては、ステータスが「近日公開」となっていた。詳細は書かれていないけれど、過去の長期的なツイートを利用したい場合は、学術研究/ビジネスの契約が必要なようだ。対象者は、
・学術研究＝要件を満たした学術研究者。
・ビジネス＝Twitterの[公式パートナー](https://partners.twitter.com/en)や[エンタープライズデータカスタマー](https://data.twitter.com/en/customers/enterprise-data)など、Twitter API上でビジネスを構築する開発者。
エンタープライズ（ビジネス）版や学術研究版の利用料金は明記されていなかった。（私が見つけられなかっただけの可能性もあり）

・そもそも、無料でも30日以上前のツイートデータを取得できるかも！という期待が高まったのは、
>日単位で取得すれば7日前までしか取得できない制限を突破できます
untilには7日より前の日付を指定しても取得することができませんが、sinceとuntilで1日ずつ取得すれば7日より前の過去も取得できます。
引用元：[TwitterAPIで期間指定してTweetを取得する方法](https://qiita.com/areph/items/0745cb744a12810334c6#%E6%97%A5%E5%8D%98%E4%BD%8D%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8C%E3%81%B07%E6%97%A5%E5%89%8D%E3%81%BE%E3%81%A7%E3%81%97%E3%81%8B%E5%8F%96%E5%BE%97%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E5%88%B6%E9%99%90%E3%82%92%E7%AA%81%E7%A0%B4%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99)-Qiita @areph さん2016.08.27記事

という記事を見つけたからでした。が、今はできないようです。（実は方法がある！のかもしれませんが、私には情報を見つけられませんでした。）変化し続けているのですね。今後、もっと過去のデータも無料版で触れるようになる可能性も、無きにしもあらず...。

##2-2.v2で取得できるツイートの上限を知る
・ひと月の最大検索ツイート数＝50万ツイート
>If you are using the Standard product track at the Basic access level, you will be limited to receiving 500,000 Tweets per month across the v2 endpoints noted earlier.
（基本アクセスレベルで標準製品トラックを使用している場合 、 前述のv2エンドポイント全体で月に500,000ツイートを受信するように制限されます。）
（引用元：[Projects](https://developer.twitter.com/en/docs/projects/overview#tweet-cap)-Twitter公式ドキュメント）

・レート制限＝（Recent searchについて）450リクエスト/15分（アプリ毎）、180リクエスト/15分（ユーザー毎）
>（右記文章以外に、引用元リンク先に詳細の表あり）Every day many thousands of developers make requests to the Twitter API. To help manage the sheer volume of these requests, limits are placed on the number of requests that can be made. These limits help us provide the reliable and scalable API that our developer community relies on. 
The maximum number of requests that are allowed is based on a time interval, some specified period or window of time. The most common request limit interval is fifteen minutes. If an endpoint has a rate limit of 900 requests/15-minutes, then up to 900 requests over any 15-minute interval is allowed. 
（毎日、何千人もの開発者がTwitterAPIにリクエストを送信しています。これらのリクエストの膨大な量を管理しやすくするために、実行できるリクエストの数に制限が設けられています。これらの制限は、開発者コミュニティが依存する信頼性が高くスケーラブルなAPIを提供するのに役立ちます。 
許可されるリクエストの最大数は、時間間隔、指定された期間、または時間枠に基づいています。最も一般的なリクエスト制限間隔は15分です。エンドポイントのレート制限が900リクエスト/ 15分である場合、15分間隔で最大900リクエストが許可されます。 ）
（引用元：[Rate limits](https://developer.twitter.com/en/docs/twitter-api/rate-limits)-Twitter公式ドキュメント 2021/05/05現在）

・リクエストごとに取得できるスイート数＝最大100ツイート/1リクエスト
（引用元：[Search Tweets](https://developer.twitter.com/en/docs/twitter-api/tweets/search/introduction)-Twitter公式ドキュメント 2021/05/05現在）

・料金
v1.1は、リクエスト数に応じて変則的な料金体系になっているよう。
プライス表＝https://developer.twitter.com/en/products/twitter-api　（v1.1の欄参照）
自分が取得したいデータを得るにはリクエストを何件送る必要があるのか、それを知る必要がありそう。
ただ、それを知るためにはレート制限のことをもっと理解する必要がありそう。今の私には、「山登り」を含むツイートを過去フルアーカイブから取得したい場合に、料金がいくらになるのか、判断する力は無い。
v2の料金については、該当ページを見つけられず。

・エンドポイントの一覧
[Comparing Twitter API’s Search Tweets endpoints](https://developer.twitter.com/en/docs/twitter-api/tweets/search/migrate)

・その他一覧

|カテゴリー|商品名|サポートされている履歴|クエリ機能|エンドポイントをカウント|データの忠実度|
|:--|:--|:--|:--|:--|:--|
|Twitter API v2|Recent search(最近の検索)|7日|Twitter APIv2オペレーター|まだ利用できない|フル|
|Twitter API v2|Full-archive search(フルアーカイブ検索)|アーカイブ全体（AcademicResearch製品トラックでのみ利用可能）|Twitter APIv2オペレーター|まだ利用できない|フル|
（引用元：[Twitter's search endpoints](https://developer.twitter.com/en/docs/twitter-api/search-overview)-Twitter公式ドキュメント 2021/05/05現在）


##2-3.どうするか
・実際の業務で使う数字は、おとなしくYahooのキーワード検索から拾ってこようと思います。現段階では自動で取得する方法がわからないので、手作業で数字をうつします。

・せっかくAPIのことを知ったので、今回は直近7日間のツイートで「山登り」が含まれているツイートの数を7日間の推移として調べたいと思います。
→調べていくと、7日分の該当する全ツイートを抽出するのは、PCへの負荷のことや、取得できるツイート数の制限のことを考えると、自分の浅い理解のまま実行するのはPCを壊しそうで怖い...と感じました。なので、今回は実行までは手を付けず、まずPythonの基本を勉強してからTwitter APIの操作に移りたいと思います。


#参考
【Twitter公式ドキュメント】

・[Twitter API v1.1　と　v2の詳細説明](https://developer.twitter.com/en/products/twitter-api)
・[検索できるツイート上限](https://developer.twitter.com/en/docs/twitter-api/tweets/search/api-reference/get-tweets-search-recent)
・[アクセスレベルと製品トラックの説明](https://developer.twitter.com/en/products/twitter-api/early-access/guide#na_2)
・[商用/非営利目的の説明](https://developer.twitter.com/en/developer-terms/commercial-terms)
・[プロジェクト](https://developer.twitter.com/en/developer-terms/commercial-terms)
・[エンターブライズとは](https://developer.twitter.com/en/docs/twitter-api/enterprise)
・[エンタープライズのレート制限](https://developer.twitter.com/en/docs/twitter-api/enterprise/rate-limits)
・「[Tutorials / Analyze past conversations（チュートリアル / 過去の会話を分析する）](https://developer.twitter.com/en/docs/tutorials/analyze-past-conversations)」

【その他】

・[TwitterAPIで期間指定してTweetを取得する方法](https://qiita.com/areph/items/0745cb744a12810334c6)-Qiita @areph さん 2016.08.27記事
・[500万件を超えるTwitter のリツイート データを取得・分析する方法　-Twitter Premium Search API を実際に使ってみてわかった嵌りポイントとその対策-](https://kageura.hatenadiary.jp/entry/2019/02/01/500%E4%B8%87%E4%BB%B6%E3%82%92%E8%B6%85%E3%81%88%E3%82%8BTwitter_%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%83%BB%E5%88%86%E6%9E%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95_-Twitter_Premium_Se#%E3%81%AA%E3%82%93%E3%81%A7%E3%81%93%E3%82%93%E3%81%AA%E3%81%93%E3%81%A8%E3%82%92%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E6%80%9D%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%8B)-Morning Girl 2019.02.01記事
・[プログラミング歴10日の人がTwitterAPIに負けた話　#2](https://qiita.com/johnsakagami/items/f849146e9eefc597e02e)-Qiita @johnsakagami さん
2019.10.07記事
・[大量ツイートの収集・分析を個人で手軽に実現可能にする方法の提案](https://www.ipsj.or.jp/dp/contents/publication/41/S1101-R1802.html)-デジタルプラクティス　Vol.11 No.1(Jan. 2020)推薦投稿論文-※1松浦 智之、※1當仲 寛哲、※2大野 浩之 
（※1＝（有）ユニバーサル・シェル・プログラミング研究所、
※2＝金沢大学総合メディア基盤センター／慶應義塾大学SFC研究所 ）
・[【GetOldTweets-python】無料でTwitterの過去７日より前のツイートを取得してみる](https://qiita.com/jinto/items/60f23a6b5d9603836dab)-Qiita @jinto さん 2020.05.09更新記事
・[【難解!?】Twitter APIを使って投稿データを収集する方法](https://gaaaon.jp/blog/twitterapi)-GaaaOn 2020.06.21記事 
・[TwitterAPIから特定のキーワードを含むツイート数を調べる](https://qiita.com/tobiuo0203/items/9fe7fca3673a92c6148d)-Qiita @tobiuo0203
 さん 2020.07.23更新記事
・[Pythonでツイートを取得する方法【Twitter分析】](https://your-3d.com/python-search-tweets/)-Your 3D 2020.10.31更新記事

【Pythonの基礎勉強してから試したい記事】
・[TwitterAPIから特定のキーワードを含むツイート数を調べる](https://qiita.com/tobiuo0203/items/9fe7fca3673a92c6148d)-Qiita @tobiuo0203
 さん 2020.07.23更新記事
→APIで直近7日のツイートから「山登り」が含まれるツイート数を調べたい...と思って見つけたこちらの記事。7日分ではありませんが、「特定の1日に20分ごとに1秒間72回取得し、件数を"corona.xlsx"に入力。これを元に1日の件数を推定」という方法が取られていました。PCへの負荷もかかりそうだし、コード内容を理解しきれない今の状態で実行するのは怖い...と感じたので、一度Pythonの基本を学び、その後試してみたいと思います！