ATNDのイベント画面にGoogleカレンダーへ予定を登録するボタンを追加するブックマークレット
こんな感じになります。
2009-12-17:Safariで動かなかったので修正しました。
コード
javascript:(function(){var eventId=window.location.pathname.match(/([0-9]*$)/);$.getJSON('http://api.atnd.org/events/?event_id='+eventId+'&format=jsonp&count=1&callback=?',callback);function callback(res){var e=res.events[0];var action="TEMPLATE";var text=e.title;var desc=e["catch"];var loc=e.place;var startT=formatToUTCDate(e.started_at);var endT=formatToUTCDate(e.ended_at);if(endT==null){endT=startT;}var dates=startT+'/'+endT;var trp="true";var url='http://www.google.com/calendar/event?'+'action='+action+'&text='+encodeURIComponent(text)+'&details='+encodeURIComponent(desc)+'<br>'+window.location+'&location='+encodeURIComponent(loc)+'&dates='+dates+'&trp=true'+'&sprop=website:'+window.location+'&sprop=name:atnd';$('h1.summary').parent().append($('<a>').attr('href',url).append($('<img>').attr('src','http://www.google.com/calendar/images/ext/gc_button2_ja.gif')));}function formatToUTCDate(jstDateTime){if(jstDateTime==null){return null;}var dateTime=jstDateTime.replace(/[-,:]/g,"").replace(/.....$/,"");var jstDate=Number(dateTime.slice(0,8));var jstTime=Number(dateTime.slice(9,15));var utcDate;if(jstTime<90000){utcDate=jstDate - 1;}else{utcDate=jstDate;}var utcTime=String((jstTime+240000 - 90000) % 240000);utcTime=utcTime.length==6?utcTime:'0'+utcTime;return utcDate+'T'+utcTime+'Z';}})();
ヒューマンリーダブル版
javascript:(function(){ var eventId = window.location.pathname.match(/([0-9]*$)/); $.getJSON('http://api.atnd.org/events/?event_id='+eventId+'&format=jsonp&count=1&callback=?', callback); function callback(res) { var e = res.events[0]; var action = "TEMPLATE"; var text = e.title; var desc = e["catch"]; var loc = e.place; var startT = formatToUTCDate(e.started_at); var endT = formatToUTCDate(e.ended_at); if (endT == null) { endT = startT; } var dates = startT + '/' + endT; var trp = "true"; var url = 'http://www.google.com/calendar/event?' + 'action=' + action + '&text=' + encodeURIComponent(text) + '&details=' + encodeURIComponent(desc) + '<br>' + window.location + '&location='+ encodeURIComponent(loc) + '&dates=' + dates + '&trp=true' + '&sprop=website:' + window.location + '&sprop=name:atnd'; $('h1.summary').parent().append( $('<a>').attr('href', url).append( $('<img>').attr('src', 'http://www.google.com/calendar/images/ext/gc_button2_ja.gif') ) ); } function formatToUTCDate(jstDateTime) { if(jstDateTime == null) {return null;} var dateTime = jstDateTime.replace(/[-,:]/g,"").replace(/.....$/,""); var jstDate = Number(dateTime.slice(0, 8)); var jstTime = Number(dateTime.slice(9, 15)); var utcDate; if (jstTime < 90000) { utcDate = jstDate - 1; } else { utcDate = jstDate; } var utcTime = String((jstTime + 240000 - 90000) % 240000); utcTime = utcTime.length == 6 ? utcTime : '0' + utcTime; return utcDate+'T'+utcTime+'Z'; } })();