3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【2021年7月執筆】Twitterでのsearch APIの制約について

Last updated at Posted at 2021-07-05

私事ではありますが、2020年5月にコーギーという中型犬をお迎えしました。
愛犬のブログを運営してますので、見てもらえると嬉しいです。

corgi_komugi

「コーギーについて、TwitterAPIで根掘り葉掘り分析してやる!」

と意気込んでいましたが、TwitterAPIの制約により上手くいきませんでした。
今回はその話をしたいと思います。

対象者

  • TwitterAPIのsearch apiを使ってみたが、検索結果が上手く表示できず困っている人
  • TwitterAPIのsearch apiの使用を検討しており、何ができるか知りたい人

TwitterAPIのsearch apiでは、「特定の語句を指定して、tweetを収集する」ことができます。
「Twitterのuser_idで検索する」「自分のtweetの一覧を表示する」といった場合には、search api以外の機能を使用するため、もろもろの条件も異なります。

また、今回の説明にはコードは出てきません。ご留意ください。

簡単な結論

  • TwitterAPIの無料版だと、直近7日分のTweetしか検索できない
    (長期にわたるtweet取得には、計画性が必要)
  • その他のAPIでのTweet取得も検討したが、あまり効果的ではなかった
  • 最終的には、TwitterAPIを使わずに、twitterのHP上で条件を絞り込んで検索した

APIでのもろもろの検討

ボツ案1 TwitterAPIのSearch APIの検討した

2021年7月現在、Twitter社が提供しているStandard search APIを使用すると、7日分のTweetしか検索できません。
Developer PlatformでTwitter社が明言してます。

twitter_HP

引用元はこちら


また、検索結果は完璧とは言い難いです。

Please note that Twitter's search service and, by extension, the Search API is not meant to be an exhaustive source of Tweets. Not all Tweets will be indexed or made available via the search interface.

引用元はこちら


有料版のPremium search APIに契約すれば、期間制限なしで使用できるようです。 詳細が気になる場合は、[こちら](https://developer.twitter.com/en/docs/twitter-api/premium/search-api/quick-start/premium-full-archive)から確認ください。 (私は試していないので、詳細は省きます。)

ボツ案2 Githubによいライブラリがないか検討した

GIthubにGetOldTweets-pythonというライブラリを見つけました。


Detailを読むと、「Twitter official APIでは1週間以上前のtweetを無料で取得できないので、取得できるライブラリを開発したぜ!」と書いてあります。

Twitter Official API has the bother limitation of time constraints, you can't get older tweets than a week. Some tools provide access to older tweets but in the most of them you have to spend some money before. I was searching other tools to do this job but I didn't found it, so after analyze how Twitter Search through browser works I understand its flow.

これで解決かと思いましたが、GetOldTweets-pythonをさらに詳しく調べていくと、2020年9月以降はUnexpected errorにより使用できないことが判明しました。

Unexpected error: <class 'urllib.error.HTTPError'>

引用元はこちらのGIthubのIssueです。

真偽のほどは不明ですが、Twitterの仕様変更のためと言われています。

次善策

ここからは、技術的制約の中でできることを検討していきます。

次善策1 TwitterAPIの無料枠を、可能な限り活用する

大量ツイートの収集・分析を個人で手軽に実現可能にする方法の提案」という、推薦投稿論文を見つけました。

簡単に説明すると、ボツ案1のStandard search API(Twitter APIの無料版)を、無料枠の上限まで最大限活用することで、大量のツイートを収集する、というものです。

この方法で短時間での大量のツイートを収集することが可能ですが、依然として7日以上前のツイートを収集できないため、この方法は断念しました。

論文が2020年1月に掲載されているため、提案時は7日以上前のツイートを収集できましたが、ボツ案2のGetOldTweets-pythonと同様、2020年9月以降は7日以上前のツイートを収集できなくなっていると推測されます。

次善策2 Twitter HPの検索を最大限活用する

Twitter HPでツイートを検索する際に、クエリの条件を細かく指定することで、収集したいツイートを表示することができます。

※「検索」は、下の画面の赤枠で行えます。

twitter_HP

例えば、

  • 「コーギー」又「#コーギー」というワードが使用されている
  • Retweetは除く
  • いいねを100以上獲得している
  • 日本語以外の言語

という条件でのTweet取得は、以下のクエリで行えます。

"#コーギー' OR 'コーギー' exclude:retweets min_faves:100 -lang:ja"

cucmberiumさんがGithubで詳しく書いてくれてるので、興味がある人はこちらを確認ください。

また上のリンクでは、「search/tweets では一週間以上前のツイートは検索できないので注意」と記載がありますが、2021年7月現在は、1週間以上前のツイートも表示されています。

【2021年7月8日追記】
GUIを重視する場合は、Twitter Advanced searchを使用してもいいかもしれません。

~~もはやAPIは使用していませんが、~~効果的でした。

実施したこと

Twitter HP で世界のコーギーの人気ツイートを以下のクエリで検索し、ブログにまとめました。

"#corgi OR 'corgi' exclude:retweets min_faves:1000 -lang:ja"

  • '#corgi' または 'corgi' という文字が含まれている
  • リツイートは除く
  • 最低のfavが1000以上
  • 日本語で書かれていない

という全ての条件に当てはまるツイートを抽出しました。

結果はこちらです。興味があれば確認ください!

corgi_komugi
3
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?