Search API
API Guide
What is it?
The Second Life Search API allows you to search the virtual world of Second Life for Events, Groups, People, Places, and this Wiki. Linden Lab has purchased a Google Search Appliance to index web pages that they create each night and host on a separate web server.
Getting Started
The Second Life Search API is currently using a Google search appliance as the core of the API. You can search against the world using a standard web browser. Two URL's may be used as follows:
http://search.secondlife.com/client_search.php?q=object
http://secondlife.com/app/search/search_proxy.php?q=object
The difference between the two URL's is that the search proxy redirects to the "search.secondlife.com" domain.
Paging
Each query will return 10 results at the most. The parameter passed for paging is "start". This is a zero-based index identifying what record to start with. To view page 1, the following URL may be used.
q= [search for something here] &start= [(page - 1) * 10]
Page 1 http://search.secondlife.com/client_search.php?q=object&start=0
Page 2 http://search.secondlife.com/client_search.php?q=object&start=10
Page 3 http://search.secondlife.com/client_search.php?q=object&start=20
...
Page 100 http://search.secondlife.com/client_search.php?q=object&start=990
Note Any results after page 100 will return an error message similar to the following:
The requested URL /client_search.php&lang=en-us&session=00000000-0000-0000-0000-000000000000&dbg=0&m=n&t=n was not found on this server.
Location
When searching from the viewer, the location of the avatar is passed along to the Search API. This is optional. The coordinates do not appear to have any effect on the search results. They have the potential to show results based on your current location, (such as displaying nearby snapshots on Snapzilla). The following parameters are used.
Parameter | Data type | Description |
Region | string | Region name where avatar is located. |
X | integer | Position of avatar in region coordinates on X axis |
Y | integer | Position of avatar in region coordinates on Y axis |
Z | integer | Position of avatar in region coordinates on Z axis |
http://search.secondlife.com/client_search.php?q=object®ion=Here&x=128&y=128&z=36
Mature Content
By default, the Search API blocks mature content in its results. A parameter "m" may be specified to allow or block mature content. To allow mature content, the value should be "y" meaning "Yes". Blocking mature content will be "n" for "No".
PG Only http://search.secondlife.com/client_search.php?q=object&m=n
PG & Mature http://search.secondlife.com/client_search.php?q=object&m=y
In addition, you can still filter out mature results by appending a flag to the query "+-SLS_MATURE".
PG Only http://search.secondlife.com/client_search.php?q=object%20+-SLS_MATURE
Mature Only http://search.secondlife.com/client_search.php?q=object%20+SLS_MATURE&m=y
Note: %20 represents a URL Encoded space
Category
To limit the results to specific categories, the "s" parameter is used. This value defaults to "All", but can also be set to one of the following: All, Events, Groups, People, Places, Wiki.
Language
There are a few parameters that identify the language to display the results in. Although the searchable content provided by the residents is not translated, portions of the page are. This includes headers and informational text (such as the number of matching results).
The language (also known as local or culture) specified for the viewers user interface is passed along in the "lang" parameter. These are ISO 639-1 Values for language, and an optional country code (ISO 3166-1). Not all languages are supported. Some languages are in beta.
Language | Code | URI |
Spanish | es | http://search.secondlife.com/client_search.php?q=object&lang=es |
United States English | en-us | http://search.secondlife.com/client_search.php?q=object&lang=en-us |
In addition, another attribute appears in querys when navigating between pages using a standard web browser. It is assumed that this may represent the same value, but only provides the language code without the country code.
http://search.secondlife.com/client_search.php?q=object&hl=en
Output
At the moment, it appears that there are two fields that deal with output. The first "output" is probably telling the search appliance to return xml formatted data. The "client" parameter is then transforming the results into a different format. Since the client is raw_xml_frontend, it is probably not doing any transformation at all and sending us the exact output from the Google appliance.
Parameter | Value | Notes |
output | xml_no_dtd | xml results from appliance. output format. |
client | raw_xml_frontend | transform into xml results for user agent |
http://search.secondlife.com/client_search.php?q=object&output=xml_no_dtd&client=raw_xml_frontend
Miscellaneous Information
There are many other parameters that show up when observing the communications of the Search API. The following properties have been seen, but not identified properly.
Parameter | Default Value | Notes / Guesses |
t | n | Guessing teen grid. Teen = Y, Adult = N. Without proper session, defaults to N |
session | 00000000-0000-0000-0000-000000000000 | This value changes each time that the SL Viewer logs into the main grid. When querying against the appliance with a standard browser and navigating pages, the value is an empty Guid. |
site | default_collection | |
lr | (blank) | |
access | p | authorization to crawl and index secured content ...? |
sort | date:D:L:d1 | Apparently this "phrase" is all over the net in regards to the default sorting for Google search appliance. Guessing it is sorting by date. Other option is relevance? |
dbg | 0 | Debug Flag? |
filter | 0 | |
sa | N | |
ie | UTF-8 | input encoding |
Headers
The following headers have been captured while querying against the google search appliance with an in-world viewer.
Host: search.secondlife.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; chrome://navigator/locale/navigator.properties; rv:1.8.1.13) Gecko/20080314 SecondLife/1.20.15.92456 (Second Life Release; silver skin) Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Encoding: gzip,deflate Keep-Alive: 300 Connection: keep-alive Cookie: __utmz=########.##########.#.#.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=########.##################.##########.##########.##########.###; __utmc=########
Work-around for LSL
It should be noted that LSL scripts using ht llHTTPRequest method can not query against the google appliance directly. Linen Lab has blocked all access due to security reasons of requests comming from machines on the local network. To work around this, many people use proxy services. One popular service is offered by google. It is originally intended to make content available for mobile phones. An example of the service in action can be seen by going to the following URL:
Proxy search form http://www.google.com/gwt/n
Example of proxy search URL http://www.google.com/gwt/n?u=http%3A%2F%2Fsearch.secondlife.com%2Fclient_search.php%3Fq%3Dobject&_gwt_noimg=1
Search Engine Optimization
Search Engine Optimization (SEO) is the method of fine tuning the name and description of content and links to further promote the position of a listing on the search results.
Regions
Regions will always show up before parcel listings when their name contains a keyword that the end-user had searched for.
Parcels
The search engine searches for parcel name and description only if the parcel had been marked to show up in search results (30 L$ per week). In addition, names of objects that are marked to show up in search results are also searched in relation to the parcel. Additional attributes also contribute to the parcels rank including how long ago the parcel was created (or sub-divided/joined), how many paying residents have added the parcel to their picks (see picks camping), how much L$ is paid per week for a single classified (multiple does not help), and how much foot traffic does the parcel get (see camping chairs).
Events
Residents
Residents must enable their profile to show in search results. When a resident name matches, an additional link directly to the profile is displayed regardless if the resident marked their profile to show up in search results.