Twitter Search APIのSandboxを使うよ
Twitter APIがuser streaming廃止だなんだと結構色々あったので、手始めに新しくなったSearch APIを試してみたよ
Search API
Search APIは3種類あって、その中でまた契約プランによって使える機能などがかわってきて
一度に返してくれるツイートの量や、使える検索オペレーターなどが変わってくる。
そういった検索まわりの仕様がStandardとPremium, Enterpriseでは大きく異なり
PremiumとEnterpriseでは大きな部分では料金形態などが変わってくるようだ。(Enterpriseは要問い合わせっぽいので詳細は知らない。)
検索オペレーターの一覧など見ていると、Enterpriseでしか使えないものも存在している。
Overview — Twitter Developers
- 7-days – 検索対象は7日間前までのツイート
- Standard
- 30-days – 検索対象は30日間前までのツイート
- Premium
- Enterprise
- (Sandbox)
- Full ARchive Search – 検索対象は2006年3月までのツイート(Twitterがサービス開始して以来初めてのツイートまで、全部!)
- Premium
- Enterprise
- (Sandbox)
Search Tweets: 7-days(Standard Search)
無料で使えるやつ。
Standard Searchは基本的にTwitterの高度な検索でできる事をAPIでできるんだけど
twitterのモバイルクライアントなんかで検索していてわかる通り、twitter側である程度関連性などに焦点を当ててアグリゲートしたデータが返ってくるので、一部ツイートやユーザーが出てこない事もある。
データの完全性を求めるのであれば、Premium以上の検索APIを利用する必要がある。
Standard search API — Twitter Developers
Search Tweets: 30-days/Full Archive(Premium. Enterprise)
有料のやつ。30日版と全期間版
ちなみにツイートはツイートした後、約30秒くらいでAPIから検索できるようになるらしい。
Premium search — Twitter Developers
30-days/Full ArchiveはSandboxが使える
こちらはdeveloper accountを申請すると無料でSandboxが利用できるようになる。
premiumだとエンドポイントがデータ取得用とデータ個数取得用の2種類利用できるようになるけど、sandboxで利用できるエンドポイントはデータだけ。
他にもsandboxは制約があり、一度に取得できるデータ数が違うとか、検索パラメーターが一部しか使えないなど色々あるんだけど
一番気にしておきたいところで言うと、一月のリクエスト回数で、30daysは250回まで、full archiveは50回まで。
develop accountを申請するよ
sandboxで検証してきたくなったでしょう。そうしたらdeveloper accountを申請するのです。
Apply for access — Twitter Developers
Apply for developer accessというページに遷移するので、求められるままに情報を入力していきましょう。
企業なのか個人なのか、どのジャンルのサービスなのか、どの国と地域に提供するサービスなのかなど、サービスがある前提です。
「ちょっと触ってみたいだけの人」は触れないのですねぇ。
「Describe in your own words what you are building」
この項目は300文字以上で書かないといけないので一番めんどくさいと思いますが
- サービス・製品の目的
- ユーザー・カスタマーに何をお届けするのか
- ツイートやユーザーなどのコンテンツをどんな感じで分析するのか
- 取得したデータはどう表示されるのか
みたいな事を書いていきます。
私は制作を考えているサービスに基づいて、こういいうサービスを考えているよ!というサービスの概要についてと、
データの取り扱いについて、ツイートのfavやRT数を元に人気度を分析したりするよ!とか、ツイートは埋め込み表示するつもりだよ!とか書きました。
承認されると以下のようなメールが届きます。金曜日に申請して日曜日には受理してもらえたというスピード感。
Your Twitter developer account application has been approved!
Thanks for applying for access. We’ve completed our review of your application, and are excited to share that your request has been approved.
Sign in to your developer account to get started.
Thanks for building on Twitter!
さあ、楽しいdeveloper生活の始まりです。
Full Archive検索を試してみよう
Postmanを使ってリクエストすることにしました。
事前にJWTを発行しておきます。
node.jsで以下の処理を書いてJWTを取得。
const request = require('request');
const credentials = `${CONSUMER_KEY}:${CONSUMER_SECRET}`;
const credentialsBase64Encoded = new Buffer(credentials).toString('base64');
request({
url: 'https://api.twitter.com/oauth2/token',
method:'POST',
headers: {
'Authorization': `Basic ${credentialsBase64Encoded}`,
'Content-Type':'application/x-www-form-urlencoded;charset=UTF-8'
},
body: 'grant_type=client_credentials'
}, function(err, resp, body) {
console.log(body);
});
PostmanのHeadersで
Authorizationに Bearer {JWT_TOKEN}
を持たしておきましょう。
bodyにはjsonで検索クエリをや期間などを指定します。
{
"query":"#testhashtag from:000000000000(ツイートのID)",
"fromDate": "200603210000"
}
toDateは未指定だとnow()が反映されます。
リクエストするエンドポイントは
https://api.twitter.com/1.1/tweets/search/fullarchive/{env\_label}.json
{env_label}には、developerサイトのAccount / Manage dev environmentsから登録したdev environment labelを記載します。
Manage dev environments (ログインユーザーだと見られる)
検索オペレーター
twitterの検索窓ど同じように、検索オペレーターをクエリ内に含ませることができる。
Using standard search — Twitter Developers
Premium search operators — Twitter Developers
使える・使えないの一覧はこれを見ると早い
Operators by product — Twitter Developers
気をつけた方がよさそうなこと
APIから取得できるデータは一部可変的であることから、1日1回日付やユーザーをフィルタにして検索かけてデータ取得して対象ツイートを保存していくみたいなバッチを組むとして
ユーザーのフィルタとしてユーザーのハンドル「@xxxx」を使ってしまうと変更になる可能性があるので、UIDにするとかなんかいろいろある
あと、返って来たデータはidじゃなくてid_strを使うこと。
きになるお値段
全期間の検索で、複雑なクエリをもたせたい場合は課金必須なのでなかなか大変。
過去ツイートを使ったサービスといえばtogetterだけど、あれはNTTデータさんのサービスを使っているんですってね。
感想
2500回くらいアクセスしたかったら20万円くらい払う必要があります
もう湯水のごとくジャブジャブAPIを利用できる時代は終わったのね!
複雑な検索クエリを作って1024文字超えないようにね!多分平気だけど!
こちとら限られたリクエスト数で勝負していきたいというのに、トレンドのハッシュタグを付けたレイバンのサングラス買ってねみたいなゴミツイートの存在が憎いですねと思いました。