User:Opensource Obscure/http/snurl-sample

From Second Life Wiki
Jump to navigation Jump to search

Rossoverde.jpg

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