はじめに
●「フォロー中のTwitter最新記事をしゃべらす」の記事のIFTTT/firebase版です。
環境
●Windows10 HOMEのPCにWSLのubuntuをインストールして使用してます。
●ubuntuでnpm,node.js,firebaseなどをインストールする
●WSLのubuntuでpulseaudioでPCのスピーカを使うようにする
●Windows側でpulseaudioサーバのインストールが必要です
https://www.cendio.com/thinlinc/download の 「Client Bundle」のリンクからダウンロードできます
●音声出力はGoogle Translate Text to Speechを使用しています。
プログラム(nodejs)
var firebase = require("firebase");
var iconv = require('iconv-lite');
require('date-utils');
var value1 ;
var formatted2 = '20210930000000';
var value2 ='aaaa';
vlet checksay = ["速報VL","中央本線","最大震度1"]
//firebase config
var config = {
apiKey: "XXXXXXXXXXXXXXX",
authDomain: "XXXXXXXXXXXXXXX.firebaseapp.com",
databaseURL: "https://XXXXXXXXXXXXXXX.firebaseio.com",
projectId: "XXXXXXXXXXXXXXX",
storageBucket: "XXXXXXXXXXXXXXX.appspot.com",
messagingSenderId: "XXXXXXXXXXXXXXX"
};
firebase.initializeApp(config);
//jsonからvalueに一致する値取得
const getJsonData = (value, json) => {
for (var word in json) if (value == word) return json[word]
return json["default"]
}
//database更新時
const path = "/twitter"
const key = "message"
const db = firebase.database()
db.ref(path).on("value", function(changedSnapshot) {
//値取得
var value = changedSnapshot.child(key).val()
//入力テキストを修正する
if(value.indexOf("#NHK") !== -1) value = value.substring(0, value.indexOf("#NHK"));
if(value.indexOf("#nhk") !== -1) value = value.substring(0, value.indexOf("#nhk"));
if(value.indexOf("#JR") !== -1) value = value.substring(0, value.indexOf("#JR"));
if(value.indexOf("( https") !== -1) value = value.substring(0, value.indexOf("( https"));
if(value.indexOf("https") !== -1) value = value.substring(0, value.indexOf("https"));
value = value.replaceAll("<<<","");
value = value.replaceAll(">>>","");
value = value.replaceAll("〇","");
value = value.replaceAll(" "," ");
value = value.replaceAll("\n"," ");
console.log(value);
//更新時刻の取り出し
var dt = new Date();
var formatted = dt.toFormat("YYYYMMDDHH24MISS");
console.log(formatted);
console.log(formatted2);
//無処理の文字列かチェック
check = 0
for (let i =0; i < 3; i++) {
if(value.indexOf(checksay[i]) !== -1) check = 1
}
//コマンド実行
//30秒以内で更新されたら、処理を無視する
if(formatted - formatted2 > 30) {
if(value !== value2) {
if(check === 0) {
//音声で通知する
command = "/home/XXXXX/speak.sh" + ' ' + value;
var exec = require('child_process').exec;
exec(command, {maxBuffer: 1000*1024}, function(error, stdout, stderr) {
});
}
}
}
//前回の更新時刻をセット
formatted2 = formatted;
value2 = value ;
//firebase clear
//db.ref(path).set({[key]: ""});
})
IFTTTの設定(例)
■NHKニュース速報
●If
New tweet from search
Search for
from:nhk_news 速報 JUST IN
●Then
Make a web request
URL
https://XXXXXXXXXXXXXXX.firebaseio.com/twitter/message.json
Method
PUT
Content Type
text/plan
Additional Headers
空白
Body
"{{Text}}"
■JR東日本[中央方面]
●If
New tweet from search
Search for
JRE_F_Chuo
●Then
Make a web request
URL
https://XXXXXXXXXXXXXXX.firebaseio.com/twitter/message.json
Method
PUT
Content Type
application/json
Additional Headers
空白
Body
"<<<{{Text}}>>>"
まとめ
●Twitterでテキストに改行があるとIFTTTでエラーになる場合があります。