LINE公式アカウントを導入検討している自治体などが喜んで、
ソフトベンダーが泣きそうな記事ですが…
基本的に、掲題のことは完全無料でできます。
1.LINEチャンネルアクセストークンの取得
ここ、まだ完全に理解していないので、後ほど記事更新しますが、
- チャンネルアクセストークンv2.1⇒セキュリティ高いが実装難しい
- 長期のチャネルアクセストークン⇒とりあえずこっちでOK
以下URLを参考に、トークン(文字列)をゲットします。
https://developers.line.biz/ja/docs/messaging-api/channel-access-tokens/
2.GASスクリプト
2-1.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');
- }
2-2.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 件のコメント:
コメントを投稿