6271366 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

GMの抵抗ワショーイ

2021.03.17
XML
カテゴリ:サーバ
Twitterのツイート内容をdiscordに連携する方法まとめにて「自分でサーバ構築したらいいのでは」という紹介をしたので、今回はその紹介を。

n8nとは

n8n公式
n8nはオープンソースのワークフロー自動化ツールです。
(オープンソース:ソースコードが公開されているもの。ライセンス次第では書き換えて公開できることも。)
何かの動作をトリガーにアクションが始まり、条件分岐などをしながら次のアクションを実行したい時に便利。
Twitter→Discord通知も連携してました。IF文やcronも叩けるので、かなり直感的に自在なプログラミングが可能。

また、作成したワークフローを公開することも可能。
ワークフロー一覧から見れたりもする。




構築してみた

docker使うかもしれないので、WSL2 (Windows Subsystem for Linux) 上で環境を立ててみる。
WSLをインストールするを参考に組み立ててみてください。デスクトップPC推奨。

Dockerを使う場合、Docker for Windowsもインストールする必要あり。
(これだけで1記事書けるので割愛。)
※今回はdocker使いません。



次に、nodeとnvm(Node Version Manager)をいれます。
nvmは複数のnodeバージョンをインストールして切り替えるのに便利。
WSL に nvm で Node.js 環境を構築するを参考にしつつ進めます。

> curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
> export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads
nvm bash_completion

> source ~/.nvm/nvm.sh

> echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
> echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
> echo 'eval "$(pyenv init -)"' >> ~/.bashrc
> source ~/.bashrc


※最後にsourceコマンドでnvmの設定を反映しないとnvmが認識されないことも。
※WSL再起動

.bashrcを再起動しても正常にnvmが動いてないことがあるかも。
nvmコマンドが使えるようになったら「nvm install 14」->「nvm use 14」などで最新のnodeをいれてあげます。



後は以下コマンドを打ってn8nをインストール。
(ここに至るまでが結構長い)



流れで構築するとnodeのバージョンが切り替わっていないかも。
最新のnodeに切り替えてあげてください。
例)nvm use v14.17.1


nodeがインストールできたら後はサーバを起動するだけ。



ここまできたらn8nサーバは起動成功。
oキー押すか、http://localhost:5678にアクセス。


ワークフローを組み立てていきます。



Twitter OAuth周りの設定がちょっと面倒。
Credential Nameは任意で大丈夫そうなのですが、callbackURLはTwitter開発側に設定する。

以下を追記
http://127.0.0.1:5678/rest/oauth1-credential/callback
ついでにConsumer KeyとSecretも持ってきちゃいたい。

DiscordのWebhookを取得->送信の流れはIFTTTと同じですが、パラメタの設定周りが特殊。



といっても、左から選んで選択していくだけ。



出来上がったら定期実行して完成。
PCがついてる間は動くはず。
後はこれをAWS環境などでも実行できるようにすればクラウド上での実行に成功です!

やっつけで色々と試行錯誤しながらの作業だったので、もっと整理していいもの公開できるようになりたい。



トラブルシュート

Twitter周りの設定を行うときが一番デバッグしたいタイミング。
しかし、何度もTwitterAPIをたたくと、429 Too many Requestsエラーが発生することも。
(リクエスト多すぎてAPI制限かかったエラー)
15分に10回とか叩くとアウトらしい。

また、Twitter側にもcallbackURLを指定しないとPOST時に415エラーが返ってくる。
エラー例↓
Desktop applications only support the oauth_callback value 'oob'


TwitterAPIのcallback URLは今ではlocalhostや適当なURLもダメ(2018以降変わったっぽい)なので、以下を指定しよう。

http://127.0.0.1:5678/rest/oauth1-credential/callback

※[参考]TwitterのOAuthでCallbackさせるときの注意点
※[参考]ツイッター(n8n)





コードから書きたい場合

pythonならtweepyを使う。
Twitter の特定ユーザーのツイートを取得を参考に。
ただ、トリガ部分の実装をどうやるのかは自分も知らない。
トリガ部分が上手く実装できず、挫折。
あとWSL2上だとデフォルトではpythonコマンドでpython2.7が対象になり、python3やpip3を使うのも使い勝手が悪く面倒だったりする。(※できなくはない)

nodeであればn8nがどういうロジックで動かしてるか読んで理解するのが速いかも。
n8n/tree/master/packages/nodes-base/nodes/Twitter辺りのソースがTwitter周りのロジックなので、参考にしていただけると。






その他

前回の記事では紹介しませんでしたが。
目的が「特定のユーザがツイートした内容を公式アプリ以外で通知したい!」だけでしたらTwitter -> slack通知がおすすめ


ただし、slackの無料プランの場合メッセージ保存数・量に制限があるので注意。
Slack フリープランでのメッセージ、ファイルやアプリの制限(slack公式)によると


メッセージの表示
閲覧と検索の範囲が、直近のメッセージ 10,000 件までに制限されます。
ファイルストレージ
ワークスペースに最大 5 GB のファイルを追加できます。
アプリ
インストールできるサードパーティ製アプリやカスタムアプリは最大 10 個です。


ツイート量多い人のを拾ってくる場合でもAPI制限を考えると月1ぐらいでアーカイブとれば大丈夫。
ワークスペースのデータをエクスポートする(slack公式)

slack普段から使わない人は通知設定で音もカスタマイズできる。
Slack 通知を設定する
時間を0:00-真夜中指定+音指定がおすすめ。
音をカスタマイズできるので、他用途でslack使ってないなら通知周り徹底してカスタマイズするのも手じゃないかな。

slack -> discordへと通知できる方法があれば完璧だけど、それはまた別の機会に。

(たまに公式Twitterの通知遅れることあるからね)
(データ集計とりたい!ってなったらツイートのURLだけでも全アーカイブとってそこから色々解析かなぁ)
プログラミングいやだ!!!って人はこの方法試してみてください。





参考
無料でIFTTTやZapierっぽく全自動連携できる「n8n」を自サーバー上に構築してみた

IFTTTやZapierのようなワークフロー自動化OSSのn8nをECS on Fargate上に建ててみた

n8nを使って、DiscordチャンネルへRSSを通知させる

IFTTTやZapierのようなサービスを自前で構築して使用できるオープンソースn8n

第607回 n8nでWebサービスを繋いだワークフローを自動化する





PythonとAWSでサーバレスアプリケーションを開発したい人に。
これ読んでみたさある。







Last updated  2021.06.27 19:36:33
コメント(0) | コメントを書く
[サーバ] カテゴリの最新記事



© Rakuten Group, Inc.