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 件のコメント:
コメントを投稿