送信した地名の位置情報を取得して、Google Mapsのリンクを返すLINE BOTを作ってみましょう
公式リファレンスでここに書かれていることを実際にやってみます
以下2つの記事の組み合わせでできます
地名を入力すると、その位置情報とリンクを返すコードの例です
コード.gs
var CHANNEL_ACCESS_TOKEN = "TOKEN";
function doPost(e) {
var contents = e.postData.contents;
var obj = JSON.parse(contents);
var events = obj["events"];
for (var i = 0; i < events.length; i++) {
if (events[i].type == "message") {
reply_message(events[i]);
}
}
}
function reply_message(e) {
if (e.message.type == "text") {
var text = e.message.text;
var geo_data = get_geodata(text);
var result = geo_data["result"];
if (result == "success") {
var address = geo_data["address"];
var latitude = geo_data["latitude"];
var longitude = geo_data["longitude"];
var postData = {
"replyToken": e.replyToken,
"messages": [{
"type": "location",
"title": text,
"address": address,
"latitude": latitude,
"longitude": longitude
}]
};
} else {
var postData = {
"replyToken": e.replyToken,
"messages": [{
"type": "text",
"text": text + " は見つかりません:" + result
}]
};
}
}
var options = {
"method": "post",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN
},
"payload": JSON.stringify(postData)
};
UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options);
}
function get_geodata(text) {
try {
var geocode = Maps.newGeocoder()
.setLanguage("ja")
.geocode(text);
var geo = geocode.results[0];
var addresstext = geo.formatted_address;
var geodata = geo.geometry;
var latitude = geodata.location.lat;
var longitude = geodata.location.lng;
var result = "success";
} catch (e) {
var result = e.message;
}
var data = {
"address": addresstext,
"latitude": latitude,
"longitude": longitude,
"result": result
}
return data;
}
|
意訳.gsアクセストークンを設定する この処理は以下を実行する 送信されたデータの内容を取得し そのJSONをオブジェクトに変換し eventsを取得する eventsの数だけ以下を繰り返す もしtypeがmessageなら reply_messageに渡す この処理は以下を実行する もし受け取ったmessageのtypeがtextなら reply_textに入れて geo_dataを取得し resultを取得し もしresultが"success"なら addressを取得し latitude(緯度)を取得し longitude(経度)を取得し postDataに replyTokenを設定し messagesの typeを設定し textを設定し addressを設定し latitudeを設定し longitudeを設定し resultが"success"ではないなら postDataに replyTokenを設定し messagesの typeを設定し textを設定し optionsに methodを設定し headersに Content-Typeを設定し Authorizationを設定し payloadにはpostDataをJSONに変換したものを設定する optionをつけてLINEのmessage reply APIをたたく この処理は以下を実行する 以下を試す 新しい地理情報を作り 言語を設定する 場所を設定する 地理情報の0番目の 住所を取得し geometryを取得し その緯度を取得し その経度を取得し resultを設定する エラーが出たら resultにエラーメッセージを入れる dataに 住所を入れ 緯度を入れ 経度を入れ resultを入れて dataを返す |

