Posted at

Node.jsでのTwitter投稿をasync/awaitで書く

More than 1 year has passed since last update.

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();