🙆♀️
QiitaのOrganizationに記事を投稿すると自動でDiscordに通知させる
IFTTTを使用する方法もあるのですがこちらは有料になるので、今回はGoogleAppScriptを使用してこのプロセスを自動化します。
必要なもの
- Googleアカウント
- DiscordのWebhook URL
- QiitaのRSSフィード
RSSとは?
ニュースやブログなど各種のウェブサイトの更新情報を配信するための文書フォーマットの総称である。(参照)
要するに記事情報を取得するためのフォーマットだと思います。(間違っていたらすみません)
Webhookとは?
Webhookとは、Web アプリケーションやサービスなどの更新情報を他のアプリケーションへ特定のイベント等が発生した際にリアルタイムで HTTP プロトコルを使用して通知するシステム。
(参考)
Webhookを取得
- Discordを開く
- サーバー設定の連携サービスを開く
- 「新しいウェブフック」ボタンから作成しURLを取得する
RSSフィードを取得する
組織のURLの最後尾に「/activities.atom」を付けたものが組織のRSSフィードになります。
https://qiita.com/organizations/<組織名>/activities.atom
GoogleAppScriptの作成
手順1
GoogleDriveを開く。
手順2
新規をクリックし、その他から新しいGoogleAppScriptを作成します。
手順3
以下のコードを入力してください。
QiitaToDiscordNotifier.gs
const DISCORD_WEBHOOK_URL = 'Discordで取得したWebhookを入力';
const RSS_FEED_URL = 'RSSフィードを入力';
function checkQiitaFeed() {
try {
const response = UrlFetchApp.fetch(RSS_FEED_URL);
const xml = response.getContentText();
const document = XmlService.parse(xml);
const root = document.getRootElement();
Logger.log('Root element: ' + root.getName());
const namespace = XmlService.getNamespace('http://www.w3.org/2005/Atom');
const entries = root.getChildren('entry', namespace);
Logger.log('Number of entries: ' + entries.length);
const lastCheck = PropertiesService.getScriptProperties().getProperty('lastCheck');
const lastCheckDate = lastCheck ? new Date(lastCheck) : new Date(0);
entries.forEach(entry => {
const publishedDate = new Date(entry.getChild('published', namespace).getText());
if (publishedDate > lastCheckDate) {
const title = entry.getChild('title', namespace).getText();
const link = entry.getChild('link', namespace).getAttribute('href').getValue();
sendDiscordNotification(title, link);
}
});
PropertiesService.getScriptProperties().setProperty('lastCheck', new Date().toISOString());
} catch (e) {
Logger.log('Error fetching or parsing RSS feed: ' + e.message);
}
}
function sendDiscordNotification(title, link) {
try {
const payload = {
content: `新しいQiita記事が投稿されました: ${title} ${link}`
};
const options = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(payload)
};
UrlFetchApp.fetch(DISCORD_WEBHOOK_URL, options);
Logger.log(`Notification sent: ${title} - ${link}`);
} catch (e) {
Logger.log('Error sending Discord notification: ' + e.message);
}
}
手順4
トリガーを設定します。
左のタブからトリガーを選択し、
右下のトリガーを追加をクリックしてください。
開いたら以下のように設定してください。
チェックを行う時間間隔はお好みで設定してください。
終わり
これでスクリプトが定期的に実行され、Qiitaの組織に新しい記事が投稿されると自動的にDiscordに通知されるようになりました。
Discussion