ソラマメブログ

2008年06月18日

YouTubePlaylistMaker(その2)

一応 スクリプティング講座 と分類したので解説しておきます ^^
-----
//
// 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
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;
}
これは(後で使う)文字列内の文字列置き換え用の関数(google で探しました w)
default {
on_rez(integer start_param) {
llResetScript();
}
touch_start(integer total_number) {
activate_load_and_convert();
}
タッチしたらノートカードの読み込みと変換を起動
    dataserver(key queryid, string data) {
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();
}
}
}
ノートカードを全部読み込んだら(つまり EOF になったら)変換(convert)を起動
    http_response(key request_id, integer status, list metadata, string 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, ["&quot;", "\""]);
}
llOwnerSay(title + "," + llList2String(url_list, url_num));
url_num++;
convert_body();
}
}
}
html のソースの要求が処理されると この関数が呼び出されるわけですが 得られた html のソースは body に入れられているので
-----
そこからタイトルのある場所を切り出し(この切り出し方 ここで表示できるようにするため ちょっと変な形で切り出してます ^^)て 表示上都合の悪いものは置き換え(ここもう少し追加が必要かも)
-----
オーナーにのみ見える形で URL と , で連結してチャットする
-----
という仕組みになっているわけです w

同じカテゴリー(walking のスクリプティング講座)の記事
 プロフィール写真の表示に問題 (2009-11-30 20:55)
 ミニ太陽系 (2009-03-21 06:03)
 関数から文字列を返したら何か問題になる? (2009-03-18 18:02)
 llListFindList って型って関係ないんだったっけ (2009-03-18 14:02)
 夏時間(PDT)の実験 (2009-03-08 22:04)
 15パズルの作り方(その3) (2009-03-08 06:03)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。