8月12日(米現地時間)、Twitter API v2 がアーリーアクセスで正式リリースされました。
https://developer.twitter.com/en/docs/twitter-api/early-access
そこで早速、直近1週間分のツイートのキーワード検索ができる recent search API
でツイート集計・保存するコードを作ったので、一例として共有します。
ソースコード
node.js
'use strict'constfs=require('fs');constaxios=require('axios');constQs=require('qs');constsleep=msec=>newPromise(resolve=>setTimeout(resolve,msec));// Set target queryconsttarget_query='qiita.com';// Format nested params correctlyaxios.interceptors.request.use(config=>{config.paramsSerializer=params=>{// Qs is not included in the Axios packagereturnQs.stringify(params,{allowDots:true,arrayFormat:"brackets",encode:false});};returnconfig;});// Set API configconstconfig_common={method:'get',baseURL:'https://api.twitter.com/2/tweets',url:'/search/recent',headers:{Authorization:'Bearer <YOUR_BEARER_TOKEN>',}};constinit_config=Object.create(config_common);constloop_config=Object.create(config_common);// Set paramsinit_config.params={query:target_query,start_time:'<STRAT_TIME>',// ex. 2020-09-01T00:00:00.000Zend_time:'<END_TIME>',// ex. 2020-09-03T00:00:00.000Zexpansions:'author_id',tweet:{fields:'created_at',},};letoutput=[];constgetReq=cfg=>{returnaxios(cfg).then(function(res){output=output.concat(res.data.data);if(res.data.meta.result_count===10&&Date.parse(res.data.data[res.data.meta.result_count-1].created_at)>Date.parse(init_config.params.start_time)){// Update paramsloop_config.params={query:target_query,until_id:res.data.meta.oldest_id,expansions:'author_id',tweet:{fields:'created_at',},}returntrue;}else{returnfalse;}}).catch(function(error){console.log(error);});}constloop=async(result)=>{awaitsleep(3000);if(result){constresult=awaitgetReq(loop_config);awaitloop(result);}elseawaitfs.writeFile('tweetList.json',JSON.stringify(output,null,''),(err)=>{if(err)console.log(`error: ${err}`);});}// Run(async()=>{constresult=awaitgetReq(init_config);awaitloop(result);})();
実行後、保存したデータ(qiita.com
をクエリにした例)
[{"id":"1300598977407016961","text":"RT @omiita_atiimo: 畳み込みよ、さようなら。畳み込み層を全てSelf-Attentionに取り替えた新時代のモデル「SAN」の解説記事を書きました!\n\nhttps://t.co/BXydQsNpf5\n\nSAだけで従来のCNNよりも優れた精度/ロバスト性を示して…","created_at":"2020-09-01T00:58:54.000Z","author_id":"1123585826623868934"},{"id":"1300598327080177670","text":"RT @ErdLaravel: Laravel 爆速プロトタイプ作成ツール「 https://t.co/4QQvMWoqiJ 」\nER図テーブル設計で『Migrationコード』を自動生成!!\n世界 900人以上を超える開発者に使用してもらっています。\nDB設計の勉強にも使って…","created_at":"2020-09-01T00:56:19.000Z","author_id":"1042801642460987392"},{"id":"1300598272239652866","text":"RT @ErdLaravel: Laravel 爆速プロトタイプ作成ツール「 https://t.co/4QQvMWoqiJ 」\nER図テーブル設計で『Migrationコード』を自動生成!!\n世界 900人以上を超える開発者に使用してもらっています。\nDB設計の勉強にも使って…","created_at":"2020-09-01T00:56:06.000Z","author_id":"712515194925219840"},...}