さて、2010年7月上旬頃に行われたリンデンのwebページ改変によって、従来普及していたimgタグを読み込む方法ではプロフ画像の取得ができなくなってしまいました。お困りの方も多いと思います。(私も最初、あわてましたw)
先日、私がバージョンアップした製品で行った修正のエッセンスだけを抽出したサンプルスクリプトを作りましたので公開します。
ちなみにこのサンプルでは、このスクリプトを入れたプリムをタッチした人のプロフ画像を表示するようになっています。プロフ画像を登録していない人や公開していない人は、ブランク画像が表示されるようになっています。(正常系はテスト済です。プロフ登録のない人がタッチしたら、、、たぶん動くと思うけど保証はできません。あしからず^^; )
まずは、サクっとソースからw
---
// profile picture get
// 2010.07.12 snowlet Magic
integer side = ALL_SIDES; //ALL_SIDES or face number 0 through 5
string Texture_blank = "5748decc-f629-461c-9a36-a35a221fe21f" ;
//States
default
{
state_entry()
{
llSetTexture(Texture_blank, side);
}
on_rez(integer start_param)
{
llResetScript();
}
touch_start (integer total_number)
{
// profile url set
string URL_RESIDENT = "http://world.secondlife.com/resident/";
llHTTPRequest( URL_RESIDENT + (string)llDetectedKey(0),[HTTP_METHOD,"GET"],"");
}
http_response(key req,integer stat, list met, string body)
{
string Meta_string = "<meta name=\"imageid\" content=\"" ;
integer Meta_position = llSubStringIndex(body,Meta_string);
integer Meta_length = llStringLength(Meta_string);
integer UUID_length = 35 ; // RFC 4122
string imageid = llGetSubString(body,Meta_position+Meta_length,Meta_position+Meta_length+UUID_length); // get profile image uuid
if ((key)imageid != NULL_KEY){ // profile uuid check
llSetTexture(imageid, side); // true
}else{
llSetTexture(Texture_blank, side); // false
llSay(0,"No Image");
}
}
}
---従来まで広く一般的に行われていた方法との違いです。
従来の方法)
リンデンのプロフが表示されるwebページの中程に位置していたimgタグの情報を読み取ってプロフ画像のUUIDを拾っていた。
修正後の方法)
リンデンのプロフが表示されるwebページのヘッダ部分にメタタグ(imageid)としてプロフ画像のUUIDが埋め込まれているので、そちらを読み込むようにしました。
ちなみに、、、ソースをみて頂ければわかるとおもいますが、プロフ画像のUUIDは固定長として処理しています。まぁ、RFCで規定されてる規格なので、これで問題ないと考えてのことなのですが・・・w気になる方は、この辺もちゃんと処理するようにしてくださいね^^;
あと、画像が取得できなかった場合、画像のUUIDとしてNULL_KEYが返ります。今までみたいな、FALSEが帰ってくるとかではないので条件分岐などする場合はご注意ください。

0 コメント:
コメントを投稿