n8nでTwitterの新着をDiscordに投稿
Twitterの新着をDiscordに通知したくなったので、n8nで作成したときのメモ。
前提
n8nは構築済みとする
Twitterのキー等は取得済みとする
ワークフロー
完成図。
まずは一個ずつ見ていこう。
Cron
このワークフローのトリガーはCronとして、大体よくあるゲームの公式Twitterであれば、15~30分に1回動かせばいいと思う。
*/15 * * * *
ここはそれだけで大丈夫。
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_atとid_strだけが必要。
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から投稿日を取得して、前回通知したものより新しければアウトプットするという形にしている。
ちなみにこれはもともとRSSの新着を取るようだったが、基本的にどれもこれで流用できそうだ。
Discord
ここは極めて簡単。
予めDiscordでWebhook URLを取得しておく。
Webhook URL
取得したWebhookのURL
Content
https://twitter.com/アカウントID/status/{{$json["id_str"]}}
Contentは今回ツイートのURLだけを共有したいので(Discordはembedがつくられるので)、こんな感じにしておく。
id_strがツイートのIDになるようだ。
おわりに
こんな感じでn8nを使えば簡単に最新ツイートをDiscordに送ることができる。
強いて言えば、Twitterのアクセスキーを取得したり、n8nをそもそも建てるのがだるいので、そこさえ突破してしまえば色々できるので、やって見る価値はあるかなと思う。
では、また。