2008年01月15日
SLMap API ハック
Web-APIとしてのSLMap APIの、ちょっとイレギュラーな利用方法
公開されているJavaScriptを参照
http://slurl.com/slmapapi.js
■SIM名からSIM座標を得る
https://cap.secondlife.com/cap/0/d661249b-2b5a-4436-966a-3d3b8d7a574f?var=slRegionPos_result&sim_name=Akiba
これで以下の値が帰ってくる
var slRegionPos_result = {'x' : 885, 'y' : 1187 };
これは、SIMの座標です
■SIM画像を得る
上記のx,yを利用して
x = そのまま
y = 1279 - x
として
http://secondlife.com/apps/mapapi/grid/map_image/885-92-1-0.jpg
が得られる
■SIM座標からSIM名を得る
x,yをSIM座標とし、
https://cap.secondlife.com/cap/0/b713fe80-283b-4585-af4d-a3b7d9a32492?var=slRegionName&grid_x=885&grid_y=1187
とすると
var slRegionName='Akiba';
と帰ってくる
公開されているJavaScriptを参照
http://slurl.com/slmapapi.js
■SIM名からSIM座標を得る
https://cap.secondlife.com/cap/0/d661249b-2b5a-4436-966a-3d3b8d7a574f?var=slRegionPos_result&sim_name=Akiba
これで以下の値が帰ってくる
var slRegionPos_result = {'x' : 885, 'y' : 1187 };
これは、SIMの座標です
■SIM画像を得る
上記のx,yを利用して
x = そのまま
y = 1279 - x
として
http://secondlife.com/apps/mapapi/grid/map_image/885-92-1-0.jpg
が得られる
■SIM座標からSIM名を得る
x,yをSIM座標とし、
https://cap.secondlife.com/cap/0/b713fe80-283b-4585-af4d-a3b7d9a32492?var=slRegionName&grid_x=885&grid_y=1187
とすると
var slRegionName='Akiba';
と帰ってくる
2008年01月09日
llEscapeURLの文字数制限
ちょっと懐かしめの題材だけど、忘れんように...
llEscapeURLは変換できる文字数に制限があるけど、
文字を分割して変換し、連結すればうまいことできる
下は関数化したもの
string largeEscapeURL(string s){
string ret = "";
integer i;
for(i=0; i
ret = ret + llEscapeURL(llGetSubString(s, i*12, i*12+11));
}
return ret;
}
llEscapeURLは変換できる文字数に制限があるけど、
文字を分割して変換し、連結すればうまいことできる
下は関数化したもの
string largeEscapeURL(string s){
string ret = "";
integer i;
for(i=0; i
}
return ret;
}
タグ :文字化け
2007年07月21日
2007年04月19日
PHPからベーシック認証を通す
Twitterなどを外部(SL)から利用する際、
あるいはGoogle API群などを利用する場合にはベーシック認証が避けられない。
よく考えたらPHPからベーシック認証を通したことが無かったのでちょいと調査。
PearのHTTP_Requestでお手軽に実装可能でした。
下記はサンプルコード
$url='http://twitter.com/statuses/friends_timeline.xml';
// 必要ならば
$path = 'インクルードパス';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
require_once('HTTP/Request.php');
$req=& new HTTP_Request($url);
$req->setBasicAuth("id", "password");
$req->sendRequest();
/*
foreach ($req->getResponseHeader() as $name => $value) {
echo $name . " = " . $value . "\n";
}
*/
echo $req->getResponseHeader("status");
あるいはGoogle API群などを利用する場合にはベーシック認証が避けられない。
よく考えたらPHPからベーシック認証を通したことが無かったのでちょいと調査。
PearのHTTP_Requestでお手軽に実装可能でした。
下記はサンプルコード
$url='http://twitter.com/statuses/friends_timeline.xml';
// 必要ならば
$path = 'インクルードパス';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
require_once('HTTP/Request.php');
$req=& new HTTP_Request($url);
$req->setBasicAuth("id", "password");
$req->sendRequest();
/*
foreach ($req->getResponseHeader() as $name => $value) {
echo $name . " = " . $value . "\n";
}
*/
echo $req->getResponseHeader("status");
2007年04月16日
llHTTPRequesで外部通信
llHTTPRequesで外部通信...についてまとめました(PHP)
http://create.artstaff.co.jp/sl/MailLoger.htm
ちょっとマニアックかも知れませんし、見てみてまったく理解不能って方は
無理してPHPを設置するべきではありません(セキュリティとか怖い!)
でも、やってみたいなぁって方は、質問どうぞ!
http://create.artstaff.co.jp/sl/MailLoger.htm
ちょっとマニアックかも知れませんし、見てみてまったく理解不能って方は
無理してPHPを設置するべきではありません(セキュリティとか怖い!)
でも、やってみたいなぁって方は、質問どうぞ!
2007年04月04日
2007年04月04日
httpでシムのグローバル座標を取得する(PHP)
概要
PHPで、Second Life Map APIからシムの座標情報を配列に格納します。
この行為が規約的にどうかは調べていません。
各個人の責任と判断でご使用ください。
動作サンプル
http://www.yambal.net/sl/RegList.php
$SLMapAPIJS = "http://secondlife.com/apps/mapapi/";
$MatchP = "/rlh\[\"[0-9]*-[0-9]*\"\]=\"[^\"]*\";/im";
$src = file_get_contents($SLMapAPIJS);
if(preg_match_all($MatchP,$src,$match)){
$match = $match[0];
$RegionIndex = array();
while($Row = each($match)){
$Row = split("=",$Row['value']);
if(count($Row)==2){
$match_n = trim(str_replace(array('rlh[',']','"'),"",$Row[0]));
//$Global = split("-",$match_n);
//$Gx = (integer)$Global[0];
//$Gy = (integer)$Global[1];
$match_r = trim(str_replace(array('"','"',';'),"",$Row[1]));
$RegionIndex[$match_r] = $match_n;
};
};
// Test
echo "Region=".count($RegionIndex)."
";
var_dump($RegionIndex);
}else{
echo "Error";
}
レスポンスはSecond Life Map APIに強く依存するから、頻繁に使用する場合はキャッシュしたほうがいいのかもしれない。
ここから
えんやこらっとMap画像を呼び出したいのだが...
PHPで、Second Life Map APIからシムの座標情報を配列に格納します。
この行為が規約的にどうかは調べていません。
各個人の責任と判断でご使用ください。
動作サンプル
http://www.yambal.net/sl/RegList.php
$SLMapAPIJS = "http://secondlife.com/apps/mapapi/";
$MatchP = "/rlh\[\"[0-9]*-[0-9]*\"\]=\"[^\"]*\";/im";
$src = file_get_contents($SLMapAPIJS);
if(preg_match_all($MatchP,$src,$match)){
$match = $match[0];
$RegionIndex = array();
while($Row = each($match)){
$Row = split("=",$Row['value']);
if(count($Row)==2){
$match_n = trim(str_replace(array('rlh[',']','"'),"",$Row[0]));
//$Global = split("-",$match_n);
//$Gx = (integer)$Global[0];
//$Gy = (integer)$Global[1];
$match_r = trim(str_replace(array('"','"',';'),"",$Row[1]));
$RegionIndex[$match_r] = $match_n;
};
};
// Test
echo "Region=".count($RegionIndex)."
";
var_dump($RegionIndex);
}else{
echo "Error";
}
レスポンスはSecond Life Map APIに強く依存するから、頻繁に使用する場合はキャッシュしたほうがいいのかもしれない。
ここから
えんやこらっとMap画像を呼び出したいのだが...
2007年04月03日
Second Life Map APIを紐解く
Second Life Map APIのスクリプトを読んでみた。
その成果としてはMapの直読みの見当がついた
ちなみにワシのおうち、AkibaのMapは...
ソコまで読んでみて、はてこの画像のIDはどうやって取得するのだろうかなと・・・
座標には違いないのだが、(Akibaの例では)X軸以外はLSLで取得できる変数と関連が見えにくい・・・
で、APIにもどって
SLPoint()
について、もう一度ソースを呼んでみる。
むは!
驚愕のスクリプトだ。
なんと、スクリプト中に配列で座標を持っていた・・・
例えば
o=new Object();
o.x=970;
o.y=1078;
lh["akiba"]=o;
rlh["970-1078"]="akiba";
みたいなかんじだ
これがSIM分列挙だ!
実際には、この["970-1078"]から[970-201]を導く関数が延々と続く...
読むのめんどくさいなぁ...
続きを読む
その成果としてはMapの直読みの見当がついた
ちなみにワシのおうち、AkibaのMapは...
ソコまで読んでみて、はてこの画像のIDはどうやって取得するのだろうかなと・・・
座標には違いないのだが、(Akibaの例では)X軸以外はLSLで取得できる変数と関連が見えにくい・・・
で、APIにもどって
SLPoint()
について、もう一度ソースを呼んでみる。
むは!
驚愕のスクリプトだ。
なんと、スクリプト中に配列で座標を持っていた・・・
例えば
o=new Object();
o.x=970;
o.y=1078;
lh["akiba"]=o;
rlh["970-1078"]="akiba";
みたいなかんじだ
これがSIM分列挙だ!
実際には、この["970-1078"]から[970-201]を導く関数が延々と続く...
読むのめんどくさいなぁ...
続きを読む
