n8nでTwitterの新着をDiscordに投稿

作成日時
Aug 24, 2022 09:17 AM
更新日時
Last updated March 6, 2023
タグ
n8n
Twitterの新着をDiscordに通知したくなったので、n8nで作成したときのメモ。

前提

n8nは構築済みとする
Twitterのキー等は取得済みとする

ワークフロー

完成図。
notion image
 
まずは一個ずつ見ていこう。

Cron

このワークフローのトリガーはCronとして、大体よくあるゲームの公式Twitterであれば、15~30分に1回動かせばいいと思う。
*/15 * * * *
ここはそれだけで大丈夫。

Twitter

Twitterは事前にCredentialを作成しておく必要があるが、ここでも作れる。
なお、作成の際にコールバックURLが必要だったりするので注意。
 
Resource
Tweet
Operation
Search
Search Text
from:アカウントID -RT exclude:replies
Limit
5
Additional Fields
Compatibility
 
とりあえずこのような設定でいいと思う。
新着を見るにはSearchAPIを使う。
検索クエリは大体この設定にしておけば、RTやリプライが含まれない純粋な投稿が取れるはず・・・。
今回は使わないが、画像とかツイートの全文がほしいときはAdditional FieldsをExtendedにすると取得できる。
 
ちなみに今回はレスポンスに含まれる、created_atid_strだけが必要。
notion image

Function

n8nでは最新のやつだけを通知みたいな機能がないので、自身でやる必要がある。
const staticData = getWorkflowStaticData('global'); var pushitem= []; if (staticData.lastData === undefined) { lastUnixDate = Date.parse('01 Jan 1970 00:00:00 GMT'); } else { lastUnixDate = Date.parse(staticData.lastData); } items.reverse().forEach((val, index) => { currentDate = val.json.created_at; currentUnixDate = Date.parse(currentDate); if (lastUnixDate < currentUnixDate) {   staticData.lastData = currentDate; pushitem.push(val); } }); return pushitem;
昔どこかから拝借したものだが、これでcreate_atから投稿日を取得して、前回通知したものより新しければアウトプットするという形にしている。

Discord

ここは極めて簡単。
予めDiscordでWebhook URLを取得しておく。
 
Webhook URL
取得したWebhookのURL
Content
https://twitter.com/アカウント名/status/{{$json["id_str"]}}
 
Contentは今回ツイートのURLだけを共有したいので(Discordはembedがつくられるので)、こんな感じにしておく。
id_strがツイートのIDになるようだ。

おわりに

こんな感じでn8nを使えば簡単に最新ツイートをDiscordに送ることができる。
 
強いて言えば、Twitterのアクセスキーを取得したり、n8nをそもそも建てるのがだるいので、そこさえ突破してしまえば色々できるので、やって見る価値はあるかなと思う。
 
では、また。