概要
TwitterApiを使ってあれこれしたいと思ったので動かすまでの手順をまとめてみた
Nodejsで作成した理由はなんとなくフロントエンドと同じjavascriptでやれたら楽かなーと思ったぐらいです。
基本セットアップ
ServerlessやNodejsなどのインストールは以前私が書いた記事ですが、こちらが参考になるかと思います。
https://qiita.com/tama0571046/items/cfe262b002f6434b915e
TwitterAPIを使用するまでの流れは記事がたくさんありますので、調べるとすぐに出てくるかと思います。
私が参考にしたサイト
https://www.itti.jp/web-direction/how-to-apply-for-twitter-api/
Serverless
ServerlessをAWSの連携
まずはAWSにログインして[IAM]の[ユーザー]からアクセスキーとシークレットキーを取得してきてserverlessに教えます
sls config credentials --provider aws --key XXXXXXXXXXXX --secret XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
プロジェクト作成
Serverlessを使ってプロジェクトを作成します。
serverless create --template aws-nodejs --name twitter_server --path twitter_server
cd twitter_server
node_moduleを追加
entry pointだけ変更してあとはそのままEnterでOK
yarn init
> question name (twitter_server):
> question version (1.0.0):
> question description:
> question entry point (index.js): handler.js
> question repository url:
> question author:
> question license (MIT):
> question private:
twitterモジュールを追加
yarn add twitter
event.jsonの追加
handler.jsのevent引数で取得できます
vim event.json
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
handler.jsの修正
Twitter APIのリファレンスを参照して取得したいデータに合わせてコーディングしてください。
https://developer.twitter.com/ja/docs/ads/general/api-reference
なんとなくこんな感じかな。というのを下記に記述します。
もっといいやり方あったら教えて下さい。
'use strict';
var Twitter = require('twitter');
// 初期化
var tweet_client = new Twitter({
consumer_key: '***',
consumer_secret: '***',
access_token_key: '***',
access_token_secret: '***'
});
module.exports.hello = event => {
if (event.action == 'test') {
finish(test());
}
};
function finish (body) {
if (body) {
console.log(body);
return {
statusCode: 200,
body: body
};
}
console.log('No Action');
return {
statusCode: 500,
body: 'NoAction'
};
};
function test () {
tweet_client.get('statuses/home_timeline', {})
.then((tweets) => {
console.log(tweets);
return tweets;
})
.catch((error) => {
console.log(error);
return error;
})
};
function名をhelloから変えたい場合はserverless.ymlも合わせて修正してください
serverless.ymlを修正することでデプロイ先のリージョンなどを変更することもできます
Lambda
デプロイ
serverless deploy -v
デプロイしたfunctionの実行
serverless invoke --function hello -p event.json --log
不必要になったら消すようのコマンド
serverless remove -v
以上です。
所感
Node.jsで複雑なTwitterAPI取得のソースコードは向いてないのかなと思いました。
TwitterAPIで取得するところが非同期処理になるため、await/async地獄になってしまいました。
例えば、APIを使ってリストの一覧を取得してきて、そのデータを使用してリストのメンバーを取得するみたいな処理を書こうとするだけで結構めんどくさかったです。
だったらPythonで書けばよくね!?と思ったので、次はPythonで試してみます。
また、そちらも記事にしていこうと思います。