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