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);
}
}
|