2019/02/10
趣味のVのやつでslackにyoutubeのチャンネル登録者数とかtwitterのフォロワー数やらを通知するやつを実装したのでメモ。
今回はNode.js + AWS Lambda + slack Incoming Webhookを使って実装。AWSアカウントはLambdaでバッチスクリプトを実行させるだけになってきたな…。
こちらを参照してAPIキーを取得する
ここにYoutube, TwitterのAPIから取得した数値をPOSTしてやる
参考にしました
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のライブラリを使用した
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') } }) } }) }