« 水戸黄門 | トップページ | 非モテ »

2010年10月13日 (水)

時刻表.Locky

駅.Locky というアプリを愛用している。iPhone で動く時刻表アプリだけど、自分が利用する駅のデータをローカルに持っておいて直近の電車の時刻をカウントダウンしてくれる。回線接続が不要なので乗り換え案内アプリなんかより便利だったり。

で、折角こんな便利なんだから、都バスの時刻表も調べたいと思っていたんだけど 時刻表.Locky なるものがあった。鉄道以外の時刻表をダウンロードして同じように使えるんだそうな。
我らが東京都交通局のバス時刻表もあります。

が、この時刻表は有志が作成してアップロードするもの。オイラの近所のバス停は登録があるものの時刻表がないのでむーん、と思い作ることにした。
都バスの時刻表自体は tobus.jp で公開されているので、こいつからNextTrain形式っつうフォーマットにすればいいわけだ。サーバからHTTP接続で取得してParseして…とか考えたけど、面倒だな。色々考えて、Greasemonkey で Javascript の XPath 使って解析すりゃいいんじゃねーかと。

ということでゴリゴリっと書いて登録しました。これで取りあえずジムから帰るときとか、慌てて家飛び出したときとかに時刻表調べることが出来ますわよ。急いでるときに Safari 立ち上げて通信待つのはツラいから。普段バスを使う人にはオススメです。

一応、Greasemonkey Script を。間違ってても知らん。行き先は抽出が面倒だったので自力で書き込むこと。こんな感じのページで使う。
都バス 反96 六本木ヒルズ

jQuery の読み込み部分は「Greasemonkey で 超お手軽に jQuery を使うスニペット – OTCHY.NET」を参考にした。

// ==UserScript==
// @name           Tobus Table Generator
// @namespace      http://xxxxx/
// @include        http://tobus.jp/cgi-bin/pctimetable.cgi?act=timel*
// ==/UserScript==

(function(d, func) {
    var check = function() {
        if (typeof unsafeWindow.jQuery == 'undefined') return false;
        func(unsafeWindow.jQuery); return true;
    }
    if (check()) return;
    var s = d.createElement('script');
    s.type = 'text/javascript';
    s.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
    d.getElementsByTagName('head')[0].appendChild(s);
    (function() {
        if (check()) return;
        setTimeout(arguments.callee, 100);
    })();
})(document, function($) {
    var har = new Array();
    var win = $('<div></div>');
    var area = $('<textarea id="area" cols="60" rows="60"></textarea><br/>');
    var title = $('<input id="title" type="text" size="64" /><br/>');

    win.append(title).append(area);
    $('body').prepend(win);

    var nor = sat = sun = '';

    nor = "[MON][TUE][WED][THU][FRI]\n";
    sat = "[SAT]\n";
    sun = "[SUN][HOL]\n";
    var str = "a:\n";

    $('tr').each(function(){
    var t = $(this);
    var th = t.children('th');
    var td = t.children('td');
    if (t.attr('bgcolor') == '#22ff22' && $('input#title').val() == '') {
        var l = hankaku_num(t.children('th[width="90%"]').text());
        l = l.replace(/\u3000/g, ' ');
        l = l.replace(/^\s+/, '');
        l = l.replace(/\s+/g, ' ');

        l = l.split(' ').reverse();
        l.pop();
        l = l.reverse();
        l.pop();
        $('input#title').val(l.join(' '));
    }
    else if(th.attr('bgcolor') == '#90ff90') {
        var l = format_time(td);
        var t = format_hour(th);
        if (l != '') nor += t+':'+l+"\n";
    }
    else if(th.attr('bgcolor') == '#78cefa') {
        var l = format_time(td);
        var t = format_hour(th);
        if (l != '') sat += t+':'+l+"\n";
    }
    else if(th.attr('bgcolor') == '#ffb6c1') {
        var l = format_time(td);
        var t = format_hour(th);
        if (l != '') sun += t+':'+l+"\n";
    }
    });

    str += "\n";
    $('#area').val(str+nor+"\n"+sat+"\n"+sun);

    function format_hour(th) {
    var t = hankaku_num(th.text());
    t = t.substr(0, t.length-1);
    return t;
    }

    function format_time(td) {
    var l = hankaku_num(td.text());
    l = l.replace(/\u3000/g, ' ');
    l = l.replace(/^\s+/, '');
    l = l.replace(/\s+/g, ' ');
    l = l.replace(/N/g, '');

    if (l=='') return '';

    l = l.split(' ');
    for (var i=0; i<l.length; i++) {
        var m = l[i].match(/([^\d]+)(\d+)/);
        if (!m) l[i] = "a"+l[i];
        else {
        var head = 'a';
        if (har[m[1]]) head = har[m[1]];
        else {
            head = String.fromCharCode(98+har.length);
            har[m[1]] = head;
            str += head+':'+"\n"
        }
        l[i] = head+m[2];
        }
    }
    return l.join(' ');
    }

    function hankaku_num(org) {
    return org.replace(/[\uff10-\uff19]/g, function(c){return String.fromCharCode(c.charCodeAt(0) - 65248);});
    }
});

|

« 水戸黄門 | トップページ | 非モテ »

てっく」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/232324/37750556

この記事へのトラックバック一覧です: 時刻表.Locky:

« 水戸黄門 | トップページ | 非モテ »