twitter - 41semicolon/41semicolon.github.io GitHub Wiki

1.事前準備

ライブラリの選択: Nodeなら ttezel/twit でよさそう(DMの仕様等が2018年に変わったので古いライブラリは使えないことがある)。以下のコマンドでインストール: npm i twit

4つのIDとパスワード: Twitterの開発者サイトに登録して、アプリを登録して、UI上で4つの情報 (consumer_key/consumer_secret/access_token/access_token_secret) をゲットしておき、JSONファイルとして保存(後ろの二つは自分専用のトークン。WebUIから自分の分だけは簡単に作れる)。

$ cat twitterSecret.json
{
  "consumer_key": "Y**************5",
  "consumer_secret": "v*****************************k",
  "access_token": "9*************************************A",
  "access_token_secret": "U*********************************E"
}

アプリのパーミッション: UI上で、パーミッションを変更してDMを送れるようにアプリの設定変更をする。

2.ボット作成

自分のIDを知る: DMを送るためには、相手のIDが必要。このボットは私にDMを送るようにするつもりなので、私のIDを知る必要がある。スクリーンネーム(@から始まるID)からIDを引っ張るには以下のスクリプトを使った:

const Twit = require('twit');
const cred = require('./twitterSecret.json');
const client = new Twit(cred);
client.get('users/show', { screen_name: '41semicolon' }).then(r => console.log(r.data))

色々出てくるが id_str フィールドの数字が私のIDのようだ(注: id フィールドではない)。つまり 978090946972692480 が私のIDということになる。

DMを送る: 渡すパラメータは DM送信のAPIドキュメント を参考にした

const Twit = require('twit');
const cred = require('./twitterSecret.json');
const client = new Twit(cred);

async function sendDM (name, msg) {
  const r = await client.get('users/show', { screen_name: name.replace('@', '') });
  // console.log(r.data.id_str);
  return client.post(
    'direct_messages/events/new',
    { event: { type: 'message_create', message_create: { target: { recipient_id: r.data.id_str }, message_data: { text: msg } } } },
  );
}

sendDM('@41semicolon', 'xxxxy').then(() => console.log('ok'));