jiglet置き場@jiglet.info


ライセンスについて

tube2mobile jigletは事実上のパブリックドメインとして提供されます。
著作権表記の書き換えを含め自由に使用できますが、このプログラムは *全くの無保証* です。
このプログラムを使用して発生した結果については、その一切を使用者自身の責任において負うものとします。

tube2mobile jiglet


"jigletにURLを渡す"でYouTubeのURLを渡してください。
自動でモバイル版YouTubeのURLに適当に変換し、端末の内蔵ブラウザで開きます。
ver0.0.2からはYouTube以外のURLを渡した場合でも、ページ内のYouTubeっぽい部分を探します。
なので、ブログに埋めこんであるようなところからでも(運がよければ)抽出できるかもしれません。

experimental版(0.0.3)ダウンロード

ソースコード
tube2mobile.java
import jp.jig.jiglet.*;

public class tube2mobile extends Jiglet {
    public void paint(boolean allDrawFlag) {
        /* 使わないけどオーバーライドしないとエラー */
    }

    /* 検索用の文字列。StartとEndの間にある文字列が使われる */
    final String[] searchStart = new String[] {
            "youtube.com/watch?",
            "youtube.com/v/",
    };
    final String[][] searchEnd = new String[][] {
            {      "\"", "'", " ", "<", ">", },
            { "&", "\"", "'", " ", "<", ">", },
    };

    /* URL生成時に、上で見つけた文字列の前後になる部分を指定 */
    final String openPrefix[] = new String[] {
            "native:http://m.jp.youtube.com/details?",
            "native:http://m.jp.youtube.com/details?v=",
    };
    final String openSuffix[] = new String[] {
            "&warned=yes",
            "&warned=yes",
    };
    
    public void main() {
        if ((getKey() & EVENT_LAUNCHED) != 0) {
            byte[] bytmp = getLaunchParameter();
            if (bytmp != null) {
                /* 文字列でURLが渡ってるときだけ処理 */
                String sttmp = new String(bytmp);
                if (checkMatchAndLaunch(sttmp)) {
                    terminate();
                }
                if (sttmp.startsWith("http://") || sttmp.startsWith("https://")) {
                    bytmp = getHTTP(getSourceURL() + "jump.php?a=" + encodeBase64(sttmp.getBytes()));
                    if (bytmp != null) {
                        sttmp = new String(bytmp);
                        if (checkMatchAndLaunch(sttmp)) {
                            terminate();
                        }
                    } else {
                        showDialog("取得できませんでした。\n" + sttmp, DIALOG_TYPE_OK);
                        terminate();
                    }
                }
                showDialog("YouTubeのURLはみつかりませんでした。", DIALOG_TYPE_OK);
                terminate();
            }
        }
        /* エラーメッセージ吐いて終了 */
        showDialog("\"jigletにURLを渡す\"から起動してください。", DIALOG_TYPE_OK);
        terminate();
    }
    
    boolean checkMatchAndLaunch(String sttmp) {
        /*
         * URLを探し、みつかったら開いてjiglet終了。みつからなかったら制御を戻す。
         */
        boolean ret = false, found = true;
        int stbase = 0;
        StringBuffer results = new StringBuffer();
        while (found) {
            for (int i = 0; i < searchStart.length; i++) {
                int st = sttmp.indexOf(searchStart[i], stbase);
                if (st < 0) {
                    /* 検索の先頭文字がない場合は次へ */
                    found = false;
                    continue;
                }
                st += searchStart[i].length();
                int ed = sttmp.indexOf(searchEnd[i][0], st);
                int foundId = 0;
                for (int j = 1; j < searchEnd[i].length; j++) {
                    int edtmp = sttmp.indexOf(searchEnd[i][j], st);
                    if ((edtmp >= 0) && ((edtmp < ed) || (ed < 0))) {
                        ed = edtmp;
                        foundId = j;
                    }
                }
                if (ed < 0) {
                    /* 検索の終端文字がない場合は文字列の最後まで使用 */
                    ed = sttmp.length();
                }
                ret = true;
                found = true;
                String openURL = openPrefix[i] + sttmp.substring(st, ed) + openSuffix[i];
                if (results.toString().indexOf(openURL) < 0) {
                    /* 過去に開いたことのないURLだった場合のみ開く */
                    launch(openURL, ENCODE_SJIS, LAUNCH_KEEP_ALIVE);
                    results.append(openURL);
                    results.append("\t");
                }
                stbase = ed + 1;
                break;
            }
        }
        return(ret);
    }
}

TOPへ
© 2008 jiglet.info