Open4
エゴサした内容をSlack Workflowで通知させるbotを作る
こちらの記事を参考に、Slackワークフローでチャンネルにポストさせるところはすぐにできた
ChatGPTにこんな感じのコードを生成してもらった
動きそうに見えるけど、検索の部分はうまくいってないみたい
const SLACK_WEBHOOK_URL = 'https://hooks.slack.com/triggers/xxxxxxx/1111111111/xxxxxxxxxxxx';
function checkTweets() {
const endpoint = 'https://api.twitter.com/2/tweets/search/recent';
const query = {
query: 'テスト',
max_results: 10,
};
const options = {
method: 'GET',
headers: {
Authorization: `Bearer ${TWITTER_ACCESS_TOKEN}`,
},
muteHttpExceptions: true,
};
const response = UrlFetchApp.fetch(`${endpoint}?${new URLSearchParams(query)}`, options);
const tweets = JSON.parse(response.getContentText()).data || [];
tweets.forEach(tweet => {
sendToSlack(tweet.text, tweet.author_id);
});
}
function sendToSlack(text){
var payload = {
'text' : text,
};
var params = {
'method' : 'post',
'payload' : JSON.stringify(payload)
};
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, params);
}
https://docs.x.com/x-api/posts/recent-search?playground=open でTwiiter APIを試せるので試してみる。
検索APIはFreeプランだと15分に1回が上限みたい。
最終的にこれで動かした。
これだと過去7日分を検索する感じになるので、
1日分を毎日検索できるように改善する予定
const BEARER_TOKEN = 'xxxxxxxxxxxxxxx'
const SLACK_WEBHOOK_URL = 'https://hooks.slack.com/triggers/xxxxxxxxxxxxxx';
function searchAndNotify() {
var searchQuery = "テスト";
var twitterApiUrl = "https://api.twitter.com/2/tweets/search/recent?query=" + encodeURIComponent(searchQuery) + "&max_results=10";
var options = {
'method': 'get',
'headers': {
'Authorization': 'Bearer ' + BEARER_TOKEN,
},
"muteHttpExceptions" : true
};
try {
var response = UrlFetchApp.fetch(twitterApiUrl, options);
var json = JSON.parse(response.getContentText());
if (json.data && json.data.length > 0) {
json.data.forEach(function(tweet) {
var tweetId = tweet.id;
var tweetUser = tweet.author_id;
var tweetUrl = "https://x.com/" + tweetUser + "/status/" + tweetId;
// 個別のツイートURLをSlackに送信する
sendToSlack("検索ワード : " + searchQuery + "\n" + tweetUrl);
});
} else {
sendToSlack("検索ワード : " + searchQuery + "\n検索結果はありませんでした。");
}
} catch (error) {
sendToSlack("APIリクエストでエラーが発生しました: " + error.toString());
}
}
function sendToSlack(message) {
var payload = {
'text': message,
};
var params = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(payload)
};
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, params);
}
ログインするとコメントできます