Node.jsでTwitter APIを使うときはTwitterを使うのが多い気がするのですがサンプルだとasync/awaitやPromiseの例が無さそうだったので調べたらできたのでメモしておきます。(タイトルの表現が不安)
Node.js 8: util.promisify() この辺を使うかと思いきや使わずにできました。
通常だとコールバック地獄になっていく
なんでもいいんですけど、例として今回は ツイートを検索(search/tweets)をして、その内容を自分のツイートとしてパクツイする機能を作ります。
通常だと search/tweets
のメソッドを呼んだあとのコールバックでstatuses/update
を呼び出してその中のコールバックで結果を見ます。
app.js
'use strict';
const twitter = require('twitter');
const client = new twitter({
consumer_key: '', // consumer keyを記入
consumer_secret : '', // consumer secretを記入
access_token_key : '', // access tokenを記入
access_token_secret : '' // access token secretを記入
});
client.get('search/tweets', {q: 'node.js'}, (error, tweets, response) => {
const text = tweets.statuses[0].text; //検索して引っかかった1件目のツイート本文
client.post('statuses/update', {status: text}, (error, tw) => { //パクツイ
if (error) {
console.log(error);
return;
}
console.log(`id: ${tw.id}, text: ${tw.text}`);
});
});
async/awaitで書くとスッキリ
この辺をみると内部ではrequestモジュールを使ってるみたいで、requestモジュールがPromise対応しているみたいなのでasync/awaitが使えました。
app.js
'use strict';
const twitter = require('twitter');
const client = new twitter({
consumer_key: '', // consumer keyを記入
consumer_secret : '', // consumer secretを記入
access_token_key : '', // access tokenを記入
access_token_secret : '' // access token secretを記入
});
//async/awaitで表現
const main = async () => {
const tweets = await client.get('search/tweets', {q: 'node.js'});
const text = tweets.statuses[0].text; //検索して引っかかった1件目のツイート本文
const res = await client.post('statuses/update', {status: text}); //パクツイ
}
main();