User:Opensource Obscure/http/snurl-sample
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