Hiroto's diary

プログラミング関連を書くかも

Twitterのアンケート関連のAPIを解析したお話

2017年1月7日追記

この記事だけやたら伸びているので書いて起きますが、解析は途中までしかしてないのでこれで合ってるのかも分かりませんし今も使えるのかは不明です。

追記ここまで


Twitter APIを解析してたらアンケートの取得方法とか作成方法など色々分かったので公開。なお、この記事はTwitterがアンケート関連のAPIを公開したら消そうと思います。無能なTwitter運営はさっさとAPIを公開しろ。

解析にはiOS 7.1.2のiPhoneと最新版のTwitter公式アプリを使い、通信の解析にはLinuxマシンにCharlesでプロキシを立てて解析しました。検証はTwitter for Macのキーで認証させて検証しました。サードパーティ製のキーでは動きませんでした。

では早速公開。

ついでにPHPで書いてみた例をgistに載せておきました。 https://gist.github.com/Hiroto-K/8a1ace1a871413abd6da

アンケート取得

非公式エンドポイントでの取得

ヘッダ偽造など色々必要みたいでなので、まだ検証途中です。再現出来たらサンプルも公開します。

エンドポイント

GET https://caps.twitter.com/v2/capi/passthrough/1

パラメーター

twitter:string:card_uriはアンケートのuri。形式はcard://ステータスID twitter:string:cards_platformはアプリのプラットフォーム。 twitter:string:response_card_nameは不明。

レスポンス

まだ良くわからない所があるので生のJSONを貼っておきます。

公式エンドポイントでの取得

Twitter公式クライアントのキーで認証してinclude_cardsパラメーターとcards_platformを付けてリクエストすれば取得できます。 エンドポイントはサードパーティでも使えるstatuses/showstatuses/lookup,statuses/user_timeline等です。全てを検証した訳ではありませんが、恐らくツイート情報が入っているAPIなら大体使えると思います。 cardの中にアンケート情報が入っていて、アンケートのツイートでは無いときにはcard自体が空になります。cardの中身は非公式エンドポイントでのレスポンスと全く同じです。

アンケート作成

ヘッダ偽造など色々必要みたいでなので、まだ検証途中です。再現出来たらサンプルも公開します。

エンドポイント

POST https://caps.twitter.com/v2/cards/create.json

パラメーター

card_dataは作成するアンケート情報のJSON send_error_codesは不明ですが、恐らく1で固定

レスポンス

card_uriがツイート作成に使うuri statusがステータス

ツイート作成

通常のstatuses/updatecard_uri,cards_platform,include_cards,contributor_detailsを付けて送信。 card_uriは先程のエンドポイントのレスポンスのJSONの中のcard_uriを使う cards_platformはアンケート取得の時に使ったパラメーター include_cards1で固定? contributor_details1で固定?

アンケート投票

ヘッダ偽造など色々必要みたいでなので、まだ検証途中です。再現出来たらサンプルも公開します。

エンドポイント

POST https://caps.twitter.com/v2/capi/passthrough/1

パラメーター

twitter:long:original_tweet_idにステータスID twitter:string:card_uriにアンケート取得APIに入ってるcard://ステータスID形式の文字列 twitter:string:cards_platformにデバイスのプラットフォーム twitter:string:response_card_nameはアンケート取得APIのレスポンスのcard内のname twitter:string:selected_choiceに投稿するアンケートの番号?

レスポンス

アンケート取得APIと同じレスポンス形式です。この値は投稿後の値になっています。