Open2
Twitter API toolkit for Google Cloudを用いて、recent search結果をBigQueryにロードする
content
公式のTweet loader applicationを用いて
Twitter recent search API v2を用いたtweetの取得結果をbq上のデータセットに流す
ドキュメント: Twitter API Toolkit for Google Cloud: Recent Search
How much time will this take? 30 mins is all you need
とあるが、(twitter APIの準備がクリアできている場合)本当にそう。
前準備
- Twitter Developer Accountでprojectを作成し、bearer tokenを取得
- AppEngineでデプロイする用のgoogle cloudプロジェクトの作成
流れ
-
リポジトリをcloneして、
config.js
のbearer tokenとgoogle cloud project idを用意したものに置き換える
config.js
config.twitter_bearer_token = 'Bearer <<INSERT YOUR BEARER TOKEN>>'
config.gcp_projectId = '<<GCP PROJECT ID>>'
- AppEngineアプリをデプロイ & BigQuery APIを有効化
gcloud app deploy
gcloud services enable bigquery.googleapis.com
- CURLコマンドを投げる
curl -d '{
"recentSearch" : {
"query" : "Apple AirTag or AirTag",
"maxResults" : 100,
"startTime" : "2022-02-01T17:00:00.00Z",
"endTime" : "2022-02-06T17:00:00.00Z",
"category" : "Tracking Devices",
"subCategory" : "Wireless Gadgets"
},
"dataSet" : {
"newDataSet" : true,
"dataSetName" : "Gadgets"
}
}' -H 'Content-Type: application/json' https://<<Tweet loader URL>>.appspot.com/search
⇨ bqデータセット内のテーブルにsearch結果がinsertされる
メモ
2.のデプロイ時のリージョン選択で、asia-northeast1を選択
- それに合わせて、bqデータセットのロケーションもasia-northeast1に変更
- USよりtokyoの方がストレージ料金が微妙に高かったりするので、不要な操作ではある
services/bq-dataset.js
async function createDataSet(dataSetName) {
const options = {
// location: 'US',
location: 'asia-northeast1',
};
console.log('dataSetName -- ', dataSetName);
実行時にTypeErrorが出ることがあったので、該当箇所を適当に変更
TypeError: Cannot read property 'data' of undefined"
controllers/search.js
resolve('Recent Search results are persisted in database');
})
.catch(function (error) {
// console.log('ERROR ',error.response.data);
console.log('ERROR ',error);
// reject(error.response.data);
reject(error.response);
});
queryを日本語にするとTypeErrorが出るので、修正が必要
TypeError [ERR_UNESCAPED_CHARACTERS]: Request path contains unescaped characters
- これはToDo
ToDo
- queryが日本語でもリクエストが通るようにする