2008年06月18日
YouTubePlaylistMaker(その2)
一応 スクリプティング講座 と分類したので解説しておきます ^^
-----
-----
(実際に変換を起動するのはノートカードを読み込む関数でなんだけど それを起動してるからね w)
-----
URL は分かっているので(ここでは)それに対応する web ページの html のソースを要求しています
-----
(実際にタイトルを取り出すのは html のソースを処理する関数でなんだけど それを起動してるからね w)
-----
そこからタイトルのある場所を切り出し(この切り出し方 ここで表示できるようにするため ちょっと変な形で切り出してます ^^)て 表示上都合の悪いものは置き換え(ここもう少し追加が必要かも)
-----
オーナーにのみ見える形で URL と , で連結してチャットする
-----
という仕組みになっているわけです w
-----
//ノートカードを読み込んで変換を起動します
// File: YouTubePlaylistMaker.lsl
// Date Author number of nodes
// 2008/6/17 walkinglint 77
// 2008/6/17 walkinglint 44 (dance_ring->YouTubePlaylistMaker)
// 2007/9/11 walkinglint 83
// 2007/9/10 walkinglint 82
//
string notecard_name = "url_list";
integer read_line;
key query_id;
list url_list = [];
integer i;
integer j;
string url;
list convert_list;
integer url_num;
key requestid;
activate_load_and_convert() {
url_list = [];
llOwnerSay("Now Loading..");
read_line = 0;
if (llGetInventoryType(notecard_name) == INVENTORY_NOTECARD) {
query_id = llGetNotecardLine(notecard_name, read_line); // request first line
} else {
llOwnerSay("Notecard " + notecard_name + " is not found");
}
}
-----
(実際に変換を起動するのはノートカードを読み込む関数でなんだけど それを起動してるからね w)
convert() {この辺で変換していますっていうかタイトルを取り出しているわけですが
url_num = 0;
convert_body();
}
convert_body() {
if (url_num < llGetListLength(url_list)) {
requestid = llHTTPRequest(llList2String(url_list, url_num),
[HTTP_METHOD, "GET"], "");
}
}
-----
URL は分かっているので(ここでは)それに対応する web ページの html のソースを要求しています
-----
(実際にタイトルを取り出すのは html のソースを処理する関数でなんだけど それを起動してるからね w)
// http://www.secondforum.de/thread.php?threadid=2847これは(後で使う)文字列内の文字列置き換え用の関数(google で探しました w)
string llReplaceString(string source, list replace) {
while (llSubStringIndex(source, llList2String(replace, 0)) != -1) {
integer index = llSubStringIndex(source, llList2String(replace, 0));
string temp = llDeleteSubString(source, index,
(index + (llStringLength(llList2String(replace, 0)) - 1)));
source = llInsertString(temp, index, llList2String(replace, 1));
}
return source;
}
default {タッチしたらノートカードの読み込みと変換を起動
on_rez(integer start_param) {
llResetScript();
}
touch_start(integer total_number) {
activate_load_and_convert();
}
dataserver(key queryid, string data) {ノートカードを全部読み込んだら(つまり EOF になったら)変換(convert)を起動
if (queryid == query_id) {
if (data != EOF) {
// process data
if (llStringLength(data) != 0) {
url_list = url_list + [data];
}
read_line++;
query_id = llGetNotecardLine(notecard_name, read_line);
} else {
llOwnerSay("Loading complete.");
convert();
}
}
}
http_response(key request_id, integer status, list metadata, string body) {html のソースの要求が処理されると この関数が呼び出されるわけですが 得られた html のソースは body に入れられているので
string title = "";
if (request_id == requestid) {
integer i = llSubStringIndex(body, "YouTube - ");
integer j = llSubStringIndex(body, "/title>");
if ((i != -1) && (j != -1)) {
title = llGetSubString(body, i + llStringLength("YouTube - "), j - 2);
title = llReplaceString(title, [""", "\""]);
}
llOwnerSay(title + "," + llList2String(url_list, url_num));
url_num++;
convert_body();
}
}
}
-----
そこからタイトルのある場所を切り出し(この切り出し方 ここで表示できるようにするため ちょっと変な形で切り出してます ^^)て 表示上都合の悪いものは置き換え(ここもう少し追加が必要かも)
-----
オーナーにのみ見える形で URL と , で連結してチャットする
-----
という仕組みになっているわけです w
Posted by walkinglint at 06:03│Comments(0)
│walking のスクリプティング講座