駅探で検索した電車の時間を、Googleカレンダーに予定として登録するブックマークレット

javascript: (function(){
    var addzero = function(n){
        if (n < 10) {
            return "0" + n;
        }
        else {
            return n + "";
        }
    };
    
    var datestr = function(d){
        return d.getUTCFullYear() + addzero(d.getUTCMonth() + 1) + addzero(d.getUTCDate()) + "T" + addzero(d.getUTCHours()) + addzero(d.getUTCMinutes()) + "00Z";
    };
    
    var i;
    
    var norikae_list = document.getElementById("norikae_list");
    var datecontent = norikae_list.getElementsByTagName("h2")[0];
    var text = datecontent.firstChild.nodeValue;
    var ems = datecontent.getElementsByTagName("em");
    var year = ems[0].innerHTML;
    var month = ems[1].innerHTML - 1;
    var day = ems[2].innerHTML;
    
    var maincontent;
    for (i = 1; i < 6; i++) {
        maincontent = document.getElementById("route" + i);
        if (maincontent.getAttribute("style") === "") {
            break;
        }
    }
    var h2 = maincontent.getElementsByTagName("h2")[0];
    var h2text = h2.firstChild.nodeValue;
    var timecontent = h2text.match(/\d\d/g);
    var shour = timecontent[0];
    var smin = timecontent[1];
    var ehour = timecontent[2];
    var emin = timecontent[3];
    
    var table = maincontent.getElementsByTagName("table")[1];
    var times = table.getElementsByClassName("time");
    var stations = table.getElementsByClassName("station_name");
    var trains = table.getElementsByClassName("train");
    var details = "";
    for (i = 0; i < trains.length; i++) {
        details += times[i * 2].textContent;
        details += "  ";
        details += stations[i].innerHTML;
        details += "<br/>";
        details += times[i * 2 + 1].textContent;
        details += "  ";
        details += trains[i].innerHTML;
        details += "<br/>";
    };
    details += times[i * 2].textContent;
    details += stations[i].innerHTML;
    
    var start = new Date(year, month, day, shour, smin, 0);
    var end = new Date(year, month, day, ehour, emin, 0);
    var dates = datestr(start) + "/" + datestr(end);
    
    var url = "https://www.google.com/calendar/event?action=TEMPLATE&text=" +
    encodeURIComponent(text) +
    "&dates=" +
    dates +
    "&details=" +
    encodeURIComponent(details);
    window.open(url, "_blank");
})();

FirefoxChromeでは動くことを確認しました。

社内の短縮URLのWEBサイト規制を回避するGreasemonkeyスクリプト。

うちの会社では、bit.lyとかの短縮URLを開こうとすると、Proxyのサイト規制に引っかかって表示されません。なのでそれを回避するGreasemonkyスクリプトを作りました。以下のJavaScriptをGreasemonkyスクリプトとして登録して、”ユーザスクリプトを実行するページ”をhttp://bit.ly/*とかにしておけばOK。

(function(){
    var url = window.location.href;
    // Callback
    var callback = document.createElement('script');
    callback.type = 'text/javascript';
    callback.charset = 'UTF-8';
    var t = document.createTextNode("var json_callback = function(r) { location.href=r[\"" + url + "\"]; };");
    callback.appendChild(t);
    document.body.appendChild(callback);
    
    // JSONP    
    var jsonp = document.createElement('script');
    jsonp.src = "http://www.longurlplease.com/api/v1.1?q=" + url + "&callback=json_callback"
    jsonp.charset = "UTF-8";
    document.body.appendChild(jsonp);
})();

http://www.sukechan.net/archives/152/
こちらの記事を参考にさせていただきました。

Read It Laterにポストするブックマークレットの合体版

  • iPhoneGoogleリーダーで、今見ているエントリーをRead It Laterにポストする
  • Instapaper mobilizerで見ていたページをRead It Laterにポストする
  • それ以外であれば、今見ているページをそのままRead It Laterにポストする
javascript:
(function(){
	var url;
	var title;
	if (/http:\/\/www\.google\.co\.jp\/reader\/i\//.test(location.href)) {
		var expanded = document.getElementsByClassName("expanded");
		var a = expanded[0].getElementsByClassName("item-title");
		var link = a[0].getAttribute("href");
		url = encodeURIComponent(link);
		title = encodeURIComponent(a[0].innerHTML);
	} else if (/http:\/\/www\.instapaper\.com\/m/.test(location.href)) {
		url = location.href.substring(30);
		title = encodeURIComponent(document.title);
	} else {
		url = encodeURIComponent(location.href);
		title = encodeURIComponent(document.title);
	}
	location.href = "http://readitlaterlist.com/edit_process.php?url=" + url + "&title=" + title;	
})();

Deliciousにポストするブックマークレットの合体版

さっき作ったブックマークレットの合体版

  • iPhoneGoogleリーダーで、今見ているエントリーをDeliciousにポストする
  • Instapaper mobilizerで見ていたページをDeliciousにポストする
  • それ以外であれば、今見ているページをそのままDeliciousにポストする
javascript: (function(){
	var url;
	var title;
	if (/http:\/\/www\.google\.co\.jp\/reader\/i\//.test(location.href)) {
		var expanded = document.getElementsByClassName("expanded");
		var a = expanded[0].getElementsByClassName("item-title");
		var link = a[0].getAttribute("href");
		url = encodeURIComponent(link);
		title = encodeURIComponent(a[0].innerHTML);
	} else if (/http:\/\/www\.instapaper\.com\/m/.test(location.href)) {
		url = location.href.substring(30);
		title = encodeURIComponent(document.title);
	} else {
		url = encodeURIComponent(location.href);
		title = encodeURIComponent(document.title);
	}
	window.open("http://m.delicious.com/save?url=" + url + "&title=" + title + "&jump=doclose");
})();

RSS Flash GからSafariのiPhone版Googleリーダーに乗り換える

これまでiPhoneでは、RSSリーダーとしてRSS Flash Gを使っていたんだけれど、よくバグ(Read It Laterにポストすると、無限にポストを繰り返す)が出てしまい、業を煮やす。
RSS Flash Gが便利だったのは、

  • Instapaper mobilizerで記事を開ける
  • Deliciousにポストできる
  • Read It Laterにポストできる
  • Twitterにポストできる

という機能。
上記機能は、すべてブックマークレットで実装し、思い切ってSafariiPhoneGoogleリーダーに乗り換えてみるてすと。