Open2

Twitter API toolkit for Google Cloudを用いて、recent search結果をBigQueryにロードする

txtytztxtytz

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プロジェクトの作成

流れ

  1. リポジトリを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>>'
  1. AppEngineアプリをデプロイ & BigQuery APIを有効化
gcloud app deploy

gcloud services enable bigquery.googleapis.com
  1. 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が日本語でもリクエストが通るようにする