-
-
Save shoko3168/5add1cb46b19d22013a4c70d0526b2ed to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var FB_BASE_URL = 'https://graph.facebook.com/v2.6/me/messages?access_token=CAAX...'; | |
var fbBookUri = 'https://docs.google.com/spreadsheets/d/1Iu....PSo/edit'; | |
var fbBook = SpreadsheetApp.openByUrl(fbBookUri); | |
var logSheet = fbBook.getSheetByName("log"); | |
// ==================================== | |
function testGetMobileOasisList() { | |
var lat = 35.622035562811; | |
var lng = 139.7311121691; | |
var mobileOasisList = getMobileOasisList(lat, lng); | |
Logger.log(mobileOasisList); | |
} | |
function getRequest(url) { | |
var options = { | |
method: 'GET' | |
} | |
var result = UrlFetchApp.fetch(url, options); | |
// リクエストに成功していたら結果を返す | |
if (result.getResponseCode() == 200) { | |
return result.getContentText(); | |
} | |
throw new Error('getRequest failed'); | |
} | |
/** | |
* lat, lng からMobileOasisListを取得 | |
*/ | |
function getMobileOasisList(lat, lng) { | |
var endPointUrl = 'http://oasis.mogya.com/api/v0/search?'; | |
var n, w, s, e; | |
var adjust = 0.0025; | |
var url = endPointUrl + 'n=' + (lat + adjust) + '&w=' + (lng - adjust) + '&s=' + (lat - adjust) + '&e=' + (lng + adjust) + '&lat=' + lat + '&lng=' + lng; | |
var contentText = getRequest(url); | |
var ret = JSON.parse(contentText); | |
var idx, mos; | |
var oasisList = []; | |
for (idx in ret.results) { | |
// mos = new MobileOasisSpot(ret.results[idx]); | |
mos = ret.results[idx]; | |
oasisList.push(mos); | |
} | |
return oasisList; | |
} | |
// ==================================== | |
function doGet(e) { | |
// return ContentService.createTextOutput('hello'); | |
return ContentService.createTextOutput(e.parameter['hub.challenge']); | |
} | |
// ==================================== | |
function doPost(e) { | |
var message, msg, i, j, result, entry; | |
var contents = JSON.parse(e.postData.contents); | |
// Spread Sheetにログを出力します | |
logSheet.appendRow([new Date(), 'start', e, contents]); | |
var postData = e.postData; | |
for (i = 0; i < contents.entry.length; i++) { | |
entry = contents.entry[i]; | |
for (j = 0; j < entry.messaging.length; j++) { | |
msg = entry.messaging[j]; | |
logSheet.appendRow([new Date(), 'msg', msg, msg.sender.id, msg.recipient.id]); | |
// 受信した分だけハンドリング | |
handleContent(msg); | |
} | |
} | |
logSheet.appendRow([new Date(), 'end']); | |
return ContentService.createTextOutput(''); | |
} | |
function handleContent(msg) { | |
// テキストメッセージがあるかどうか | |
if (msg.message) { | |
var attachments = msg.message.attachments; | |
var i, atStr; | |
for (i in attachments) { | |
// 添付情報がある分だけハンドリング | |
handleAttachment(msg, attachments[i]); | |
logSheet.appendRow([new Date(), 'atc', attachments[i]]); | |
} | |
var text = msg.message.text; | |
if (text) { | |
logSheet.appendRow([new Date(), 'text', text]); | |
handleTextMessage(msg); | |
} | |
} | |
} | |
function handleTextMessage(msg) { | |
sendFBTextMessage(msg.sender.id, "ぼくハカバくん。位置情報を送ってね!\n充電スポットを送るよ!"); | |
} | |
function sendFBTextMessage(id, text) { | |
var url = FB_BASE_URL; | |
var payload = { | |
'recipient': {id: id}, | |
'message': {text: text} | |
}; | |
payload = JSON.stringify(payload); | |
var options = { | |
'method': 'post', | |
"headers": { | |
"Content-type": "application/json" | |
}, | |
'payload': payload, | |
muteHttpExceptions: true | |
}; | |
var result = UrlFetchApp.fetch(url, options); | |
return result; | |
} | |
function testSendFBTextMessage() { | |
sendFBTextMessage('86....126', 'hello'); | |
} | |
function handleAttachment(msg, attachment) { | |
var payload = attachment.payload; | |
if (payload) { | |
var coordinates = payload.coordinates; | |
// 位置情報はcoordinatesにあります | |
if (coordinates) { | |
handleCoordinates(msg, attachment); | |
} | |
} | |
} | |
function handleCoordinates(msg, attachment) { | |
// 位置情報が送られたときのハンドリング | |
var payload = attachment.payload; | |
var coordinates = payload.coordinates; | |
logSheet.appendRow([new Date(), 'coordinates', coordinates]); | |
var message = attachment.title + 'から近い充電スポットを送るよ!'; | |
// 一旦メッセージ送信 | |
sendFBTextMessage(msg.sender.id, message); | |
// 探索開始 | |
var oasisList = getMobileOasisList(coordinates.lat, coordinates.long); | |
logSheet.appendRow([new Date(), 'oasis', message, JSON.stringify(oasisList)]); | |
if (oasisList.length > 0) { | |
//http://maps.google.com/maps?q=35.65860811863414,139.7455318066551 | |
var oasis = oasisList[0]; | |
message = ''; | |
var saddr = coordinates.lat + ',' + coordinates.long; | |
sendFBOasisMessage(msg.sender.id, oasisList, saddr); | |
} else { | |
sendFBTextMessage(msg.sender.id, '充電スポットは見つかりませんでした。。'); | |
} | |
} | |
function sendFBOasisMessage(id, oasisList, saddr) { | |
var countI, oasis, button, buttons = []; | |
// 最大3件送信 | |
for (countI = 0; (countI < 3) && (countI < oasisList.length); countI++) { | |
oasis = oasisList[countI]; | |
button = { | |
type: 'web_url', | |
// url: 'comgooglemaps://?saddr=' + saddr + '&daddr=' + this.lat + ',' + this.lng + '&directionsmode=walking', | |
url: 'http://maps.google.com/maps?q=' + oasis.latitude + ',' + oasis.longitude, | |
title: oasis.title + '(' + oasis.powersupply + ')' + "\n" + oasis.address + "\n" + 'ここに行く!' | |
}; | |
buttons.push(button); | |
} | |
var url = FB_BASE_URL; | |
var payload = { | |
'recipient': {id: id}, | |
'message': { | |
"attachment":{ | |
"type":"template", | |
"payload":{ | |
"template_type":"button", | |
"text":"ここはどうかな?", | |
"buttons":buttons | |
} | |
} | |
} | |
}; | |
payload = JSON.stringify(payload); | |
var options = { | |
'method': 'post', | |
"headers": { | |
"Content-type": "application/json" | |
}, | |
'contentType': "application/json", | |
'payload': payload | |
// , muteHttpExceptions: true | |
}; | |
var result = UrlFetchApp.fetch(url, options); | |
} | |
function testSendFBOasisMessage() { | |
var lat = 35.622035562811; | |
var lng = 139.7311121691; | |
var list = getMobileOasisList(lat, lng); | |
sendFBOasisMessage('86....126', list, lat + ',' + lng); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment