月曜日, 8月 24, 2009

HTTPURLを短縮するスクリプト

ようやく仕事を休めるようになって、遅い夏休み満喫中です。
Taifrogです。





今日は暇つぶしに、自分(スクリプトの入ってるオブジェクト)のHTTP_Response用URLをbit.lyサービスを使って短縮するスクリプトを作ってみました。


LSL PortalにあるVirtualID URLMapというLSLのサンプルを見ていたのですが、
Apezの独自サービスを使って短縮(Aliasの目的)をしているようだったので、
もうちょっと一般的なサービス(bit.lyは一応一般的になったんじゃない??)を使って似たようなことをやった方がいいんじゃないかと思って試してみました。


bit.ly APIを使うためには、通常のユーザ登録を行い、API Keyを入手する必要があります(下のスクリプト内の XXXXXみたいなとこに入れる必要あり)。


ちなみに、URLはころころ変わるのですが、その辺まではめんどくさくて作ってないのですが、
元のスクリプト(VirtualID URLMap)を参考にすれば、Changedイベントや時間なんかで適宜リセットする部分を追加することが出来ると思います。


特に使い道が思い浮かばなかったので、これで終了・・・。



VirtualID URLMap
http://wiki.secondlife.com/wiki/HTTP-in_URLMap_redirector



作ったやつ
********************************

integer DEBUG=0;
key http_request_id;
key url_req_key;
key map_req_id;


DebugPrint(integer lv, string msg)
{
if(DEBUG>=lv) llOwnerSay(llGetObjectName() + "." + llGetScriptName() + ":" + msg);
}

GetShortUrl_bitly(string seturl)
{
string ver = "2.0.1";
string loginuser = "XXXXX";
string apicode = "XXXXXXXXXXXXXXXXXXXXXXXXXX";

string url = "http://api.bit.ly/shorten?version=" + ver + "&longUrl=" + seturl + "&login=" + loginuser + "&apiKey=" + apicode;

DebugPrint(1, "url=" + url);
http_request_id = llHTTPRequest(url, [], "");
}

default
{
state_entry()
{
DebugPrint(1, "state_entry, RequestURL");
url_req_key = llRequestURL();
}

http_request(key id, string method, string body)
{
DebugPrint(1, "http_request in");

if (method == URL_REQUEST_GRANTED){
DebugPrint(1, "method=" + method + "\nbody=" + body);
GetShortUrl_bitly(body);
}
}

http_response(key request_id, integer status, list metadata, string body)
{
DebugPrint(1, "http_response in");

string keyw = "\"shortUrl\": \"";
string getshorturl;
string a;

if (request_id == http_request_id){
DebugPrint(1, "body=" + body);


a = llGetSubString(body, llSubStringIndex(body, keyw) + 13, -1);
DebugPrint(1, "a=" + a);
getshorturl = llGetSubString(a, 0, llSubStringIndex(a, "\"") - 1);

llSetText(getshorturl, <1,1,1>, 1.0);

}
}

}

********************************

0 件のコメント: