slackにyoutubeのチャンネル登録者数やtwitterのフォロワー数を通知する
2019-02-10
趣味のVのやつでslackにyoutubeのチャンネル登録者数とかtwitterのフォロワー数やらを通知するやつを実装したのでメモ。
今回はNode.js + AWS Lambda + slack Incoming Webhookを使って実装。AWSアカウントはLambdaでバッチスクリプトを実行させるだけになってきたな…。
Youtubeのチャンネル登録者数、総再生回数を通知
APIキー取得
こちらを参照してAPIキーを取得する
slack Incoming webhookからエンドポイントを取得
ここにYoutube, TwitterのAPIから取得した数値をPOSTしてやる
参考にしました
チャンネル登録者数を取得しslackに通知
GET https://www.googleapis.com/youtube/v3/channels で取得する
ドキュメント⇒ https://developers.google.com/youtube/v3/docs/channels/list
チャンネルの統計情報が欲しかったのでpartには statistics を指定
const request = require('request')
module.exports.handler = () => {
const options = {
method: 'GET',
url: 'https://www.googleapis.com/youtube/v3/channels',
qs: {
part: 'statistics',
id: 'XXXXXXXXXXXXXXXXXX',
key: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
}
}
// 上記設定値でyoutubeからチャンネル登録者数、総再生回数を取得
request(options, function (error, response, body) {
if (error) throw new Error(error)
const data = JSON.parse(body)
const subscriberCount = data.items[0].statistics.subscriberCount
const viewCount = data.items[0].statistics.viewCount
// slackに通知
request.post({
uri: 'https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXX',
headers: { 'Content-Type': 'application/json' },
json: {
text: `チャンネル登録者数: ${subscriberCount}人\n総再生回数: ${viewCount}回`
}
}, function(error, response, body) {
if (!error && response.statusCode === 200) {
console.log(body)
} else {
console.log('error')
}
})
})
}
いつも自分はこういう時Postmanから好きな言語のソースコードを出力している。
Node.jsだとrequestモジュール使うのがおすすめ
https://learning.getpostman.com/docs/postman/sending_api_requests/generate_code_snippets/
後はAWS Lambdaの関数として配置して毎日実行されるようにCloud Watch eventをトリガーとして設定すればOK
Twitterのフォロワー数を通知
TwitterのAPIキーを取得
参考にしました
フォロワー数を取得しslackに通知
楽そうだったのでtwitterのライブラリを使用した
GET /users/show でTwitterのscreen_nameから情報を取得する
https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-show.html
const Twitter = require('twitter')
const request = require('request')
module.exports.handler = () => {
const client = new Twitter({
consumer_key: '最近',
consumer_secret: '趣味で',
access_token_key: 'Vtuber作ってるので',
access_token_secret: '動画編集できるようになってきた'
})
const params = { screen_name: 'realDonaldTrump' }
client.get('users/show', params, (error, user) => {
if (!error) {
// slackに通知
request.post({
uri: 'https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXX',
headers: { 'Content-Type': 'application/json' },
json: {
text: `${user.name}(${user.screen_name})のフォロワー数は${user.followers_count}人です`
}
}, function(error, response, body){
if (!error && response.statusCode === 200) {
console.log(body)
} else {
console.log('error')
}
})
}
})
}