はじめに
ここ数日生活リズムが不規則になってきて、推しの配信を見逃すことがあったので見逃し寝過ごし防止に手元のデバイスに通知するようにしてみた。どこでやってることも結構単純なんだけどそれぞれでのデータ送受信で詰まることが多かった感じ。 雑だけど多分ちょっとやらなかったら忘れちゃいそうなので忘備録ってことで全体のイメージ
↓みたいになってる  Alexaは通知でのスピーカー兼各機能ON/OFFを切り替える用、GASがメインでバックエンドの処理、node-redはスキル側からいい感じにAlexaを喋らせられるものがなかったのでそれ用って感じ。スマートウォッチ(fitbit)はメールの通知で手元に通知遅れるようにした。(ここをスキルにしてスヌーズの仕方とかいじれたらより気づきやすくなるかなとは思う) あと、配信予定時刻にアラームを追加する機能もつけようと思ったけどうまく行ったかわかんないのでとりあえずパス。作り方
Alexa側
公式とかのサイトとかサンプル見ながら、node-jsで書いていけばまぁ大抵なんとかなった。 がっつり詰まったのがスプレッドシート書き換えたりスプレッドシートの値読み込んだりするためのGASとの連帯。なんか結構色々方法あったみたいだけど以下2つのサイト見ながらやってみた。 https://miyataro.hatenablog.com/entry/2018/05/03/Amazon_echo%E3%81%A8Google_Spreadsheet%E3%81%A7%E8%82%B2%E5%85%90%E8%A8%98%E9%8C%B2%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B コードはこんな感じ//諸々インポート
const Alexa = require('ask-sdk-core');
const {google} = require('googleapis');
const {OAuth2Client} = require('google-auth-library');
//認証情報
const scriptID = '******';
const auth = new OAuth2Client('*****','*****');
auth.setCredentials({
access_token:'******',
refresh_token:'********'
});
const script = google.script('v1');
//gas呼び出しを指定
const gas = (scam,array) => {
return new Promise((resolve, reject) => {
script.scripts.run({
auth: auth,
scriptId: scriptID,
requestBody: {
function: scam,
parameters: array,
devMode: true
}
}, (err, result) => {
if (err) {
console.log(err);
reject(new Error(err));
} else {
resolve(result);
}
});
});
}//以下省略
GAS側
こっちはほぼ詰まらなかった。youtube data api君もGASにはサービスとしてあるから認証情報の登録とかもせずにvar yotuberesults = YouTube.Search.list('id,snippet',{
channelId:'UCIBY1ollUsauvVi4hW4cumw',
order:'date'
});
none | アーカイブ済み |
---|---|
upcoming | 配信枠 |
live | 配信中 |
各機能のON/OFFとかはこんな感じでスプレッドシートに記載するようにしておく。
あとはGASの時間指定トリガーで指定して、スプレッドシートの機能状況に応じて動かしてあげれば大丈夫なんだけど、一個気にしなきゃいけないのがyoutube data apiくんの割当量。youtube data apiくんは各apiリクエストにコストが決まってて一日に10000コスト以上のリクエストは叩けないようになってる。searchリクエストは一回あたり100コスト食うので24時間回すことを考えると15分より短いスパンで叩くと一日中回しきれない。