25
9

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 5 years have passed since last update.

TwitterAPIで特定ツイートの会話を取得する

Last updated at Posted at 2017-03-19

Q.どうしてこんな記事を

A.TwitterのAPIを触ってたらツイートに対するメンションを取る公式APIが無い事に気づいて、電子の海を漂ったけどいい感じの答えが無くて喚いてたらモンエナをキーボードにこぼして3回くらい自殺したので、こんな犠牲者を少しでも減らすために

Q.どうすれば取得できるの

自分の頭では以下のものしか思いつかなかった
ただしどれもスマートじゃない というか公式APIが無い以上スマートにはできない気がする(そういう方法があったらこっそり教えてください)

方法1.SearchAPIを使う

シンプル 探すとこの方法が一番ヒットするイメージ

公式API的には「何にメンションされてるか」はわからないけど「何にメンションしているか」はわかるのでそれを利用する

具体的にはin_reply_to_status_idという情報がそれに当たる

何かしらの検索条件でツイートを取得して、それぞれのin_reply_to_status_idを確認して目的のツイートのIDと一致していたらそれがメンションという話

検索条件は条件演算子が使えるからtoを活用するといいはず

一見効率悪そうに見えて死ぬほど効率悪い でも一番まともかもしれない

自分はこれ見てよっしゃ使おうぜとはならなかったのできっと悪いフレンズ

方法2.公式Twitterの使ってるAPIを飛ばす

仮に使うなら自己責任で

公式Twitter( https://twitter.com/ )の会話を見る(ツイート押したときに出てくるポップアップのアレ)機能の時に使ってるAPIで情報が取れる

APIはこれ↓
conversation/show/:id

ただし公式以外がアクセスしようとすると怒られるので使うなら偽装しないといけない(多分 少なくとも自分の環境ではそうだった)

某有名非公式クライアントを自分も使ってるが、リクエスト見たらこの方法でやっててびびった
案外こういう危ない行為がメジャーなのかな いつBANされてもおかしくないと思うけど

ちなみにやってることはアレだけど、書き方は一番シンプルだったりする

方法3.公式クライアントをスクレイピング

方法2で済ませとけばいいものを、「偽装して直接API投げたらバレやすいけどスクレイピングならバレにくいのでは」とか変な知恵を働かせた結果がこれ

公式クライアントで会話表示させてソース見てみればわかるけどツイートのID表示内包してる部分があるのでそれ使ってShowAPIに投げる感じ

テキストとユーザ名みたいな基本情報だけでいいならDOMを解析するだけで済む

正しく動いたのを確認したあと小一時間くらい自分の所業を反省したのでこれで地獄に落ちることはないと思う

結論

最良なのは公式のdeveloperになって公式API作ることだと思う

conversation/show/:idがまともに使えないのも古生代くらい前にテスト通ってる癖に放置してる原住民のせいなので、そういうのは根本的に変えるべきだと思う

というわけでTwitter社に入社した後アメリカでの生活に困らないように、今日から注文するピザのサイズを一段階上げようと思う

25
9
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
25
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?