United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

ラズパイとNode-REDでTweetBotを作ってみる

このプロジェクトでは、Raspberry PiとNode-REDを使用して、独自のTwitterボットを作成する方法を解説します。

部品リスト

Qty Product 品番
1 OKdo Raspberry Pi 4 B スターターキット 4 GB 202-0644

Twitterボット(自動ツイートとも)は、スパムに利用されることから、悪いイメージで語られる事も多いですが、中には有用なものも存在します。もちろん、Twitterは便利で、実用的なボットを作るよう奨励しています。たとえば、私は@UKmfgを使って、#UKmfgに関するツイートや、イギリスにおける製造業についてのツイートを自動的にリツイートしています。このボットを運営するにあたり、悪口や、乗っ取られたハッシュタグが自動的にリツイートされないようにするために、いくつかの対策を講じる必要がありました。

Twitterの自動化に関するルールについては、こちらをご覧ください。@AndyPiperさん、 ボットを機能させるために協力していただき、本当にありがとうございました!

このプロジェクトでは、Raspberry PiとNode-REDソフトウェアを使用して、Twitterボットを作成する方法を解説します。

以前は非常に簡単に作成できましたが、現在は、多くの乗り越えるべき壁があります。

注: これは2020年11月17日の時点で機能していますが、Twitterの更新により動作しなくなる可能性があります。

準備 その1

1) Twitterで開発者アカウントを取得し、キーとトークンを見つけます。

手順とその他情報はこちらから: https://developer.twitter.com/en/apply-for-access

注: 必要な開発者アカウントは1つだけです。アカウントに適切な権限がある限り、これを使用してキーとトークンを取得し、別のアカウントからツイートすることができます。

2) 開発者ポータルに移動します: https://developer.twitter.com/en/portal/dashboard 

アプリを追加し([概要(overview)]タブの下部)、APIキー、APIシークレットキー、Bearerトークンを安全な場所に保管します。手で書き写さず、コピーして貼り付けましょう。

次に、ページの下部にある[アプリの設定(App Settings)]をクリックします。

3) 以下を設定します。

  - アプリの許可(App permissions): 読み書き(Read and write)

  - 3者間のOAuth (3-legged OAuth)を有効にする

  - コールバックURL: 任意のWebサイトアドレス(私はhttps://twitter.comを使用しています)

  - ウェブサイトのURL: 任意のウェブサイト(同じく、https://twitter.com

4) キーとトークン

ページの上部にある[キーとトークン(Keys and Tokens)]タブをクリックします。

APIキーやAPI秘密鍵、Bearerトークンは 手順2) で既に保存されているはずです。

「アクセストークンとシークレット(Access Token and Secret)」を生成し、安全な場所にコピーします。

「Twitter開発者アカウント」からツイートしたいときに必要なのが、これらのキーとトークンです。ただし、別のアカウントからツイートする場合は、次の段階を経る必要があります。

[注:GOを使用してこれらのキーを取得することもできます。(詳細はこちら: https://github.com/smaeda-ks/tw-oob-oauth-cli)]

これをPi上で行う必要はありませんが、Piを使用する場合、最初に以下のコマンドを使用して、RubyGemsをインストールする必要があります。

sudo apt install ruby-full

詳細はこちら: https://www.raspberrypi.org/documentation/linux/software/ruby.md 

次に、以下のコマンドを使用してTwurlをインストールします。

sudo gem install twurl

情報はここにあります: https://developer.twitter.com/en/docs/tutorials/using-twurl

次に、以下のコマンドを入力します。

twurl authorize --consumer-key ABC123 --consumer-secret ZYX789

「ABC123」は以前に保存したAPIキーです。(なぜ別の名前になっているのかわかりませんが。)

そして、「ZYX789」はAPI秘密鍵です。

画面の指示に従い、https://api.twitter などの、リストアップされているWebサイトにアクセスします。 (Twitterからログアウトしているか、または、ツイートしたいアカウントにログインしているかを確認してください)。その後、提供されたPINをターミナルに入力します。

お疲れさまでした。これで、アクセスキーとトークンが生成されました。ただ、これからそれらを見つけないといけないんですが...

5) キーとトークンを見つけよう!

次に、.twurlrcファイルを見つける必要があります。

「. files」は非表示のファイルになっているため、Piで非表示のファイルを表示する設定に変更する必要があります。この設定項目は、ファイルマネージャーの[表示]タブにあり、[非表示を表示]にチェックマークを付けることで変更可能です。

.twurlrcファイルはpiディレクトリにあります。

Macではhome/USERディレクトリに、PCではc:Users\USERNAME\APPData\Local\ディレクトリにあるはずです。

ファイルを開くと、consumer_keyとconsumer_secretがあります。それらをコピーして安全な場所に貼り付けます。

準備 その2

1) 最新のRaspberry PiオペレーティングシステムをPiにインストール

