2009年8月24日月曜日

RSS Feed Reader

悩み続けているRSSのヒントがありました。

普通リンクなんでしょうが、メモさせてくださいませ。
(日本のSLブログslmameのリンクとか外れてたり何かあったのでしょうか?)
勉強させてもらいます。

//

//    SHOP ZERO Tips38 RssReader  script   v1.0
//

//                   Created by Zero2000 Kid     2009/02/02
//


// Title

string title="++ ソラマメ新着 ++";
// YahooPipe URL

string pipeURL="http://pipes.yahoo.com/pipes/pipe.run?_id=c890298689189b27880118f7b57b28c7&_render=rss&textinput=item.";
// Article Count

integer articleCount=5;//max12
// Refresha rate

float refreshRate=300.0;//refresh timer sec

integer input_ch = -38;
integer handle;
key http_req;
string respons_data;
list article_list;
integer counter;


showInfo () {
    integer i;
    string msg=title+"\n";
    integer ct = llGetListLength(article_list)/4;
    for (i = 0; i < ct; i++) msg+=llList2String(article_list,4*i)+"."+llList2String(article_list,4*i+1)+"\n";
   
    llSetText(msg,<0,1,0>,1);
}

fetchdata(string data) {
    string tmpstr;
    counter++;
    list l1 = llParseString2List(data, ["<item>"], []);
    list l2 = llParseString2List(llList2String(l1,1), ["\n"], []);
    string title = getvalue(llList2String(l2,0),"</title>");
    string link = getvalue(llList2String(l2,1),"</link>");
    string description = getvalue(llList2String(l2,2),"</description>");
    article_list+=[(string)counter,title,link,description];
    if (counter<articleCount) {
        http_req=llHTTPRequest(pipeURL+(string)counter,[HTTP_METHOD,"GET"],"");
    } else showInfo();
}


string getvalue (string str,string tag) {
    string tmpstr=llInsertString(llStringTrim(str,STRING_TRIM),1,"/");
    list l = llParseString2List(tmpstr, [tag], []);
    tmpstr=llList2String(l,0);
    tmpstr=llGetSubString(tmpstr,0,50);
    return tmpstr;
}

refresh_article () {
    counter=0;
    article_list=[];
    llSetText("Refresh Now...",<0,1,0>,1);
    http_req=llHTTPRequest(pipeURL+(string)counter,[HTTP_METHOD,"GET"],"");
}

default
{
   
    state_entry() {
        refresh_article();
        llSetTimerEvent(refreshRate);
    }
   
    on_rez(integer param){
        llResetScript();
    }
   
    touch_start(integer t)    {
        handle = llListen(input_ch,"",llDetectedKey(0),"");
        list menulist=llList2ListStrided(article_list, 0, -1, 4);
        menulist+=["Refresh"];
        llDialog(llDetectedKey(0), "Please select articel.", menulist, input_ch);
    }
   
    listen(integer ch, string name, key id, string message) {
        if (message=="Refresh") refresh_article();
        else {
            integer index=llListFindList(article_list,[message]);
            string title=llList2String(article_list,index+1);
            string link=llList2String(article_list,index+2);
            string description=llList2String(article_list,index+3);
            llLoadURL(llGetOwner(), "++++++++++++\n"+title+"\n++++++++++++\n"+description, link);
        }
        llListenRemove(handle);
    }
   
    timer(){
        refresh_article();
    }
   
    http_response(key request_id, integer status, list metadata, string body) {
        if (request_id == http_req) {
            fetchdata(body);
        }
    }

}

Wikiをベースにしてましたが日本語の方が楽なのでslmameで検索してなかったら
wikiに行くってことにしました。

2 件のコメント:

  1. xstreetで見つけました

    https://www.xstreetsl.com/modules.php?name=Marketplace&file=item&ItemID=122338

    L$39

    返信削除
  2. yahoo pipingsの仕組みがよくわからないです。

    もしも自分のブログのRSSを取ろうとすると
    ここに登録するってことになるのかな?

    サイトがキメウチなら十分なんですけどね。
    あと、フローティングテキスト版は低プリムになるし、いいですね。

    返信削除