LoginSignup
21
20

More than 5 years have passed since last update.

Node.jsでTwitter検索から100件を超えるツイートを取得したい

Last updated at Posted at 2018-05-08

Twitter APIの search/tweets では1回あたり(=1ページあたり)100件までしか取得できませんが、search_metadataオブジェクト内のnext_resultsを含めたクエリでもう一度リクエストを投げれば次のページも取得できます。
要するに再帰で回してあげればOKというわけです。

ここではtwitter を使いますが、その他のライブラリを使う場合でも似たような実装をすれば良いと思います。

const twitter = require('twitter');

const client = new twitter({
  //取得したものを入れてください
  consumer_key: "******************",
  consumer_secret: "******************",
  access_token_key: "******************",
  access_token_secret: "******************",
});

searchTweet('ねこです よろしくおねがいします');

function searchTweet(queryArg, nextResultsMaxIdArg = null) {
  client.get('search/tweets', { q: queryArg, count: 100, max_id: nextResultsMaxIdArg }, (error, searchData, response) => {
    for (item in searchData.statuses) {
      let tweet = searchData.statuses[item];
      console.log('@' + tweet.user.screen_name+' : '+tweet.text); //実際に使う場合はここでファイルへ書き出しなどといった処理を行うことになると思います
    }

    if (searchData.search_metadata == undefined) {
      console.log('---- Complete (no metadata) ----');
      return 0;
    }
    else if (searchData.search_metadata.next_results) {
      let maxId = searchData.search_metadata.next_results.match(/\?max_id=(\d*)/);

      if (maxId[1] == null) {
        return 0;
      }

      console.log('---- next:' + maxId[1] + ' ----');
      searchTweet(queryArg, maxId[1]);
    }
    else {
      console.log('---- Complete ----');
      return 0;
    }
  });
}

Twitter APIはツイートや投稿者名だけなどではなく、様々な情報を返してくれます。(投稿者のフォロワー数など)
公式ドキュメントから使えそうな要素を見つけてみるのも楽しいと思います。

21
20
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
21
20