詳細はこちら: https://www.raspberrypi.org/software/

画面の指示に従って、セットアップを完了します。(このプロジェクトでは、Raspberry Pi 4とRaspbian Pi OS(32ビット)2020-08-20を使用しています。)

2) Node-REDのインストール

注: Piメニューの「推奨プログラム(RECOMMENDED PROGRAMS)」を使用し、インストールしないでください。代わりに、 https://nodered.org/docs/getting-started/raspberrypiの「Piで実行(Running on a Pi)」セクションに移動して、そこの指示に従ってください(次のコマンドを使用してください)。

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

そして、Piノードのインストールにて、「はい(Yes)」を選択します。

しばらくの間待ちます。

インストールが完了したら、次のコマンドを実行しましょう。

sudo systemctl enable nodered.service

これにより、Piが起動するたびにNode-REDが自動的に起動します。

次に、ブラウザに移動してlocalhost:1880と入力し、Node-REDにアクセスします。

3) TwitterノードをNode-REDにインストール

シートの右上にあるハンバーガーメニュー(3本の水平線)をクリックします。

Screenshot_2020-11-17_at_12.14_.35__7f492dc6746a9fa3603967f5e1907a79a7925d8e.png

[パレットの管理(Manage Palette)]を選択し、[インストール(Install)]タブをクリックします。

「node-red-node-twitter」を検索し、「インストール(install)」をクリックします。

Screenshot_2020-11-17_at_12.16_.17__92ef19d1dbbb544c7a86399b215131ceb6bbdd45.png

Twitterの入力ノードと出力ノードは、「ソーシャル(Social)」領域の左側の列に表示されます。

Screenshot_2020-11-17_at_12.12_.49__079c36e5c477b20a05a98960e344acd2a35b8c09.png

フローの作成

injectノードをtwitter outノードに接続します。

Screenshot_2020-11-17_at_12.12_.40__eca0ef91a0f30be649d32e30deb40511f7a98199.png

Injectノード「msg.payload」を 「HelloWorld」に変更し、Twitterの出力ノードをダブルクリックします。

次に、「新しいTwitter資格情報を追加... (add new twitter-credentials ...)」の横にあるペンのアイコンをクリックします。

以下のプロパティを完成させます。

  - Twitter ID: TwitterツイートしたいTwitterアカウント

  - APIキー(API Key):.twurlファイルのconsumer_key

  - API秘密鍵(API Secret Key):consumer_secret

  - アクセストークン(Access Token):.twurlファイルのトークン

  - アクセストークンシークレット(Access Token secret):.twurlファイルのシークレット

保存し、デプロイしましょう!

次に、挿入ノードをクリックすると、ツイートが公開されます。

(同じツイートを再度投稿することはできないので、テスト目的であれば、タイムスタンプを入力するとわかりやすいかもしれませんね!)

Screenshot_2020-11-17_at_12.10_.00__d3e417a71b74bc10aef7cba0591e212c03a95e05.png

これで、Injectノードが機能するようになりました。また、任意のフローでTwitterノードを使用するための基礎となる部分が完成しました。設定は、Twitter入力ノードでも同様です。

では、楽しいツイートを!

I am an inventor, engineer, writer and presenter. Other stuff: Royal Academy of Engineering Visiting Professor of Engineering: Creativity and Communication at Brunel University London; Fellow of the Institution of Mechanical Engineers and have a PhD in bubbles; Judge on BBC Robot Wars.