いいねしてくれた人をTwitter APIで表示したかったけどできなかった話

こんにちは。てぃろです。

Twitterの運用を日々改善しています。その中で自分のツイートにいいねしてくれた人のことをよく知りたくて一覧表示するプログラムを書いてました。

が、結論から言うと、今は実現できなさそうです…(泣

今回はそのために調べた内容をまとめた技術メモです。もし、「こうすればいいねしてくれた人が表示できるよ!」というやり方がわかれば是非教えていただきたいです。TwitterでDMとかしてくれるとうれしいです!

では、調べたことを書いていきます。

Twitter APIには、いいねしてくれた人を一覧するAPIはない

まず、公式のAPIでいいねしてくれた人の情報が取れないか探しました。が、そんなAPIはありませんでした。

一番いいねしてくれた人の情報が取れそうだったのは、ツイートそのものの情報を取得する以下のAPIですが、残念ながらいいねの数だけしか返してくれません。

https://developer.twitter.com/en/docs/twitter-api/tweets/lookup/api-reference/get-tweets-id

その他のメトリクスも基本的に数字しか返してくれなくて”誰が”という情報がとれるAPIではありませんでした。

加えて、リツイートの場合でもダメなようです。

上記APIのレスポンスフィールドの中に、”referenced_tweets”というのがありますが、これはそのツイートがリツイート(retweet)、引用リツイート(quote)、リプライ(replied_to)のどれであるかを示すものでした。

Twitterは自分のツイートに反応してくれた人の情報をこれでもかとAPIでは渡してくれないのですね…。

ググってみると実現できそうなコードはあるが、今は動かないみたい

こちらの方も最近(2020/5)解説してくださっているので、動くのかなと思いきや動きませんでした…。

ググっていくと、コードのネタ元は以下のStackOverflowの記事なので初出は、2015年とかなり古いです。

動かなかったところは、以下のURLアクセスです。

json_data = urllib.request.urlopen(url='https://twitter.com/i/activity/favorited_popup?id=' + str(post_id)).read().decode("utf-8")

アクセスすると400 Bad Requestで返ってきてしまいます。

Postmanでアクセスしてみましたが、その”ブラウザはサポートしてません”という以下のようなレスポンスが返ってきます。

		<h1>This browser is no longer supported.</h1>
		<p>
			Please switch to a supported browser to continue using twitter.com. You can see a list of supported browsers
			in our Help Center.
		</p>

対応ブラウザは以下から確認できます。当たり前ですが、PostmanやPythonがサポートはされてないですよね。

試しにブラウザ(Chrome)でアクセスも試しましたが、そのページは存在しませんと言われてしまいます。

つまり、コード内のURLはすでに存在しないので、あのコードはもはや使えなくなった、というのが結論かと思います。

おわりに

でも、Twitter Web Appを使っていると”通知”の画面から誰がいいねしてくれたかわかるじゃないか!

と、思ってアクセス内容を開発者ツールで解析してみたのですが、TwitterはおそらくGraphQLとか使ってるんじゃないですかね。REST APIアクセスがあったように見えません。

subscriptionっぽいアクセスも見えたので、あらゆる情報をWebSocketでとってきているんじゃないかと思います。

つまり、Twitter Web Appをハックするとしたら、GraphQLに対応したコードを書かないといけないんですかね。そこまでやると後のメンテも大変そうなので断念。

また別のアイディアを考えます。