IFTTTのレシピの節約方法（１つのレシピでPCの音楽、Youtube音楽、youtube動画を操作）

# はじめに
[「WSLのUbuntuでPC内の音楽データをGoogleHomeで操作する」](https://qiita.com/kobbeko/items/04954bc47e407c07d9e7)
[「WSLのUbuntuでyoutube音楽をGoogleHomeで操作する」](https://qiita.com/kobbeko/items/db08ac856d9051fd4812)
[「WSLのUbuntuでyoutube動画をGoogleHomeで操作する」](https://qiita.com/kobbeko/items/d7ee4359af5397e342f5)
を１つのIFTTTのレシピで操作する方法です。
IFTTTが有料になり、IFTTTのレシピ数を節約するのが目的です。
●GoogleHomeで下記の音声入力を行う。
音楽　あいみょん：PC内の音楽ファイルを再生する
音楽　YT　あいみょん：youtubeの音楽を再生する
音楽　動画　あいみょん：youtubeの動画を再生する
音楽がIFTTTのトリガーコマンドです。
その後の入力文字にYT、動画があった場合、プログラムで処理を分けています。

# プログラム(node.js)
●firebaseとyoutubeのKeyは自分のKeyに置き換えてください

``` javascript
    var firebase = require("firebase");
    var iconv = require('iconv-lite');

    //firebase config
    var config = {
        apiKey: "XXXXXXXXXXXXXXXXXXXXXXXX",
        authDomain: "XXXXXXXXXX.firebaseapp.com",
        databaseURL: "https://XXXXXXXX.firebaseio.com",
        projectId: "XXXXXXXX",
        storageBucket: "XXXXXXXX.appspot.com",
        messagingSenderId: "XXXXXXXXXXXX"
    };

    firebase.initializeApp(config);

    const Youtube = require('youtube-node');
    const youtube = new Youtube();
    youtube.setKey('XXXXXXXXXXXXXXXXXXXXXXXXXX');

    //jsonからvalueに一致する値取得
    const getJsonData = (value, json) => {
      for (var word in json)  if (value == word) return json[word]
      return json["default"]
    }

    //database更新時
    const path = "/googlehome"
    const key = "word"
    const db = firebase.database()
    db.ref(path).on("value", function(changedSnapshot) {
    //値取得
    let value = changedSnapshot.child(key).val()
    if (!value) return
    console.log(value)
    var keyword = value.replace(/ /g,"");
    const keyword2 = value.split(" ");

    flag=0;
    if(keyword2[0] === "動画") {
      flag=1;
      console.log("動画を再生します");
      var keyword = keyword.replace("動画","");
    }
    if(keyword2[0] === "YT") {
      flag=2;
      console.log("youtubeを再生します");
      var keyword = keyword.replace("YT","");
    }

    //コマンド
    const STOP = "killall mplayer mpv";

    if(keyword === "停止"){
      command = STOP
    } else if(keyword === "止め て"){
      command = STOP
    } else {
      command = "未定義"
    }
    console.log(command)

    //コマンド実行
    var exec = require('child_process').exec;
    exec(STOP);

    if(command === '未定義' && flag==1) {
      var exec = require('child_process').exec;
      exec(STOP);
      play_youtube(keyword);
    }
    if(command === '未定義' && flag==2) {
      var exec = require('child_process').exec;
      exec(STOP);
      command = "mpv --no-video --ytdl-format=bestaudio ytdl://ytsearch10:"
      var exec = require('child_process').exec;
      exec(command.concat(keyword),(err, stdout, stderr) => {
        if (err) {
          console.log(`stderr: ${stderr}`)
          return
        }
        console.log(`stdout: ${stdout}`)
      }
      )
      console.log(command.concat(keyword));
    }
    if(command === "未定義" && flag==0) {
      var exec = require('child_process').exec;
      exec(STOP);
      command = 'cat /mnt/j/music/htdocs/music/list.txt | grep "'  + keyword + '"';
      var exec = require('child_process').exec;
      exec(command, {maxBuffer: 40000*1024}, function(error, stdout, stderr) {
        if (error !== null) {
          console.log('指定された曲はありません');
          command = '/home/XXXXXX/speak.sh 指定された曲はありません'
          exec(command);
        } else {
          console.log(stdout);
        }
      });

      command = 'cat /mnt/j/music/htdocs/music/list.txt | grep "'  + keyword + '">/home/XXXXXX/playlist';
      console.log(command)
      var exec = require('child_process').exec;
      exec(command, {maxBuffer: 40000*1024}, function(error, stdout, stderr) {
        if (error !== null) {
          console.log('Exec error: ' + error);
        }
      });
      function mplay(){
      command = 'mplayer -shuffle -playlist /home/XXXXXX/playlist';
      console.log(command)
      var exec = require('child_process').exec;
      exec(command, {maxBuffer: 40000*1024}, function(error, stdout, stderr) {
        if (error !== null) {
          console.log('Exec error: ' + error);
        }
      });
      }
      setTimeout(mplay,3000);
    }
    //firebase clear
    db.ref(path).set({[key]: ""});
    })

    function play_youtube(keyword) {
      youtube.search(keyword, 1, {'type':'video'} , function(error, result) {
        if (error) {
          console.log(error);
          return ;
        }
        for (const item of result.items) {
          if (item.id.videoId) {
            var exec = require('child_process').exec;
            command = "'/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe' --new-window 'https://www.youtube.com/watch?v="+item.id.videoId+"'"
            console.log(command);
            exec(command);
          }
        }
      });
    }
```
# まとめ
●IFTTのレシピがいままで３つ必要だったのが１つでできました。