Skip to content

Instantly share code, notes, and snippets.

@takatama
Last active March 6, 2017 23:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save takatama/7957488 to your computer and use it in GitHub Desktop.
Save takatama/7957488 to your computer and use it in GitHub Desktop.
A bookmarklet for adding a Google maps transit search result into Google Calendar.
javascript:(function () {
if (document.URL.indexOf('/am=t') < 0) {
alert('詳細画面で実行してください');
return;
}
var e = encodeURIComponent;
var q = document.querySelectorAll.bind(document);
var text = function () {
var wp = q('.waypoint-address:not([style*="display"]) .first-line span');
var from = wp[0].innerText;
var to = wp[wp.length - 1].innerText;
return e(from + ' → ' + to);
};
var details = function () {
return e(document.URL);
};
var dates = function () {
var z = function(x) {
return ('00' + x).slice(-2);
};
var utcMsec = function (msec) {
var d = new Date(msec);
return d.getUTCFullYear() + z(d.getUTCMonth() + 1) + z(d.getUTCDate()) + 'T' + z(d.getUTCHours()) + z(d.getUTCMinutes()) + '00Z';
};
var parseTransitTime = function (span) {
var h = parseInt(span.innerText.split(' ')[0].split(':')[0], 10);
var m = parseInt(span.innerText.split(' ')[0].split(':')[1], 10);
var ampm = span.innerText.split(' ')[1];
if (ampm === 'PM' && h < 12) {
h += 12;
}
return { hour: h, minutes: m };
};
var transitTime = q('.cards-directions-transit-trip-time span');
var start = parseTransitTime(transitTime[0]);
var end = parseTransitTime(transitTime[1]);
var duration = q('.cards-directions-duration-value')[0].innerText;
var today = new Date();
var todayLabel = q('.date-input')[0].innerText;
if (todayLabel.match(/(\d+)\s*月\s*(\d+)\s*日/)) {
var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
todayLabel = monthNames[parseInt(RegExp.$1, 10) - 1] + ' ' + RegExp.$2;
}
var startMsec = Date.parse(todayLabel + ' ' + today.getFullYear() + ' ' + start.hour + ':' + start.minutes + ':00');
if (!startMsec) return;
if (startMsec < today.getTime()) {
var sd = new Date(startMsec);
sd.setMonth(sd.getMonth() + 1);
startMsec = sd.getTime();
}
if (duration.match(/(\d+)\s*h\s*(\d+)\s*min/) || duration.match(/(\d+)\s*時間\s*(\d+)\s*分/)) {
var endMsec = startMsec + (parseInt(RegExp.$1) * 60 + parseInt(RegExp.$2)) * 60 * 1000;
} else if (duration.match(/(\d+)\s*min/) || duration.match(/(\d+)\s*分/)) {
var endMsec = startMsec + parseInt(RegExp.$1) * 60 * 1000;
}
return utcMsec(startMsec) + '/' + utcMsec(endMsec);
};
var d = dates();
if (d) {
var href = 'http://www.google.com/calendar/event?action=TEMPLATE&text=' + text() + '&details=' + details() + '&dates='+ d + '&location=&trp=true';
window.open(href);
}
})();

Googleマップの検索結果をGoogleカレンダーに登録するブックマークレット

Googleマップでルートを検索し、ルート詳細を表示してから実行してください。

Gif

インストール方法

Chrome の場合

  • ブックマークバーを表示する (Ctrl + Shift + B)。
  • ブックマークバー上で右クリックし「ページを追加」を選択する。
  • 「タイトル」は好きに入力する。
  • 「URL」に javascript:(function ... から始まるコード (maps2calender.js) をペーストする。
  • 保存ボタンを押す

使い方

Googleマップで経路検索をし、詳細を表示した状態でインストールしたブックマークを押す

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment