Talk:LibraryDisplayLandScreenshot: Difference between revisions

From Second Life Wiki
Jump to navigation Jump to search
Created page with "This script seems to be no longer working since the page it accesses has been altered to a point that the script can no longer handle the change."
 
m format
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
This script seems to be no longer working since the page it accesses has been altered to a point that the script can no longer handle the change.
This script seems to be no longer working since the page it accesses has been altered to a point that the script can no longer handle the change. {{unsigned|Fritigern Gothly|03:43, 24 May 2014}}
: Yep, looks pretty dead. The imageid meta tag is toast, and all the added banner gunk pushes the <img> tag past 16K. User-agent spoofing almost looked like it would save the day, but the banner gunk is still there, just hidden. --[[User:Cerise Sorbet|Cerise Sorbet]] 17:57, 24 May 2014 (PDT)
 
::I came to the same conclusion. I'd say open a new JIRA for this. -- '''[[User:Strife_Onizuka|Strife]]''' <sup><small>([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])</small></sup> 18:37, 24 May 2014 (PDT)
 
::: and bibbidi-bobbidi-boo! {{Jira|BUG-6151}} --[[User:Cerise Sorbet|Cerise Sorbet]] 19:47, 24 May 2014 (PDT)
 
:::: Below should work :
<lsl>
// Credit goes to Jana Kamachi/Solar Alter
// for discovering this concept first
// and taking it beyond just displaying the profile picture
// see http://forums.secondlife.com/showthread.php?t=225460
// and https://wiki.secondlife.com/wiki/User:Jana_Kamachi/Profile
// for further information
/*
    Modified by Jon Desmoulins to use the new PARCEL_DETAILS_ID
    to fetch the image that displays on the world.secondlife.com pages
    It's a little hacky, but it works.
*/
 
 
 
string gLandUrl = "http://world.secondlife.com/place/";  //Base URL for world search
 
ResetTextures()
{
    llSetTexture(TEXTURE_BLANK, ALL_SIDES);
}
default
{
    state_entry()
    {
        ResetTextures();
    }
    touch_start(integer num_detected)
    {
        string parcelID = (string)llList2Key(llGetParcelDetails(llGetPos(), [PARCEL_DETAILS_ID]), 0);
        string worlURL = gLandUrl + parcelID;
 
// We are going to call YQL yahoo API to fetch world.secondlife.com and parse the HTML page
// YQL can give XML answer or JSON answer .
// As we can easier parse JSON answers we request JSON answer
       
        string requestYQL = llEscapeURL("select src from html where url=\"")  + worlURL + llEscapeURL("\"" )
                          + llEscapeURL(" and xpath='//img[@class=\"parcelimg\"]'");
 
// The Xpath rule means : Inside all the HTML document from world.secondlife.com ,
// give me the img attributes who have
// an attribute class named parcelimg
// From these answers give me the src value of the img
 
        string requestREST = "http://query.yahooapis.com/v1/public/yql?q=" + (requestYQL) +  "&format=json&callback=";
                   
        llHTTPRequest(requestREST, [], "");       
    }
    on_rez(integer start_param)
    {
        ResetTextures();
    }
    http_response(key request_id,integer status, list metadata, string body)
    {
 
        if (status == 200)
        {
// We have requested the answer in the JSON Format
// We parse the JSON answer to grab our answer
            string urlImage =  llJsonGetValue ( body, [ "query" , "results" , "img", "src" ] );
           
            if ( urlImage != JSON_INVALID )
            {
                key UUIDImage = (key)llGetSubString(urlImage, -38, -3 );
               
               
                if ( UUIDImage != NULL_KEY )
                {
                    llOwnerSay("Found parcel image " + (string)UUIDImage);
                    llSetTexture(UUIDImage, ALL_SIDES);
                }
            }
            else
            {
                llOwnerSay("Could not retrieve parcel page, parcel not found");
                ResetTextures();     
            }     
 
        }
        else if ( status == 400 )
// YQL return error 400 and fills field errors  when the YQL request is invalid ;
// We are grabbing the error
        {
            llOwnerSay("Could not retrieve parcel page, error YQL");
            if ( llJsonValueType ( body, [ "error" , "description"] )  == JSON_STRING )
            {
                llOwnerSay(  llJsonGetValue ( body, [ "error" , "description" ] ));
            }           
            ResetTextures();
        }
        else // other errors ( network .. etc ... )
        {
            llOwnerSay("Could not retrieve parcel page, error HTTP");
            llOwnerSay(llList2CSV(["Error HTTP", status]));
            ResetTextures();
        }
    }
}
</lsl>
[[User:Miranda Umino|Miranda Umino]] 20:15, 28 May 2014 (PDT)

Latest revision as of 05:32, 29 May 2014

This script seems to be no longer working since the page it accesses has been altered to a point that the script can no longer handle the change. —The preceding unsigned comment was added on 03:43, 24 May 2014 by Fritigern Gothly

Yep, looks pretty dead. The imageid meta tag is toast, and all the added banner gunk pushes the <img> tag past 16K. User-agent spoofing almost looked like it would save the day, but the banner gunk is still there, just hidden. --Cerise Sorbet 17:57, 24 May 2014 (PDT)
I came to the same conclusion. I'd say open a new JIRA for this. -- Strife (talk|contribs) 18:37, 24 May 2014 (PDT)
and bibbidi-bobbidi-boo! BUG-6151 --Cerise Sorbet 19:47, 24 May 2014 (PDT)
Below should work :

<lsl> // Credit goes to Jana Kamachi/Solar Alter // for discovering this concept first // and taking it beyond just displaying the profile picture // see http://forums.secondlife.com/showthread.php?t=225460 // and https://wiki.secondlife.com/wiki/User:Jana_Kamachi/Profile // for further information

/*

   Modified by Jon Desmoulins to use the new PARCEL_DETAILS_ID
   to fetch the image that displays on the world.secondlife.com pages
   It's a little hacky, but it works.
  • /


string gLandUrl = "http://world.secondlife.com/place/"; //Base URL for world search


ResetTextures() {

   llSetTexture(TEXTURE_BLANK, ALL_SIDES);

}

default {

   state_entry()
   {
       ResetTextures();
   }

   touch_start(integer num_detected)
   {
       string parcelID = (string)llList2Key(llGetParcelDetails(llGetPos(), [PARCEL_DETAILS_ID]), 0);
       string worlURL = gLandUrl + parcelID;

// We are going to call YQL yahoo API to fetch world.secondlife.com and parse the HTML page // YQL can give XML answer or JSON answer . // As we can easier parse JSON answers we request JSON answer

       string requestYQL = llEscapeURL("select src from html where url=\"")  + worlURL + llEscapeURL("\"" ) 
                          + llEscapeURL(" and xpath='//img[@class=\"parcelimg\"]'");

// The Xpath rule means : Inside all the HTML document from world.secondlife.com , // give me the img attributes who have // an attribute class named parcelimg // From these answers give me the src value of the img

       string requestREST = "http://query.yahooapis.com/v1/public/yql?q=" + (requestYQL) +  "&format=json&callback=";

                   
       llHTTPRequest(requestREST, [], "");        
   }

   on_rez(integer start_param)
   {
       ResetTextures();
   }

   http_response(key request_id,integer status, list metadata, string body)
   {
       if (status == 200)
       {

// We have requested the answer in the JSON Format // We parse the JSON answer to grab our answer

           string urlImage =  llJsonGetValue ( body, [ "query" , "results" , "img", "src" ] );
           
           if ( urlImage != JSON_INVALID )
           { 
               key UUIDImage = (key)llGetSubString(urlImage, -38, -3 );
               
                
               if ( UUIDImage != NULL_KEY )
               {
                   llOwnerSay("Found parcel image " + (string)UUIDImage);
                    llSetTexture(UUIDImage, ALL_SIDES);
               }
           }
           else
           {
               llOwnerSay("Could not retrieve parcel page, parcel not found");
               ResetTextures();      
           }      
       }
       else if ( status == 400 ) 

// YQL return error 400 and fills field errors when the YQL request is invalid ; // We are grabbing the error

       {
           llOwnerSay("Could not retrieve parcel page, error YQL");
           if ( llJsonValueType ( body, [ "error" , "description"] )  == JSON_STRING )
           {
               llOwnerSay(  llJsonGetValue ( body, [ "error" , "description" ] ));
           }            
           ResetTextures();
       }
       else // other errors ( network .. etc ... )
       {
           llOwnerSay("Could not retrieve parcel page, error HTTP");
           llOwnerSay(llList2CSV(["Error HTTP", status]));
           ResetTextures();
       }
   }

} </lsl> Miranda Umino 20:15, 28 May 2014 (PDT)