Difference between revisions of "User:Opensource Obscure/http/snurl-sample"

From Second Life Wiki
Jump to navigation Jump to search
m
Line 41: Line 41:




// richiedo un nuovo URL per lo script
// ask a new URL
setup()
setup()
{
{
Line 49: Line 49:




// risponde via HTTP
// HTTP response
send_response(key id, string body)
send_response(key id, string body)
{
{
Line 56: Line 56:




// chiamata alle API di Snurl per generare un nuovo URL breve
// NOT USED
// non so se funziona
// viene usata solo se si decommenta la chiamata dentro http_request()
generate_snurl(string testo)
generate_snurl(string testo)
{
{
Line 68: Line 66:
}
}


// chiamata alle API di Snurl
 
// viene usata ogni volta che lo script viene resettato
// used everytime the script resets
// e l'URL lungo cambia
// it calls snurl.com APIs and it tells its new long URL. then, I call the short URL + parameters
update_snurl(string testo)
update_snurl(string testo)
{
{
Line 83: Line 81:




// fa qualcosa
// do something
fa(key id, string asd)
fa(key id, string asd)
{
{
Line 108: Line 106:




// do something else
altro(integer value)
altro(integer value)
{
{
Line 227: Line 226:




// scatta in risposta a setup() cioe' alla richiesta di un nuovo URL 
// this happens after setup()  
     http_request(key id, string method, string body)
     http_request(key id, string method, string body)
     {
     {
         // ci e' stato correttamente assegnato un nuovo URL
         // we got a new URL
         if (method == URL_REQUEST_GRANTED)
         if (method == URL_REQUEST_GRANTED)
         {
         {
             url = body;   
             url = body;   
             //generate_snurl(url); // solo all'inizio
             //generate_snurl(url); // not used
             update_snurl(url);             
             update_snurl(url);             
         }
         }
Line 263: Line 262:




// Comunica alcuni dati sul proprio funzionamento.
// tell some info
// 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)
     http_response(key request_id, integer status, list metadata, string body)
     {
     {
Line 279: Line 275:
                 // llWhisper(0, "... " + (string)length); // debug length
                 // llWhisper(0, "... " + (string)length); // debug length
                 nome = llGetSubString(body,i+4,i+llStringLength("<id>")+21);     
                 nome = llGetSubString(body,i+4,i+llStringLength("<id>")+21);     
                 llInstantMessage(mykey, "sono " + url + " - corrisponde a " + nome); // debug
                 llInstantMessage(mykey, "i'm " + url + " - that is " + nome); // debug
             }
             }
         } else
         } else

Revision as of 13:52, 20 July 2009

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;


// ask a new URL setup() {

   url = "";
   llRequestURL();

}


// HTTP response send_response(key id, string body) {

   llHTTPResponse(id, 200, body);

}


// NOT USED 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);    

}


// used everytime the script resets // it calls snurl.com APIs and it tells its new long URL. then, I call the short URL + parameters 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);    

}


// do something 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);
   }

}


// do something else 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();
       }
   }


// this happens after setup()

   http_request(key id, string method, string body)
   {
       // we got a new URL
       if (method == URL_REQUEST_GRANTED)
       {
           url = body;  
           //generate_snurl(url); // not used
           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); 
   }    


// tell some info

   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, "i'm " + url + " - that is " + 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