User:Opensource Obscure/http/snurl-sample
This building changes its colors according to this panel control: http://open.myartsonline.com/http-in/control.php
Feel free to visit, change the colors and warn me if it doesn't work! SLURL
Here are the LSL scripts. For the HTML, look the web page source
first script - it manages HTTP calls and talks to snurl.com in order to keep stable its snurl.com short url
<lsl>
// first, create a short URL via snurl.com website // any web address will work // your short URL will be like this: http://snurl.com/WHATEVER string snurlnick = "WHATEVER"; // change this!
key mykey = "YOUR-SL-UUID"; // YOUR SL UUID
string user = "YOUR-SNURL-USERNAME"; string api_key = "YOUR-SNURL-API-KEY";
// this script sends a chat message to 3 private channels // here are 3 channels integer chan1 = -20241; integer chan2 = -20242; integer chan3 = -20243;
string url;
string query;
string nome;
string baseurl = "http://snipr.com/site/getsnip";
string t1 = "my address is ";
key requestid;
integer status = FALSE;
list requests;
vector pos_orig;
// richiedo un nuovo URL per lo script
setup()
{
url = ""; llRequestURL();
}
// risponde via HTTP
send_response(key id, string body)
{
llHTTPResponse(id, 200, body);
}
// chiamata alle API di Snurl per generare un nuovo URL breve
// non so se funziona
// viene usata solo se si decommenta la chiamata dentro http_request()
generate_snurl(string testo)
{
query = "sniplink=" + llEscapeURL(testo) + "&snipuser=" + user + "&snipapi=" + api_key + "&snipnick=" + snurlnick; requestid = llHTTPRequest(baseurl,[HTTP_METHOD,"POST", HTTP_MIMETYPE,"application/x-www-form-urlencoded"],query);
}
// chiamata alle API di Snurl // viene usata ogni volta che lo script viene resettato // e l'URL lungo cambia update_snurl(string testo) {
query = "sniplink=" + llEscapeURL(testo) + "&snipuser=" + user + "&snipapi=" + api_key + "&snipaction=UPDATE" + "&snipcurrentnick=" + snurlnick + "&snipresetcount="; requestid = llHTTPRequest(baseurl,[HTTP_METHOD,"POST", HTTP_MIMETYPE,"application/x-www-form-urlencoded"],query);
}
// fa qualcosa
fa(key id, string asd)
{
string a = llUnescapeURL(asd); send_response(id, a); list variabili = llParseString2List(asd, ["color1=", "&color2=","&color3=", "&rez=", "&a="], [""]); string color1 = llUnescapeURL(llList2String(variabili, 0)); string color2 = llUnescapeURL(llList2String(variabili, 1)); string color3 = llUnescapeURL(llList2String(variabili, 2)); integer rez = (integer)llUnescapeURL(llList2String(variabili, 3)); string messaggio = llUnescapeURL(llList2String(variabili, 4)); llSay(chan1, (string)sbColorConvert(color1)); llSay(chan2, (string)sbColorConvert(color2)); llSay(chan3, (string)sbColorConvert(color3)); llSetPrimitiveParams([ PRIM_COLOR, ALL_SIDES, (vector)color1, 1.0 ]); altro(rez); if(messaggio) { llSay(0, messaggio); }
}
altro(integer value)
{
if(value) { string a = llGetInventoryName(INVENTORY_OBJECT,0); llSay(0, "rezzo " + a); llRezObject(a, pos_orig + <0,0,1>, <0,0,0>, <0,0,0,0>, 1); }
}
list lstHTML = [
"aliceblue", 0xf0f8ff, "antiquewhite", 0xfaebd7, "aqua", 0x00ffff, "aquamarine", 0x7fffd4, "azure", 0xf0ffff, "beige", 0xf5f5dc, "bisque", 0xffe4c4, "black", 0x000000, "blanchedalmond", 0xffebcd, "blue", 0x0000ff, "blueviolet", 0x8a2be2, "brown", 0xa52a2a, "burlywood", 0xdeb887, "cadetblue", 0x5f9ea0, "chartreuse", 0x7fff00, "chocolate", 0xd2691e, "coral", 0xff7f50, "cornflowerblue", 0x6495ed, "cornsilk", 0xfff8dc, "crimson", 0xdc143c, "cyan", 0x00ffff, "darkblue", 0x00008b, "darkcyan", 0x008b8b, "darkgoldenrod", 0xb8860b, "darkgray", 0xa9a9a9, "darkgreen", 0x006400, "darkkhaki", 0xbdb76b, "darkmagenta", 0x8b008b, "darkolivegreen", 0x556b2f, "darkorange", 0xff8c00, "darkorchid", 0x9932cc, "darkred", 0x8b0000, "darksalmon", 0xe9967a, "darkseagreen", 0x8fbc8f, "darkslateblue", 0x483d8b, "darkslategray", 0x2f4f4f, "darkturquoise", 0x00ced1, "darkviolet", 0x9400d3, "deeppink", 0xff1493, "deepskyblue", 0x00bfff, "dimgray", 0x696969, "dodgerblue", 0x1e90ff, "firebrick", 0xb22222, "floralwhite", 0xfffaf0, "forestgreen", 0x228b22, "fuchsia", 0xff00ff, "gainsboro", 0xdcdcdc, "ghostwhite", 0xf8f8ff, "gold", 0xffd700, "goldenrod", 0xdaa520, "gray", 0x808080, "green", 0x008000, "greenyellow", 0xadff2f, "honeydew", 0xf0fff0, "hotpink", 0xff69b4, "indianred", 0xcd5c5c, "indigo", 0x4b0082, "ivory", 0xfffff0, "khaki", 0xf0e68c, "lavender", 0xe6e6fa, "lavenderblush", 0xfff0f5, "lawngreen", 0x7cfc00, "lemonchiffon", 0xfffacd, "lightblue", 0xadd8e6, "lightcoral", 0xf08080, "lightcyan", 0xe0ffff, "lightgoldenrodyellow", 0xfafad2, "lightgrey", 0xd3d3d3, "lightgreen", 0x90ee90, "lightpink", 0xffb6c1, "lightsalmon", 0xffa07a, "lightseagreen", 0x20b2aa, "lightskyblue", 0x87cefa, "lightslategray", 0x778899, "lightsteelblue", 0xb0c4de, "lightyellow", 0xffffe0, "lime", 0x00ff00, "limegreen", 0x32cd32, "linen", 0xfaf0e6, "magenta", 0xff00ff, "maroon", 0x800000, "mediumaquamarine", 0x66cdaa, "mediumblue", 0x0000cd, "mediumorchid", 0xba55d3, "mediumpurple", 0x9370d8, "mediumseagreen", 0x3cb371, "mediumslateblue", 0x7b68ee, "mediumspringgreen", 0x00fa9a, "mediumturquoise", 0x48d1cc, "mediumvioletred", 0xc71585, "midnightblue", 0x191970, "mintcream", 0xf5fffa, "mistyrose", 0xffe4e1, "moccasin", 0xffe4b5, "navajowhite", 0xffdead, "navy", 0x000080, "oldlace", 0xfdf5e6, "olive", 0x808000, "olivedrab", 0x6b8e23, "orange", 0xffa500, "orangered", 0xff4500, "orchid", 0xda70d6, "palegoldenrod", 0xeee8aa, "palegreen", 0x98fb98, "paleturquoise", 0xafeeee, "palevioletred", 0xd87093, "papayawhip", 0xffefd5, "peachpuff", 0xffdab9, "peru", 0xcd853f, "pink", 0xffc0cb, "plum", 0xdda0dd, "powderblue", 0xb0e0e6, "purple", 0x800080, "red", 0xff0000, "rosybrown", 0xbc8f8f, "royalblue", 0x4169e1, "saddlebrown", 0x8b4513, "salmon", 0xfa8072, "sandybrown", 0xf4a460, "seagreen", 0x2e8b57, "seashell", 0xfff5ee, "sienna", 0xa0522d, "silver", 0xc0c0c0, "skyblue", 0x87ceeb, "slateblue", 0x6a5acd, "slategray", 0x708090, "snow", 0xfffafa, "springgreen", 0x00ff7f, "steelblue", 0x4682b4, "tan", 0xd2b48c, "teal", 0x008080, "thistle", 0xd8bfd8, "tomato", 0xff6347, "turquoise", 0x40e0d0, "violet", 0xee82ee, "wheat", 0xf5deb3, "white", 0xffffff, "whitesmoke", 0xf5f5f5, "yellow", 0xffff00, "yellowgreen", 0x9acd32 ];
vector sbColorConvert(string strData) {
integer mode = llListFindList(lstHTML, [llToLower(strData)]); integer intColor = 0; if (~mode) { intColor = llList2Integer(lstHTML, mode | 1); mode = 8; } else { string strStart = llGetSubString(strData, 0, 1); if (strStart != "0x") { if (llGetSubString(strStart, 0, 0) == "#") { strData = "0x" + llDeleteSubString(strData, 0, 0); } else { vector vecColor = (vector)("<"+strData+">"); if (vecColor) { return (vector)("<"+strData+">") / 255; } strData = "0x" + strData; } } intColor = (integer)strData; mode = llStringLength(strData); } if (mode == 8) {//RRGGBB return <(intColor >> 16) & 0xFF, (intColor >> 8) & 0xFF, (intColor & 0xFF)> / 0xFF; } else if (mode == 5) {//RGB (an HTML color format) return <(intColor >> 8) & 0xF, (intColor >> 4) & 0xF, (intColor & 0xF)> / 0xF; } return ZERO_VECTOR;//black
}
default {
state_entry() { setup(); pos_orig = llGetPos(); } on_rez(integer n) { setup(); }
changed(integer c) { if (c & (CHANGED_REGION | CHANGED_REGION_START | CHANGED_TELEPORT) ) { setup(); } }
// scatta in risposta a setup() cioe' alla richiesta di un nuovo URL
http_request(key id, string method, string body) { // ci e' stato correttamente assegnato un nuovo URL if (method == URL_REQUEST_GRANTED) { url = body; //generate_snurl(url); // solo all'inizio update_snurl(url); } else if (method == URL_REQUEST_DENIED) { llInstantMessage(mykey, "Something went wrong, no url. " + body); } // script gets called - e.g. link pressed on a web page // do something (apologize for funny var names) else if (method == "GET") { string asd = llGetHTTPHeader(id, "x-query-string"); fa(id,asd); } else { llHTTPResponse(id,405,"Unsupported method."); } }
// comunico gli URL dello script
touch_start(integer total_number) { llInstantMessage(mykey, "my url is " + url + " - that is " + nome); }
// Comunica alcuni dati sul proprio funzionamento.
// Scatta quando Snurl risponde alla chiamata alle API;
// se tutto va bene, l'indirizzo breve ora punta correttamente
// al nuovo indirizzo lungo dello script.
http_response(key request_id, integer status, list metadata, string body) { integer i; if (request_id == requestid) { integer i = llSubStringIndex(body,"<id>"); integer j = llSubStringIndex(body,"</id>"); integer length = j - i; if ( i != -1 ) { // llWhisper(0, "... " + (string)length); // debug length nome = llGetSubString(body,i+4,i+llStringLength("<id>")+21); llInstantMessage(mykey, "sono " + url + " - corrisponde a " + nome); // debug } } else llInstantMessage(mykey, (string)status+" error"); }
}
</lsl>
second script - it listens to the first script and it changes the prim color
<lsl> default {
state_entry() { llListen(-20241, "", "", ""); } listen(integer chan, string name, key id, string msg) { llSetLinkColor(-1, (vector)msg, ALL_SIDES); }
} </lsl>
third and fourth script - see second script and change chat channel to 20242 and 20243