新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

Twitter APIでデータ収集してみる

世の中の動向を知るのに使えないかと、Twitterのデータを、Twitter APIを使って取得してみました。

結論から言うと、Twitter APIの制限がキツイと噂には聞いていましたが、本当にキツ過ぎて使い物になりませんでした…。

Twitter APIでデータを取得するところまではやったので、Twitter APIの使い方メモとして記しておこうと思います。

はじめに

手順は下記記事を参考にしました。

qiita.com

ざっくり手順と注意点をまとめると、下記になります。

  • Twitter APIを使うには、Twitterアカウントが必要
  • Twitterアカウントは電話番号登録しておかないといけない
  • Twitterアカウントで、Developer登録する
  • Developerサイトで、アプリを登録する
  • Twitter APIを使うだけなら、アプリ登録の「Enable Sign in with Twitter」のチェックはOFF
  • アプリで「API key」「API secret key」「Access token」「Access token secret」を生成する

「API key」「API secret key」「Access token」「Access token secret」の4つの情報があれば、Twitter APIが使えます。

Twitter APIでデータ収集してみる

Developerサイトのアプリのトークン画面

「API key」「API secret key」「Access token」「Access token secret」が載っている

Twitter認証するサイトを作りたい時など、Twitterアカウントでログインした人のトークンを使って、Twitter APIをコールするようなアプリを作る際は、 アプリ登録の「Enable Sign in with Twitter」にチェックをONにします。

Google認証のサイトを作る時に、Googleにアプリを登録するのと同じやつですね。

使い方

認証周りがややこしそうなのですが、幸いJavaScriptに「twitter」という、Twitter APIを使うライブラリがあったのでそれを使いました。

どういうAPIがあって、どう使うかは、Twitter APIリファレンスを見て調べます。

例えば、米津玄師さんの最近のツイートを取得するのは、下記になります。

import * as Twitter from 'twitter';

const tw = new Twitter({
    consumer_key: '<API key>',
    consumer_secret: '<API secret key>',
    access_token_key: '<Access token>',
    access_token_secret: '<Access token secret>'
});

function twitterAPIGet(client: any, url: string, params: any) {
    return new Promise((resolve, reject) => {
        client.get(url, params, (error: any, response: any) => {
            if (!error) {
                resolve(response);
            } else {
                reject(error);
            }
        });
    });
}

(async () => {
    try {

        const url = 'statuses/user_timeline';
        const params = {
            screen_name: 'hachi_08'
        };

        const res = await twitterAPIGet(tw, url, params);
        console.log(res);

    } catch (err) {
        console.log(err);
    }
})();

制限

噂には聞いていたのですが、想像以上に制限がキツかったです。

APIによって違うのですが、制限キツイものだと、15分の間に15回、つまり1分につき1回しかコールできません。

例えば、米津玄師さんのフォロワー(約230万人)のデータををTwitter APIで取得しようとすると、1分に1コール、1コールにつき200人までしか取得できないので

230万人÷200人÷60分÷24時間=約8日

かかります…。

また、時間を掛けさえすれば、全ての情報を取得できるかというと、そうでもありません。

例えば、指定したTwitterアカウントの全てのツイートを取得しようとしても、APIで取得できるのは、あくまで最近のツイートのみです。

ざっくりとAPIに目を通した感じ、Twitterとしては、外部の人間にTwitterから情報収集させる気はなさそうで、Twitter APIは、持っているもしくは、認証したTwitterアカウントの操作としての利用をメインで考えているようです。

有料プラン

いつくかお金を払うと使える機能があるので紹介します。

検索

ツイートを検索できるAPIが、別に有料で提供されています。

キーワードによるざっくりとした検索しかできず、新聞の記事検索のような使われ方を想定したAPIです。

自分に関すること

自分のツイートや、自分のフォロワーなど、自分に関する情報を取得する時でさえ、同じAPI制限がかかります。

お金を払ってでもいいから、自分の情報を取得したいというユーザー向けに、自分の情報を取得するためのAPIが、別に有料で提供されています。

ただし、自分のエンゲージメントは全て取得できるのですが、他はアクティビティが発生した時にWebhookする仕様なので、過去に遡っての情報取得はできません。

取得手段は用意しない代わりに、データはリアルタイムでそっちに流すから、後は自分で保存しておけということですね。

感想など

色々Twitterから情報を集めたいなぁと思ったのですが、Twitter APIで広域に情報収集するのは現実的ではないですね。がっかり…。