LINE公式アカウントを導入検討している自治体などが喜んで、
ソフトベンダーが泣きそうな記事ですが…
基本的に、掲題のことは完全無料でできます。
LINEチャンネルアクセストークンの取得
ここ、まだ完全に理解していないので、後ほど記事更新しますが、
- チャンネルアクセストークンv2.1⇒セキュリティ高いが実装難しい
- 長期のチャネルアクセストークン⇒とりあえずこっちでOK
以下URLを参考に、トークン(文字列)をゲットします。
https://developers.line.biz/ja/docs/messaging-api/channel-access-tokens/
GASスクリプト
main.gs
function pullHeadlineAndSend() {
var url = 'http://www.data.jma.go.jp/developer/xml/feed/extra.xml';
var xml = UrlFetchApp.fetch(url).getContentText();
var xmlDoc = XmlService.parse(xml);
var rootDoc = xmlDoc.getRootElement();
var nsDefault = XmlService.getNamespace("", 'http://www.w3.org/2005/Atom');
var entries = rootDoc.getChildren("entry", nsDefault);
var length = entries.length;
var currentDate = new Date().getTime();
var title, updated, date, author, content;
var headlines = "";
// 最長で10分後に更新される
var past10Min = 10 * 60 * 1000;
// 10分以内に更新された東京都の気象警報のみ取得
for(var i=0; i < length; i++) {
title = entries[i].getChildText("title", nsDefault);
author = entries[i].getChild("author", nsDefault).getChildText("name", nsDefault);
content = entries[i].getChildText("content", nsDefault);
updated = entries[i].getChildText("updated", nsDefault);
date = new Date(updated).getTime();
if(currentDate - date > past10Min) continue;
if(title.indexOf("気象警報・注意報") != -1 && author === "仙台管区気象台" && content.indexOf("宮城県") != -1 ){
headlines += Utilities.formatString('[%s]\n%s\n%s\n', title, toLocalDate(updated), content);
}
}
if(headlines !=="")
{
sendPushMessage(headlines);
Logger.log(headlines);
}
}
function toLocalDate(dateString)
{
var date = new Date(dateString);
var formattedDate = Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy年M月d日 HH時');
return formattedDate;
}
function testSend()
{
sendPushMessage('test message');
}
line_functions.gs
const TOKEN = 'got_token_string_ゲットしたトークンの文字列を貼り付け';
function sendPushMessage(text) {
var url = "https://api.line.me/v2/bot/message/broadcast";
var headers = {
"Content-Type" : "application/json; charset=UTF-8",
'Authorization': 'Bearer ' + TOKEN,
};
var postData = {
"messages" : [
{
'type':'text',
'text':text,
}
]
};
var options = {
"method" : "post",
"headers" : headers,
"payload" : JSON.stringify(postData)
};
return UrlFetchApp.fetch(url, options);
}
あれ…prettyprintが効かないな…面倒だからこれでいいや!
(たぶんどこかの文字列がひっかかってます。詳しい人教えて…)
こちらのURLで地震火山情報をゲットできます。
0 件のコメント:
コメントを投稿