2009-12-16
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'; } })();
反省
あまりにクソだったので修正しました。Firefoxでしか動作確認してません。API叩けばいいのにスクレイピングしてるし、タイムゾーン変換してないので時間がおかしくなったりします。とはいえATND側ですぐに実装される様な気がするし、もっといいグリモンとか他にあるはずなのでこれは適当でいいかなと思えてきた。
トラックバック - http://d.hatena.ne.jp/hagino_3000/20091216/1260894102
リンク元
- 10 http://ezsch.ezweb.ne.jp/search/ezGoogleMain.php?query=エロ動画化&ct=&pd=1&sr=0000
- 8 http://atnd.org/events/2271
- 6 http://twitter.com/hagino_3000
- 5 http://awasete.com/show.phtml?u=http://d.hatena.ne.jp/JavaBlack/
- 5 http://b.hatena.ne.jp/entry/d.hatena.ne.jp/hagino_3000/20081005/1223209094
- 5 http://www.google.co.jp/search?hl=ja&q=ie+メモリリーク+消費&lr=&aq=f&oq=
- 4 http://reader.livedoor.com/reader/
- 4 http://www.google.co.jp/search?q=JavaScript+Shell&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 3 http://d.hatena.ne.jp/keyword/ブックマークレット
- 3 http://ghp.g.hatena.ne.jp/keyword/ギークハウス御徒町




