はじめに
今回はTwitterの検索APIです。今回のAPIは、既にTwitterから情報収集したことがある人にとっては不要のAPIになりますが、「ちょっとTwitterのAPIを使ってみたい」という人には役立つAPIだと思います。特徴は『クリックだけでTwitterと連携してツイートの収集が始められる』ところです。以降では、技術面も含めて解説します。
API
サンプルコード
特徴
Twitterのアプリ連携を使っています。アプリ連携の実装方法については以前投稿したこちらの記事を御覧ください。アプリ連携することで、ユーザーはアプリを認証するだけで自身のアカウントからTwitter検索(ツイート収集)できるようになります。「簡単ツイート収集API Word2Vec拡張」については、Word2Vecの同義語APIでクエリ拡張しています。後ほど実際に使った例を載せます。なお、ツイート収集APIで取得したツイートの扱いは、本家Twitterの規約に準拠してください。
使ってみる
まずは、Apitoreのマイページから「Twitterと連携する」をクリックし、ApitoreをTwitterとアプリ連携させます。Apitoreへのアカウント登録が必要ですが、Facebook連携しているので簡単ですし、基本無料で利用できますのでお気軽にどうぞ。ツイート収集APIも無料です。 次に、「簡単ツイート収集」のAPIをアカウントに登録します。「Register」をクリックしてください。 ApitoreではAPIをマイリストで管理できる機能がありますが、今回は「とりあえず登録」します。 Apitoreのアクセストークンを発行します。マイページの登録APIsに移動してください。直前の操作で「とりあえず登録」を選んだ人はこちらで「アクセストークン表示」をクリックしてください。任意のマイリストに登録した人は、画面左側の「該当するマイリスト」をクリックし、「アクセストークン表示」をしてください。 「作りなおす」をクリックします。アクセストークンが表示されるので、コピーしてください。 APIのデモページ(Swagger)に移動します。「access_token」に先ほどのアクセストークンを、「q」に検索クエリを入力して下さい。1回のリクエストで直近100件のツイートを取得できます。「iter」を指定すると100 x「iter」件のツイートを取得できますが、Twitter社の定めるRateLimitにはお気をつけ下さい。 Twitterの検索APIは直近1週間までのツイートを取得できる仕様ですが、そこまでのツイートを収集する場合は自身でプログラムを書くことをおすすめします。今回公開するAPIはあくまで簡易版と認識しておいてください。 さっそく、「とある魔術の禁書目録」を入力してみます。100件ぜんぶを表示すると冗長なので省略しますが、ちゃんとツイートを取得できます。
"tweets": [
{
"statusId": 818934189860847600,
"text": "[定期]黒子のバスケ、Fate/Zero、化物語、男子高校生の日常、あの花、日常、アイマス、バカテス、とある魔術の禁書目録、とある科学の超電磁砲、青の祓魔師、BLEACH、名探偵コナン、夏目友人帳、大好きです\(^o^)/ #相互フォロー #共通ならRT",
"createdAt": 1484084100000,
"source": "<a href=\"http://twittbot.net/\" rel=\"nofollow\">twittbot.net</a>",
"favoritedCount": 0,
"retweetCount": 0,
"userId": 988367323,
"userName": "ゆき∞",
"userScreenName": "uw8l6",
"userProfileImageURL": "http://pbs.twimg.com/profile_images/2930518610/707d1a1bc41d313dd56e7ba1046bd939_normal.jpeg",
"sentiment": null,
"sentimentScore": null,
"favorited": false,
"retweeted": false
},
Word2Vec拡張版も使ってみます。クエリ拡張によって「とある科学の超電磁砲」もヒットするようになります。クエリ拡張はWord2Vecの同義語APIを使っています。ノイズを減らすために形態素解析で同じ品詞の単語を使ってクエリ拡張しています。
"tweets": [
{
"statusId": 818925671472734200,
"text": "とある科学の超電磁砲\n『only my railgun』\n♪\n#アニソン https://t.co/2e9dP27Fyj",
"createdAt": 1484082069000,
"source": "<a href=\"https://twitter.com/ninkinoanison\" rel=\"nofollow\">アニソン人気の</a>",
"favoritedCount": 1,
"retweetCount": 1,
"userId": 793003041246937100,
"userName": "30秒人気のアニソン☆",
"userScreenName": "ninkinoanison",
"userProfileImageURL": "http://pbs.twimg.com/profile_images/793003651656671232/sy4nyDfq_normal.jpg",
"sentiment": null,
"sentimentScore": null,
"favorited": false,
"retweeted": false
},
APIアクセスのソースコード(再掲)
public class Api23TwitterSearchExample {
static String ENDPOINT = "https://api.apitore.com/api/23/twitter/search";
static String ACCESS_TOKEN = "YOUR-ACCESS-TOKEN";
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
Map<String, String> params = new HashMap<String, String>();
params.put("access_token", ACCESS_TOKEN);
params.put("q", "Apitore");
params.put("iter", "1");
String url = UrlFormatter.format(ENDPOINT, params);
TwitterResponseEntity response =
restTemplate.getForObject(url, TwitterResponseEntity.class, params);
System.out.println(response.getLog());
System.out.println(response.getTweets().get(0).getText());
}
}
おわりに
ツイート収集APIを公開しました。すでにTwitterでDeveloper登録をしている人は自分でツイートの収集ができると思いますが、これから始める人やサクッとハッカソンで使いたい人にとっては、Twitterとの連携がクリックだけで済むので、簡単で使いやすいAPIになっていると思います。
2017/2/26 追記
簡単ツイート収集APIの機能拡張をしました。「自分の投稿ツイートを獲得できるAPI」と「自分のタイムラインのツイートを獲得できるAPI」を追加しました。
2017/2/27 追記
APIコールのRubyサンプルを追加しました。