[Node.js] Twitterにテキスト/画像を送信

ポイント

あまりサンプルコードで見かけない部分

・複数画像ある場合、ファイルパスのarrayを渡すことで1ツイートに統合
・reply_idを設定することでスレッド化


動作確認環境

・Mac OS X(10.14 Mojave)
・Node.js v8.8.0
・npm v5.5.1
・twitter v1.7.1


コード

例外処理ちゃんとしてない(考えてない)ので実運用時には各自で考慮してください。

const fs = require('fs');
const tw = require('twitter');

class Twitter {
  constructor (consumer_key, consumer_secret, access_token, access_token_secret) {
    this.client = new tw({
      consumer_key: consumer_key,
      consumer_secret: consumer_secret,
      access_token_key: access_token,
      access_token_secret: access_token_secret,
    });
  }

  async send (message, fileNames=[], reply_id="") {
    let media_ids = "";
    for (let fileName of fileNames) {
      let f = fs.createReadStream(fileName);
      let file = {media: f};
      let r_media = await this.client.post('media/upload', file);
      media_ids += r_media.media_id_string + ",";
      f.close();
    }

    let r = await this.client.post('statuses/update', {status: message, media_ids: media_ids, in_reply_to_status_id: reply_id});
    return r;
  }
}


使用例1

自己リプ(スレッド)にしない場合。

const TWITTER_CONSUMER_KEY = "YourConsumerKey";
const TWITTER_CONSUMER_SECRET = "YourConsumerSecret";
const TWITTER_ACCESS_TOKEN = "YourAccessToken";
const TWITTER_ACCESS_TOKEN_SECRET = "YourAccessTokenSecret";

let twitter = new Twitter(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_TOKEN_SECRET);

twitter.send("test1");
twitter.send("test2", ["1.png"]);
twitter.send("test3", ["1.png", "2.png"]);


使用例2

自己リプ(スレッド)にする場合。Node.jsではトップレベルでのawaitが使用できないため、tweetごとにawaitさせるasync funcを作って呼んでいる。

const TWITTER_CONSUMER_KEY = "YourConsumerKey";
const TWITTER_CONSUMER_SECRET = "YourConsumerSecret";
const TWITTER_ACCESS_TOKEN = "YourAccessToken";
const TWITTER_ACCESS_TOKEN_SECRET = "YourAccessTokenSecret";

let twitter = new Twitter(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_TOKEN_SECRET);

async function tweet (){
  let r;
  r = await twitter.send("test1");
  r = await twitter.send("test2", ["1.png"], r.id_str);
  r = await twitter.send("test3", ["1.png", "2.png"], r.id_str);
}

tweet();


注意事項

sleep噛ませる時は、↓のツイートを参考にしてください


参考サイト


おわりに

有料(¥100)にしてるけど、これで内容は全部です。募金してくれる人がいれば、ジュース代としていただけると嬉しい。コードは、インデントくずれが起きたりするようなので、コピペ時には注意してください。


マガジン


コメント用


干し芋


ここから先は

0字

¥ 100

サポート頂けると励みになります BTC,BCH: 39kcicufyycWVf8gcGxgsFn2B8Nd7reNUA LTC: LUFGHgdx1qqashDw4WxDcSYQPzd9w9f3iL MONA: MJXExiB7T7FFXKYf9SLqykrtGYDFn3gnaM