見出し画像

[翻訳]たった17行のコードでTwitterのbotを作る方法

↓↓↓Thanks Omar Sinan!! ↓↓↓オマー・スィナンさんの元記事はこちら↓↓↓


以下本編('ω')ノ


数か月前、「特定のユーザのリストからなんでもRTする」Twitterのbotを製作しました。で、実は、それがたったの17行のコードで出来たんです。これを記事にしようと思ったきっかけは、botを自分で作ろうと思ったときに、オンラインサービスだと安いツールでも15ドルはするのっておかしくない?と思ってるからです。じゃあ付いてきてくださいね。


以下が、botを作るのに使うものたちです。

・Node.js —  こちらでインストールしてください。
・twit — 上記のNode用のTwitter API クライアントです。

なんと基本的にこの2つだけです!


◆アプリを作るぞ◆

まずコードを書き出す前に、Twitterアプリの設定をしておきましょう。以下のURLから設定できます。

 https://apps.twitter.com/

“Create New App”ボタンを押下すると、下記の画面に遷移します。


空欄を埋めてください。ウェブサイトをお持ちでなければ、 “Website”の欄には https://www.example.com とご入力ください。
"Create your twitter application"を押下後、“Keys and Access Tokens”のタブに以下4つを入れます(重要):

・Consumer Key
・Consumer Secret
・Access Token Key
・Access Token Secret


 “Access Token Key”や “Access Token Secret” が見当たらない場合は、“Create my access token” ボタンを押してください。


◆プロジェクトの初期化◆

Twitter botの新しいディレクトリ用に、コマンドプロンプトまたはターミナルやドライブを開いたらコマンド実行です。

npm init

次に正しい依存関係をインストールする必要があります。今回の場合は以下のひとつだけですので実行しましょう。

npm install twit --save

そうしたら、 index.js というファイルを作ります。

<注意> 「npm init」を実行するときにエントリーポイントを変更した場合は、package.jsonの中身と対応したファイル名にしましょう。何も変更を加えていなければ、index.jsでOKです。


◆お楽しみのコーディングです◆

お好きなテキストエディタを開き、TwitterのAPIに対してリクエストを送るTwit instanceを作ります。

var Twit = require('twit')
var T = new Twit({
   consumer_key:         ' ... ',
   consumer_secret:      ' ... ',
   access_token:         ' ... ',
   access_token_secret:  ' ... ',
})

keyたちの中身は ' ... ' にしておきましょう。

次に、RTしたいユーザのIDをstringで持つarrayを作ります。(以下のコードスニペットに入れたIDは変更可です)

var users = ["10228272", "155659213", "783214"];

そうしたら、T.stream(パス, [引数])を使いましょう。

var stream = T.stream('statuses/filter', {follow: users});

2つ目の引数ですが、キーに"follow"、値が有効な”users”でなくてはいけませんので注意しましょう。

stream.on('tweet', function (tweet) {   
  if (users.indexOf(tweet.user.id_str) > -1) {
       console.log(tweet.user.name + ": " + tweet.text);
       T.post('statuses/retweet/:id', { id: tweet.id_str }, function (err, data, response) {
           console.log(data)
       })
   }
})

↑の機能は、streamの中に(tweet)が渡されるたび動くものです。

2行目のifが、「今ツイートしたユーザのIDが"users"のarrayに入っているか」を確認するのに大事になってきます。

4行目は基本的にtweet.id_strのIDでされたツイートをRTするときに使うやつです。tweetオブジェクトがもつほかのプロパティを確認するには、こちらのURLをチェック!

◆botを動かしてみよう!◆

これで基本的には完了です。たった17行でbotを作れました!動かすには、コマンドプロンプトかターミナルで以下を実行するだけです。

node index.js

◆今後のアップデートに関して◆

botをHerokuにデプロイする方法とかも投稿したいですね。(ローカルで休みなしに動かさなくてもいいやつ)


◆最終的な全体コード◆


var Twit = require('twit')
var T = new Twit({
   consumer_key:         ' ... ',
   consumer_secret:      ' ... ',
   access_token:         ' ... ',
   access_token_secret:  ' ... ',
})
var users = ["10228272", "155659213", "783214"];
var stream = T.stream('statuses/filter', {follow: users});
stream.on('tweet', function (tweet) {
   if (users.indexOf(tweet.user.id_str) > -1) {
       console.log(tweet.user.name + ": " + tweet.text);
       T.post('statuses/retweet/:id', { id: tweet.id_str }, function (err, data, response) {
           console.log(data)
       })
   }
})


以上です!('ω')ノ


この記事が気に入ったらサポートをしてみませんか?