<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Takat+Su</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Takat+Su"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Takat_Su"/>
	<updated>2026-05-26T22:11:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Takat_Su/Name2Key&amp;diff=782952</id>
		<title>User:Takat Su/Name2Key</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Takat_Su/Name2Key&amp;diff=782952"/>
		<updated>2010-03-05T20:03:22Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: Added the To Do in the comments.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== Name2Key ==&lt;br /&gt;
&#039;&#039;&#039;This is an update to Maeva Anatine&#039;s excellent suggestion for an updated name2key function.  Rather than overwrite all her work, I created this page.  The idea is DEFINITELY hers - I just am creating an alternate implementation.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Still missing Name2Key functions in your code? Still relying on external databases that are not always up to date with latests SL subscribers? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script! All you have to do is to rely on LL Search engine! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
To use, you make an llHttpRequest to the application running on the Google Application Server (a free service for moderate users).  The URL looks like this: http://name2key.appspot.com/?name=firstname%20lastname i.e. the first name of the person you want to look up is separated from their last name by &amp;quot;%20&amp;quot; (this is how the space character is coded in URLs).  The application doesn&#039;t care if you get the case correct.  The application will format the body of the return as follows:  firstname lastname:key, where firstname and lastname will be capitalized correctly and the key is either the key for the person or the null key (00000000-0000-0000-0000-000000000000). It really isn&#039;t much code if you prefer to code it into your main script rather than rely on an external script for the lookup.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;To Do&amp;lt;/b&amp;gt;:  Alter the python code so that it fails gracefully if the name given in the URL does not exist or if Linden Search is down.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Library ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer cmdName2Key = 19790;&lt;br /&gt;
integer cmdName2KeyResponse = 19791;&lt;br /&gt;
&lt;br /&gt;
list gRequests;&lt;br /&gt;
&lt;br /&gt;
key requestName2Key( string inName ) {&lt;br /&gt;
    list lNameParts = llParseString2List( inName, [&amp;quot; &amp;quot;], [] );&lt;br /&gt;
    string lFirstName = llList2String( lNameParts, 0 );&lt;br /&gt;
    string lLastName = llList2String( lNameParts, 1 );&lt;br /&gt;
    return llHTTPRequest( &amp;quot;http://name2key.appspot.com/?name=&amp;quot; + lFirstName + &amp;quot;%20&amp;quot; + lLastName, [], &amp;quot;&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    link_message( integer inFromPrim, integer inCommand, string inName, key inKey ) {&lt;br /&gt;
        if( inCommand == cmdName2Key )&lt;br /&gt;
            gRequests += [requestName2Key( inName ), inKey ];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    http_response(key inKey, integer inStatus, list inMetaData, string inBody ) {&lt;br /&gt;
        integer lPosition = llListFindList( gRequests, [inKey]);&lt;br /&gt;
        if( lPosition != -1 ) {&lt;br /&gt;
            llMessageLinked( LINK_SET, cmdName2KeyResponse, inBody, llList2Key( gRequests, lPosition+1 ) );&lt;br /&gt;
            gRequests = llDeleteSubList( gRequests, lPosition, lPosition + 1 );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Usage sample ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer cmdName2Key = 19790;&lt;br /&gt;
integer cmdName2KeyResponse = 19791;&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llMessageLinked( LINK_SET, cmdName2Key, &amp;quot;Test Name&amp;quot;, NULL_KEY );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message( integer inFromPrim, integer inCommand, string inKeyData, key inReturnedKey ) {&lt;br /&gt;
        if( inCommand == cmdName2KeyResponse ) {&lt;br /&gt;
            list lParts = llParseString2List( inKeyData, [&amp;quot;:&amp;quot;], [] );&lt;br /&gt;
            string lName = llList2String( lParts, 0 );&lt;br /&gt;
            key lKey = (key)llList2String(lParts, 1 );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== Google App Python Code ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
from google.appengine.ext import webapp&lt;br /&gt;
from google.appengine.ext.webapp.util import run_wsgi_app&lt;br /&gt;
import urllib, urlparse&lt;br /&gt;
&lt;br /&gt;
kURL = &#039;http://vwrsearch.secondlife.com/client_search.php?session=00000000-0000-0000-0000-000000000000&amp;amp;q=&#039;&lt;br /&gt;
kProfile = &amp;quot;Resident profile&amp;quot;&lt;br /&gt;
kResult = &amp;quot;secondlife:///app/agent/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class MainPage( webapp.RequestHandler ):&lt;br /&gt;
    def get(self):&lt;br /&gt;
        inName = self.request.get(&amp;quot;name&amp;quot;).upper()&lt;br /&gt;
        name = inName.replace(&amp;quot; &amp;quot;, &amp;quot;%20&amp;quot;)&lt;br /&gt;
        data = urllib.urlopen(kURL + name).read()&lt;br /&gt;
        start = data.index( kProfile )&lt;br /&gt;
        foundName = data[start+18:start+18+len(inName)]&lt;br /&gt;
	key = &#039;00000000-0000-0000-0000-000000000000&#039;&lt;br /&gt;
        if foundName.upper() == inName:&lt;br /&gt;
            start = data.index( kResult )&lt;br /&gt;
            key = data[start+len(kResult):start+len(kResult)+36]&lt;br /&gt;
        else:&lt;br /&gt;
            foundName =	inName&lt;br /&gt;
&lt;br /&gt;
        self.response.out.write(&amp;quot;%s:%s&amp;quot; % (foundName, key))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
application = webapp.WSGIApplication(&lt;br /&gt;
    [(&#039;/&#039;, MainPage)],&lt;br /&gt;
    debug = True)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    run_wsgi_app(application)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== app.yaml file ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
application: name2key&lt;br /&gt;
version: 1&lt;br /&gt;
runtime: python&lt;br /&gt;
api_version: 1&lt;br /&gt;
&lt;br /&gt;
handlers:&lt;br /&gt;
- url: .*&lt;br /&gt;
  script: name2key.py&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Comments ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
The main difference is that I wrote a an app for the google app engine that act as a relay.  Since I was going that far, it also parses the return, strips out all the extraneous stuff and just returns you the name and key separated by a colon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[User:Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}{{LSLC|Examples|Name2Key}}&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=494263</id>
		<title>Name2Key in LSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=494263"/>
		<updated>2009-09-21T14:40:15Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: /* Comments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== Name2Key ==&lt;br /&gt;
Still missing Name2Key functions in your code? Still relying on external databases that are not always up to date with latests SL subscribers? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script! All you have to do is to rely on LL Search engine! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
Takat Su: I placed an alternate implementation up that does not depend on the babelfish proxy nor having your own proxy here: http://wiki.secondlife.com/wiki/User:Takat_Su/Name2Key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Library ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY     = 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET = 19791;&lt;br /&gt;
&lt;br /&gt;
string proxy     = &amp;quot;http://66.196.80.202/babelfish/translate_url_content?&amp;amp;intl=us&amp;amp;lp=ko_en&amp;amp;trurl=&amp;quot;;&lt;br /&gt;
string search    = &amp;quot;http://vwrsearch.secondlife.com/client_search.php?session=00000000-0000-0000-0000-000000000000&amp;amp;q=&amp;quot;;&lt;br /&gt;
string result    = &amp;quot;secondlife:///app/agent/&amp;quot;;&lt;br /&gt;
string profile   = &amp;quot;Resident profile&amp;quot;;&lt;br /&gt;
string notfound  = &amp;quot;There were no matches for &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
list    requests;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        requests = [];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer s, integer n, string m, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if (n == SERVICE_NAME2KEY) {&lt;br /&gt;
            if(llListFindList(requests,[m]) == -1) {&lt;br /&gt;
                list Args=llParseString2List(m, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
&lt;br /&gt;
                string FirstName = llList2String(Args, 0);&lt;br /&gt;
                string LastName = llList2String(Args, 1);&lt;br /&gt;
&lt;br /&gt;
                string url = proxy+llEscapeURL(search)+FirstName+&amp;quot;%2520&amp;quot;+LastName;;&lt;br /&gt;
                key id = llHTTPRequest(url, [], &amp;quot;&amp;quot;);&lt;br /&gt;
                requests += [id,m];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer p = llListFindList(requests,[request_id]);&lt;br /&gt;
        if (p != -1) {&lt;br /&gt;
            string name = llList2String(requests,p+1);&lt;br /&gt;
            integer find = llSubStringIndex(body,result);&lt;br /&gt;
            if(find == -1) {&lt;br /&gt;
                find = llSubStringIndex(body,notfound);&lt;br /&gt;
                if(find == -1)&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,&amp;quot;Error with lookup!&amp;quot;,NULL_KEY);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; not found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                find += llStringLength(result);&lt;br /&gt;
                string avKey = llGetSubString(body,find,find+35);&lt;br /&gt;
                integer namePos = llSubStringIndex(body,profile)+17;&lt;br /&gt;
                string foundName = llGetSubString(body, namePos+1,&lt;br /&gt;
                    namePos + llSubStringIndex(llGetSubString(body,namePos+1, llStringLength(body)-1),&amp;quot;&amp;lt;&amp;quot;));&lt;br /&gt;
                if(llToLower(name) == llToLower(foundName))&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,foundName,(key)avKey);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; failed: Wrong found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            requests = llDeleteSubList(requests,p,p+1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Usage sample ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        =   19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    =   19791;&lt;br /&gt;
 &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
 &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    listen(integer c, string n, key i, string m)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Requesting key for &amp;quot;+m);&lt;br /&gt;
        llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, m, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    link_message(integer f, integer n, string s, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if(n == SERVICE_NAME2KEY_RET) {&lt;br /&gt;
            if(i == NULL_KEY)&lt;br /&gt;
                llSay(0,&amp;quot;Lookup failed.  Returned: &amp;quot;+s);&lt;br /&gt;
            else&lt;br /&gt;
                llSay(0,s+&amp;quot;: &amp;quot;+(string)i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Comments ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
Hope this helps !&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
EDIT : Looks like the Lindens have either broken or blocked this function. It works from my browser, however from LSL I get an error page containing this message &amp;quot;Access control configuration prevents your request from&lt;br /&gt;
being allowed at this time.  Please contact your service provider if&lt;br /&gt;
you feel this is incorrect.&amp;quot; - Darling Brody.&lt;br /&gt;
&lt;br /&gt;
EDIT : Yes you&#039;re right Darling. It seems they&#039;ve blocked this access from within the world... I still wonder why, especially as there are some workarounds to this...&lt;br /&gt;
Anyway I discovered there is a JIRA issue for this. Please vote for the unblock !&lt;br /&gt;
https://jira.secondlife.com/browse/SVC-3122&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT : OK after having read this article from LL: http://wiki.secondlife.com/wiki/SearchAPI, it seems proxy usage is allowed. So I modified the upper code in order to go through a proxy machine and it works again :)&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT: After review, it appears the Yahoo Babelfish proxy you are using above does not return the results expected.  I rewrote this to allow different proxies by a simple configuration.  This now uses Google instead of Babelfish by default.  This does not, however, work for any avatars that do not have a Profile filled out (this is due to a limitation of the Googly proxy we&#039;re using here).  I&#039;m researching this and trying to see if there is a better proxy to use.&lt;br /&gt;
&lt;br /&gt;
This version can handle multiple requests at once.  Replies have changed slightly, as the found key is returned in the &amp;quot;key&amp;quot; field instead of the message field.  In addition, failure of any kind results in a NULL_KEY being returned, and status information is returned in the message field. - [[User:Sensei Schism|Sensei Schism]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Mar-08: Sensei, I reused your version here above and took back BabelFish as Google one is unable to retrieve all links (doesn&#039;t recognized correctly the secondlife:/// link). In addition, I made some slight changes as LL recently changed their search engine. This version now works properly.&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Aug-27: LL changed the search URL from &#039;&#039;&#039;search&#039;&#039;&#039;.secondlife.com/client_search.php to &#039;&#039;&#039;vwrsearch&#039;&#039;&#039;.secondlife.com/client_search.php&lt;br /&gt;
[[User:ab Vanmoer|ab Vanmoer]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-04: The problem with the proxy you have there is that it translates the name as a french name, and if it happens to be a real french word, then the name gets changed to that.  for example the last name of Vella got changed to Calved, so no match was made.  PS. I also found some names had been surrounded by bold tags.  So, since i have a few websites i can run PHP on i got [http://sourceforge.net/projects/php-proxy/ PHP Web Proxy] and point to it.  Also, I used: body = llDumpList2String(llParseStringKeepNulls(body, [&amp;quot;&amp;lt;b&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/b&amp;gt;&amp;quot;], []), &amp;quot;&amp;quot;); to remove the bold tags.&lt;br /&gt;
-Spritely Pixel&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-19: Changed the translation from french to korean on the theory that there are very few names that contain valid Korean characters, thus the translation should just pass straight through.  Changes were: 1. Change the proxy url to use ko_en instead of fr_en.  2. Change the profile search string from &amp;quot;Resident profiles&amp;quot; to &amp;quot;Resident profile&amp;quot; (note change from plural to singular) and changed the name offset to account for the (now missing) &#039;s&#039;. Also note that Babel will sometimes return an advertising page instead of the translation.  Thus, you should be prepared to retry the search a few times if you get a page that doesn&#039;t make sense.[[User:Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-20: Got fed up with the babel translation thing.  Apparently, if you make too many requests, Yahoo throttles you for between 2 and 24 hours.  So I made a relay for the google appspot engine and replicated this page with the new code here: http://wiki.secondlife.com/wiki/User:Takat_Su/Name2Key [[Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}{{LSLC|Examples|Name2Key}}&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=494253</id>
		<title>Name2Key in LSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=494253"/>
		<updated>2009-09-21T14:39:31Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: /* Name2Key */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== Name2Key ==&lt;br /&gt;
Still missing Name2Key functions in your code? Still relying on external databases that are not always up to date with latests SL subscribers? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script! All you have to do is to rely on LL Search engine! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
Takat Su: I placed an alternate implementation up that does not depend on the babelfish proxy nor having your own proxy here: http://wiki.secondlife.com/wiki/User:Takat_Su/Name2Key&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Library ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY     = 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET = 19791;&lt;br /&gt;
&lt;br /&gt;
string proxy     = &amp;quot;http://66.196.80.202/babelfish/translate_url_content?&amp;amp;intl=us&amp;amp;lp=ko_en&amp;amp;trurl=&amp;quot;;&lt;br /&gt;
string search    = &amp;quot;http://vwrsearch.secondlife.com/client_search.php?session=00000000-0000-0000-0000-000000000000&amp;amp;q=&amp;quot;;&lt;br /&gt;
string result    = &amp;quot;secondlife:///app/agent/&amp;quot;;&lt;br /&gt;
string profile   = &amp;quot;Resident profile&amp;quot;;&lt;br /&gt;
string notfound  = &amp;quot;There were no matches for &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
list    requests;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        requests = [];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer s, integer n, string m, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if (n == SERVICE_NAME2KEY) {&lt;br /&gt;
            if(llListFindList(requests,[m]) == -1) {&lt;br /&gt;
                list Args=llParseString2List(m, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
&lt;br /&gt;
                string FirstName = llList2String(Args, 0);&lt;br /&gt;
                string LastName = llList2String(Args, 1);&lt;br /&gt;
&lt;br /&gt;
                string url = proxy+llEscapeURL(search)+FirstName+&amp;quot;%2520&amp;quot;+LastName;;&lt;br /&gt;
                key id = llHTTPRequest(url, [], &amp;quot;&amp;quot;);&lt;br /&gt;
                requests += [id,m];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer p = llListFindList(requests,[request_id]);&lt;br /&gt;
        if (p != -1) {&lt;br /&gt;
            string name = llList2String(requests,p+1);&lt;br /&gt;
            integer find = llSubStringIndex(body,result);&lt;br /&gt;
            if(find == -1) {&lt;br /&gt;
                find = llSubStringIndex(body,notfound);&lt;br /&gt;
                if(find == -1)&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,&amp;quot;Error with lookup!&amp;quot;,NULL_KEY);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; not found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                find += llStringLength(result);&lt;br /&gt;
                string avKey = llGetSubString(body,find,find+35);&lt;br /&gt;
                integer namePos = llSubStringIndex(body,profile)+17;&lt;br /&gt;
                string foundName = llGetSubString(body, namePos+1,&lt;br /&gt;
                    namePos + llSubStringIndex(llGetSubString(body,namePos+1, llStringLength(body)-1),&amp;quot;&amp;lt;&amp;quot;));&lt;br /&gt;
                if(llToLower(name) == llToLower(foundName))&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,foundName,(key)avKey);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; failed: Wrong found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            requests = llDeleteSubList(requests,p,p+1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Usage sample ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        =   19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    =   19791;&lt;br /&gt;
 &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
 &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    listen(integer c, string n, key i, string m)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Requesting key for &amp;quot;+m);&lt;br /&gt;
        llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, m, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    link_message(integer f, integer n, string s, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if(n == SERVICE_NAME2KEY_RET) {&lt;br /&gt;
            if(i == NULL_KEY)&lt;br /&gt;
                llSay(0,&amp;quot;Lookup failed.  Returned: &amp;quot;+s);&lt;br /&gt;
            else&lt;br /&gt;
                llSay(0,s+&amp;quot;: &amp;quot;+(string)i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Comments ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
Hope this helps !&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
EDIT : Looks like the Lindens have either broken or blocked this function. It works from my browser, however from LSL I get an error page containing this message &amp;quot;Access control configuration prevents your request from&lt;br /&gt;
being allowed at this time.  Please contact your service provider if&lt;br /&gt;
you feel this is incorrect.&amp;quot; - Darling Brody.&lt;br /&gt;
&lt;br /&gt;
EDIT : Yes you&#039;re right Darling. It seems they&#039;ve blocked this access from within the world... I still wonder why, especially as there are some workarounds to this...&lt;br /&gt;
Anyway I discovered there is a JIRA issue for this. Please vote for the unblock !&lt;br /&gt;
https://jira.secondlife.com/browse/SVC-3122&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT : OK after having read this article from LL: http://wiki.secondlife.com/wiki/SearchAPI, it seems proxy usage is allowed. So I modified the upper code in order to go through a proxy machine and it works again :)&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT: After review, it appears the Yahoo Babelfish proxy you are using above does not return the results expected.  I rewrote this to allow different proxies by a simple configuration.  This now uses Google instead of Babelfish by default.  This does not, however, work for any avatars that do not have a Profile filled out (this is due to a limitation of the Googly proxy we&#039;re using here).  I&#039;m researching this and trying to see if there is a better proxy to use.&lt;br /&gt;
&lt;br /&gt;
This version can handle multiple requests at once.  Replies have changed slightly, as the found key is returned in the &amp;quot;key&amp;quot; field instead of the message field.  In addition, failure of any kind results in a NULL_KEY being returned, and status information is returned in the message field. - [[User:Sensei Schism|Sensei Schism]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Mar-08: Sensei, I reused your version here above and took back BabelFish as Google one is unable to retrieve all links (doesn&#039;t recognized correctly the secondlife:/// link). In addition, I made some slight changes as LL recently changed their search engine. This version now works properly.&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Aug-27: LL changed the search URL from &#039;&#039;&#039;search&#039;&#039;&#039;.secondlife.com/client_search.php to &#039;&#039;&#039;vwrsearch&#039;&#039;&#039;.secondlife.com/client_search.php&lt;br /&gt;
[[User:ab Vanmoer|ab Vanmoer]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-04: The problem with the proxy you have there is that it translates the name as a french name, and if it happens to be a real french word, then the name gets changed to that.  for example the last name of Vella got changed to Calved, so no match was made.  PS. I also found some names had been surrounded by bold tags.  So, since i have a few websites i can run PHP on i got [http://sourceforge.net/projects/php-proxy/ PHP Web Proxy] and point to it.  Also, I used: body = llDumpList2String(llParseStringKeepNulls(body, [&amp;quot;&amp;lt;b&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/b&amp;gt;&amp;quot;], []), &amp;quot;&amp;quot;); to remove the bold tags.&lt;br /&gt;
-Spritely Pixel&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-19: Changed the translation from french to korean on the theory that there are very few names that contain valid Korean characters, thus the translation should just pass straight through.  Changes were: 1. Change the proxy url to use ko_en instead of fr_en.  2. Change the profile search string from &amp;quot;Resident profiles&amp;quot; to &amp;quot;Resident profile&amp;quot; (note change from plural to singular) and changed the name offset to account for the (now missing) &#039;s&#039;. Also note that Babel will sometimes return an advertising page instead of the translation.  Thus, you should be prepared to retry the search a few times if you get a page that doesn&#039;t make sense.[[User:Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-20: Got fed up with the babel translation thing.  Apparently, if you make too many requests, Yahoo throttles you for between 2 and 24 hours.  So I made a relay for the google appspot engine and replicated this page with the new code here: https://wiki.secondlife.com/wiki/User:Takat_Su/Name2Key [[Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}{{LSLC|Examples|Name2Key}}&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=494243</id>
		<title>Name2Key in LSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=494243"/>
		<updated>2009-09-21T14:37:30Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: Updated the URL to my page regarding this function (alternate implementation)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== Name2Key ==&lt;br /&gt;
Still missing Name2Key functions in your code? Still relying on external databases that are not always up to date with latests SL subscribers? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script! All you have to do is to rely on LL Search engine! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Library ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY     = 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET = 19791;&lt;br /&gt;
&lt;br /&gt;
string proxy     = &amp;quot;http://66.196.80.202/babelfish/translate_url_content?&amp;amp;intl=us&amp;amp;lp=ko_en&amp;amp;trurl=&amp;quot;;&lt;br /&gt;
string search    = &amp;quot;http://vwrsearch.secondlife.com/client_search.php?session=00000000-0000-0000-0000-000000000000&amp;amp;q=&amp;quot;;&lt;br /&gt;
string result    = &amp;quot;secondlife:///app/agent/&amp;quot;;&lt;br /&gt;
string profile   = &amp;quot;Resident profile&amp;quot;;&lt;br /&gt;
string notfound  = &amp;quot;There were no matches for &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
list    requests;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        requests = [];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer s, integer n, string m, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if (n == SERVICE_NAME2KEY) {&lt;br /&gt;
            if(llListFindList(requests,[m]) == -1) {&lt;br /&gt;
                list Args=llParseString2List(m, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
&lt;br /&gt;
                string FirstName = llList2String(Args, 0);&lt;br /&gt;
                string LastName = llList2String(Args, 1);&lt;br /&gt;
&lt;br /&gt;
                string url = proxy+llEscapeURL(search)+FirstName+&amp;quot;%2520&amp;quot;+LastName;;&lt;br /&gt;
                key id = llHTTPRequest(url, [], &amp;quot;&amp;quot;);&lt;br /&gt;
                requests += [id,m];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer p = llListFindList(requests,[request_id]);&lt;br /&gt;
        if (p != -1) {&lt;br /&gt;
            string name = llList2String(requests,p+1);&lt;br /&gt;
            integer find = llSubStringIndex(body,result);&lt;br /&gt;
            if(find == -1) {&lt;br /&gt;
                find = llSubStringIndex(body,notfound);&lt;br /&gt;
                if(find == -1)&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,&amp;quot;Error with lookup!&amp;quot;,NULL_KEY);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; not found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                find += llStringLength(result);&lt;br /&gt;
                string avKey = llGetSubString(body,find,find+35);&lt;br /&gt;
                integer namePos = llSubStringIndex(body,profile)+17;&lt;br /&gt;
                string foundName = llGetSubString(body, namePos+1,&lt;br /&gt;
                    namePos + llSubStringIndex(llGetSubString(body,namePos+1, llStringLength(body)-1),&amp;quot;&amp;lt;&amp;quot;));&lt;br /&gt;
                if(llToLower(name) == llToLower(foundName))&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,foundName,(key)avKey);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; failed: Wrong found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            requests = llDeleteSubList(requests,p,p+1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Usage sample ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        =   19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    =   19791;&lt;br /&gt;
 &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
 &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    listen(integer c, string n, key i, string m)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Requesting key for &amp;quot;+m);&lt;br /&gt;
        llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, m, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    link_message(integer f, integer n, string s, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if(n == SERVICE_NAME2KEY_RET) {&lt;br /&gt;
            if(i == NULL_KEY)&lt;br /&gt;
                llSay(0,&amp;quot;Lookup failed.  Returned: &amp;quot;+s);&lt;br /&gt;
            else&lt;br /&gt;
                llSay(0,s+&amp;quot;: &amp;quot;+(string)i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Comments ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
Hope this helps !&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
EDIT : Looks like the Lindens have either broken or blocked this function. It works from my browser, however from LSL I get an error page containing this message &amp;quot;Access control configuration prevents your request from&lt;br /&gt;
being allowed at this time.  Please contact your service provider if&lt;br /&gt;
you feel this is incorrect.&amp;quot; - Darling Brody.&lt;br /&gt;
&lt;br /&gt;
EDIT : Yes you&#039;re right Darling. It seems they&#039;ve blocked this access from within the world... I still wonder why, especially as there are some workarounds to this...&lt;br /&gt;
Anyway I discovered there is a JIRA issue for this. Please vote for the unblock !&lt;br /&gt;
https://jira.secondlife.com/browse/SVC-3122&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT : OK after having read this article from LL: http://wiki.secondlife.com/wiki/SearchAPI, it seems proxy usage is allowed. So I modified the upper code in order to go through a proxy machine and it works again :)&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT: After review, it appears the Yahoo Babelfish proxy you are using above does not return the results expected.  I rewrote this to allow different proxies by a simple configuration.  This now uses Google instead of Babelfish by default.  This does not, however, work for any avatars that do not have a Profile filled out (this is due to a limitation of the Googly proxy we&#039;re using here).  I&#039;m researching this and trying to see if there is a better proxy to use.&lt;br /&gt;
&lt;br /&gt;
This version can handle multiple requests at once.  Replies have changed slightly, as the found key is returned in the &amp;quot;key&amp;quot; field instead of the message field.  In addition, failure of any kind results in a NULL_KEY being returned, and status information is returned in the message field. - [[User:Sensei Schism|Sensei Schism]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Mar-08: Sensei, I reused your version here above and took back BabelFish as Google one is unable to retrieve all links (doesn&#039;t recognized correctly the secondlife:/// link). In addition, I made some slight changes as LL recently changed their search engine. This version now works properly.&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Aug-27: LL changed the search URL from &#039;&#039;&#039;search&#039;&#039;&#039;.secondlife.com/client_search.php to &#039;&#039;&#039;vwrsearch&#039;&#039;&#039;.secondlife.com/client_search.php&lt;br /&gt;
[[User:ab Vanmoer|ab Vanmoer]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-04: The problem with the proxy you have there is that it translates the name as a french name, and if it happens to be a real french word, then the name gets changed to that.  for example the last name of Vella got changed to Calved, so no match was made.  PS. I also found some names had been surrounded by bold tags.  So, since i have a few websites i can run PHP on i got [http://sourceforge.net/projects/php-proxy/ PHP Web Proxy] and point to it.  Also, I used: body = llDumpList2String(llParseStringKeepNulls(body, [&amp;quot;&amp;lt;b&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/b&amp;gt;&amp;quot;], []), &amp;quot;&amp;quot;); to remove the bold tags.&lt;br /&gt;
-Spritely Pixel&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-19: Changed the translation from french to korean on the theory that there are very few names that contain valid Korean characters, thus the translation should just pass straight through.  Changes were: 1. Change the proxy url to use ko_en instead of fr_en.  2. Change the profile search string from &amp;quot;Resident profiles&amp;quot; to &amp;quot;Resident profile&amp;quot; (note change from plural to singular) and changed the name offset to account for the (now missing) &#039;s&#039;. Also note that Babel will sometimes return an advertising page instead of the translation.  Thus, you should be prepared to retry the search a few times if you get a page that doesn&#039;t make sense.[[User:Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-20: Got fed up with the babel translation thing.  Apparently, if you make too many requests, Yahoo throttles you for between 2 and 24 hours.  So I made a relay for the google appspot engine and replicated this page with the new code here: https://wiki.secondlife.com/wiki/User:Takat_Su/Name2Key [[Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}{{LSLC|Examples|Name2Key}}&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Takat_Su/Name2Key&amp;diff=494082</id>
		<title>User:Takat Su/Name2Key</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Takat_Su/Name2Key&amp;diff=494082"/>
		<updated>2009-09-21T05:49:24Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: Provide some theory of operation as well as the code for the google application server.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== Name2Key ==&lt;br /&gt;
&#039;&#039;&#039;This is an update to Maeva Anatine&#039;s excellent suggestion for an updated name2key function.  Rather than overwrite all her work, I created this page.  The idea is DEFINITELY hers - I just am creating an alternate implementation.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Still missing Name2Key functions in your code? Still relying on external databases that are not always up to date with latests SL subscribers? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script! All you have to do is to rely on LL Search engine! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
To use, you make an llHttpRequest to the application running on the Google Application Server (a free service for moderate users).  The URL looks like this: http://name2key.appspot.com/?name=firstname%20lastname i.e. the first name of the person you want to look up is separated from their last name by &amp;quot;%20&amp;quot; (this is how the space character is coded in URLs).  The application doesn&#039;t care if you get the case correct.  The application will format the body of the return as follows:  firstname lastname:key, where firstname and lastname will be capitalized correctly and the key is either the key for the person or the null key (00000000-0000-0000-0000-000000000000). It really isn&#039;t much code if you prefer to code it into your main script rather than rely on an external script for the lookup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Library ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer cmdName2Key = 19790;&lt;br /&gt;
integer cmdName2KeyResponse = 19791;&lt;br /&gt;
&lt;br /&gt;
list gRequests;&lt;br /&gt;
&lt;br /&gt;
key requestName2Key( string inName ) {&lt;br /&gt;
    list lNameParts = llParseString2List( inName, [&amp;quot; &amp;quot;], [] );&lt;br /&gt;
    string lFirstName = llList2String( lNameParts, 0 );&lt;br /&gt;
    string lLastName = llList2String( lNameParts, 1 );&lt;br /&gt;
    return llHTTPRequest( &amp;quot;http://name2key.appspot.com/?name=&amp;quot; + lFirstName + &amp;quot;%20&amp;quot; + lLastName, [], &amp;quot;&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    link_message( integer inFromPrim, integer inCommand, string inName, key inKey ) {&lt;br /&gt;
        if( inCommand == cmdName2Key )&lt;br /&gt;
            gRequests += [requestName2Key( inName ), inKey ];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    http_response(key inKey, integer inStatus, list inMetaData, string inBody ) {&lt;br /&gt;
        integer lPosition = llListFindList( gRequests, [inKey]);&lt;br /&gt;
        if( lPosition != -1 ) {&lt;br /&gt;
            llMessageLinked( LINK_SET, cmdName2KeyResponse, inBody, llList2Key( gRequests, lPosition+1 ) );&lt;br /&gt;
            gRequests = llDeleteSubList( gRequests, lPosition, lPosition + 1 );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Usage sample ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer cmdName2Key = 19790;&lt;br /&gt;
integer cmdName2KeyResponse = 19791;&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llMessageLinked( LINK_SET, cmdName2Key, &amp;quot;Test Name&amp;quot;, NULL_KEY );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message( integer inFromPrim, integer inCommand, string inKeyData, key inReturnedKey ) {&lt;br /&gt;
        if( inCommand == cmdName2KeyResponse ) {&lt;br /&gt;
            list lParts = llParseString2List( inKeyData, [&amp;quot;:&amp;quot;], [] );&lt;br /&gt;
            string lName = llList2String( lParts, 0 );&lt;br /&gt;
            key lKey = (key)llList2String(lParts, 1 );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== Google App Python Code ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
from google.appengine.ext import webapp&lt;br /&gt;
from google.appengine.ext.webapp.util import run_wsgi_app&lt;br /&gt;
import string&lt;br /&gt;
import urllib, urlparse&lt;br /&gt;
&lt;br /&gt;
kURL = &#039;http://vwrsearch.secondlife.com/client_search.php?session=00000000-0000-0000-0000-000000000000&amp;amp;q=&#039;&lt;br /&gt;
kProfile = &amp;quot;Resident profile&amp;quot;&lt;br /&gt;
kResult = &amp;quot;secondlife:///app/agent/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class MainPage( webapp.RequestHandler ):&lt;br /&gt;
    def get(self):&lt;br /&gt;
        inName = string.upper(self.request.get(&amp;quot;name&amp;quot;))&lt;br /&gt;
        name = string.join(string.split(inName, &amp;quot; &amp;quot;), &amp;quot;%20&amp;quot;)&lt;br /&gt;
        data = urllib.urlopen(kURL + name).read()&lt;br /&gt;
        start = string.index( data, kProfile )&lt;br /&gt;
        foundName = data[start+18:start+18+len(inName)]&lt;br /&gt;
	key = &#039;00000000-0000-0000-0000-000000000000&#039;&lt;br /&gt;
        if string.upper(foundName) == inName:&lt;br /&gt;
            start = string.index( data, kResult )&lt;br /&gt;
            key = data[start+len(kResult):start+len(kResult)+36]&lt;br /&gt;
        else:&lt;br /&gt;
            foundName =	inName&lt;br /&gt;
&lt;br /&gt;
        self.response.out.write(&amp;quot;%s:%s&amp;quot; % (foundName, key))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
application = webapp.WSGIApplication(&lt;br /&gt;
    [(&#039;/&#039;, MainPage)],&lt;br /&gt;
    debug = True)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    run_wsgi_app(application)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== app.yaml file ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
application: name2key&lt;br /&gt;
version: 1&lt;br /&gt;
runtime: python&lt;br /&gt;
api_version: 1&lt;br /&gt;
&lt;br /&gt;
handlers:&lt;br /&gt;
- url: .*&lt;br /&gt;
  script: name2key.py&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Comments ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
The main difference is that I wrote a an app for the google app engine that act as a relay.  Since I was going that far, it also parses the return, strips out all the extraneous stuff and just returns you the name and key separated by a colon.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[User:Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}{{LSLC|Examples|Name2Key}}&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Takat_Su/Name2Key&amp;diff=494072</id>
		<title>User:Takat Su/Name2Key</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Takat_Su/Name2Key&amp;diff=494072"/>
		<updated>2009-09-21T05:39:32Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== Name2Key ==&lt;br /&gt;
&#039;&#039;&#039;This is an update to Maeva Anatine&#039;s excellent suggestion for an updated name2key function.  Rather than overwrite all her work, I created this page.  The idea is DEFINITELY hers - I just am creating an alternate implementation.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Still missing Name2Key functions in your code? Still relying on external databases that are not always up to date with latests SL subscribers? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script! All you have to do is to rely on LL Search engine! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Library ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer cmdName2Key = 19790;&lt;br /&gt;
integer cmdName2KeyResponse = 19791;&lt;br /&gt;
&lt;br /&gt;
list gRequests;&lt;br /&gt;
&lt;br /&gt;
key requestName2Key( string inName ) {&lt;br /&gt;
    list lNameParts = llParseString2List( inName, [&amp;quot; &amp;quot;], [] );&lt;br /&gt;
    string lFirstName = llList2String( lNameParts, 0 );&lt;br /&gt;
    string lLastName = llList2String( lNameParts, 1 );&lt;br /&gt;
    return llHTTPRequest( &amp;quot;http://name2key.appspot.com/?name=&amp;quot; + lFirstName + &amp;quot;%20&amp;quot; + lLastName, [], &amp;quot;&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    link_message( integer inFromPrim, integer inCommand, string inName, key inKey ) {&lt;br /&gt;
        if( inCommand == cmdName2Key )&lt;br /&gt;
            gRequests += [requestName2Key( inName ), inKey ];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    http_response(key inKey, integer inStatus, list inMetaData, string inBody ) {&lt;br /&gt;
        integer lPosition = llListFindList( gRequests, [inKey]);&lt;br /&gt;
        if( lPosition != -1 ) {&lt;br /&gt;
            llMessageLinked( LINK_SET, cmdName2KeyResponse, inBody, llList2Key( gRequests, lPosition+1 ) );&lt;br /&gt;
            gRequests = llDeleteSubList( gRequests, lPosition, lPosition + 1 );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Usage sample ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer cmdName2Key = 19790;&lt;br /&gt;
integer cmdName2KeyResponse = 19791;&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llMessageLinked( LINK_SET, cmdName2Key, &amp;quot;Test Name&amp;quot;, NULL_KEY );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message( integer inFromPrim, integer inCommand, string inKeyData, key inReturnedKey ) {&lt;br /&gt;
        if( inCommand == cmdName2KeyResponse ) {&lt;br /&gt;
            list lParts = llParseString2List( inKeyData, [&amp;quot;:&amp;quot;], [] );&lt;br /&gt;
            string lName = llList2String( lParts, 0 );&lt;br /&gt;
            key lKey = (key)llList2String(lParts, 1 );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== Google App Python Code ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
from google.appengine.ext import webapp&lt;br /&gt;
from google.appengine.ext.webapp.util import run_wsgi_app&lt;br /&gt;
import string&lt;br /&gt;
import urllib, urlparse&lt;br /&gt;
&lt;br /&gt;
kURL = &#039;http://vwrsearch.secondlife.com/client_search.php?session=00000000-0000-0000-0000-000000000000&amp;amp;q=&#039;&lt;br /&gt;
kProfile = &amp;quot;Resident profile&amp;quot;&lt;br /&gt;
kResult = &amp;quot;secondlife:///app/agent/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class MainPage( webapp.RequestHandler ):&lt;br /&gt;
    def get(self):&lt;br /&gt;
        inName = string.upper(self.request.get(&amp;quot;name&amp;quot;))&lt;br /&gt;
        name = string.join(string.split(inName, &amp;quot; &amp;quot;), &amp;quot;%20&amp;quot;)&lt;br /&gt;
        data = urllib.urlopen(kURL + name).read()&lt;br /&gt;
        start = string.index( data, kProfile )&lt;br /&gt;
        foundName = data[start+18:start+18+len(inName)]&lt;br /&gt;
	key = &#039;00000000-0000-0000-0000-000000000000&#039;&lt;br /&gt;
        if string.upper(foundName) == inName:&lt;br /&gt;
            start = string.index( data, kResult )&lt;br /&gt;
            key = data[start+len(kResult):start+len(kResult)+36]&lt;br /&gt;
        else:&lt;br /&gt;
            foundName =	inName&lt;br /&gt;
&lt;br /&gt;
        self.response.out.write(&amp;quot;%s:%s&amp;quot; % (foundName, key))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
application = webapp.WSGIApplication(&lt;br /&gt;
    [(&#039;/&#039;, MainPage)],&lt;br /&gt;
    debug = True)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    run_wsgi_app(application)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
== app.yaml file ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
application: name2key&lt;br /&gt;
version: 1&lt;br /&gt;
runtime: python&lt;br /&gt;
api_version: 1&lt;br /&gt;
&lt;br /&gt;
handlers:&lt;br /&gt;
- url: .*&lt;br /&gt;
  script: name2key.py&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Comments ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
The main difference is that I wrote a an app for the google app engine that act as a relay.  Since I was going that far, it also parses the return, strips out all the extraneous stuff and just returns you the name and key separated by a colon.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[User:Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}{{LSLC|Examples|Name2Key}}&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Takat_Su&amp;diff=493992</id>
		<title>User:Takat Su</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Takat_Su&amp;diff=493992"/>
		<updated>2009-09-20T23:08:07Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: Created page with &amp;#039;More than 3 years in Second Life.  I&amp;#039;ve been a mentor, a teacher, and a free-lance coder.  Now available for your projects.&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;More than 3 years in Second Life.  I&#039;ve been a mentor, a teacher, and a free-lance coder.  Now available for your projects.&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=493982</id>
		<title>Name2Key in LSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=493982"/>
		<updated>2009-09-20T23:06:44Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: /* Comments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== Name2Key ==&lt;br /&gt;
Still missing Name2Key functions in your code? Still relying on external databases that are not always up to date with latests SL subscribers? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script! All you have to do is to rely on LL Search engine! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Library ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY     = 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET = 19791;&lt;br /&gt;
&lt;br /&gt;
string proxy     = &amp;quot;http://66.196.80.202/babelfish/translate_url_content?&amp;amp;intl=us&amp;amp;lp=ko_en&amp;amp;trurl=&amp;quot;;&lt;br /&gt;
string search    = &amp;quot;http://vwrsearch.secondlife.com/client_search.php?session=00000000-0000-0000-0000-000000000000&amp;amp;q=&amp;quot;;&lt;br /&gt;
string result    = &amp;quot;secondlife:///app/agent/&amp;quot;;&lt;br /&gt;
string profile   = &amp;quot;Resident profile&amp;quot;;&lt;br /&gt;
string notfound  = &amp;quot;There were no matches for &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
list    requests;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        requests = [];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer s, integer n, string m, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if (n == SERVICE_NAME2KEY) {&lt;br /&gt;
            if(llListFindList(requests,[m]) == -1) {&lt;br /&gt;
                list Args=llParseString2List(m, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
&lt;br /&gt;
                string FirstName = llList2String(Args, 0);&lt;br /&gt;
                string LastName = llList2String(Args, 1);&lt;br /&gt;
&lt;br /&gt;
                string url = proxy+llEscapeURL(search)+FirstName+&amp;quot;%2520&amp;quot;+LastName;;&lt;br /&gt;
                key id = llHTTPRequest(url, [], &amp;quot;&amp;quot;);&lt;br /&gt;
                requests += [id,m];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer p = llListFindList(requests,[request_id]);&lt;br /&gt;
        if (p != -1) {&lt;br /&gt;
            string name = llList2String(requests,p+1);&lt;br /&gt;
            integer find = llSubStringIndex(body,result);&lt;br /&gt;
            if(find == -1) {&lt;br /&gt;
                find = llSubStringIndex(body,notfound);&lt;br /&gt;
                if(find == -1)&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,&amp;quot;Error with lookup!&amp;quot;,NULL_KEY);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; not found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                find += llStringLength(result);&lt;br /&gt;
                string avKey = llGetSubString(body,find,find+35);&lt;br /&gt;
                integer namePos = llSubStringIndex(body,profile)+17;&lt;br /&gt;
                string foundName = llGetSubString(body, namePos+1,&lt;br /&gt;
                    namePos + llSubStringIndex(llGetSubString(body,namePos+1, llStringLength(body)-1),&amp;quot;&amp;lt;&amp;quot;));&lt;br /&gt;
                if(llToLower(name) == llToLower(foundName))&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,foundName,(key)avKey);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; failed: Wrong found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            requests = llDeleteSubList(requests,p,p+1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Usage sample ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        =   19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    =   19791;&lt;br /&gt;
 &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
 &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    listen(integer c, string n, key i, string m)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Requesting key for &amp;quot;+m);&lt;br /&gt;
        llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, m, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    link_message(integer f, integer n, string s, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if(n == SERVICE_NAME2KEY_RET) {&lt;br /&gt;
            if(i == NULL_KEY)&lt;br /&gt;
                llSay(0,&amp;quot;Lookup failed.  Returned: &amp;quot;+s);&lt;br /&gt;
            else&lt;br /&gt;
                llSay(0,s+&amp;quot;: &amp;quot;+(string)i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Comments ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
Hope this helps !&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
EDIT : Looks like the Lindens have either broken or blocked this function. It works from my browser, however from LSL I get an error page containing this message &amp;quot;Access control configuration prevents your request from&lt;br /&gt;
being allowed at this time.  Please contact your service provider if&lt;br /&gt;
you feel this is incorrect.&amp;quot; - Darling Brody.&lt;br /&gt;
&lt;br /&gt;
EDIT : Yes you&#039;re right Darling. It seems they&#039;ve blocked this access from within the world... I still wonder why, especially as there are some workarounds to this...&lt;br /&gt;
Anyway I discovered there is a JIRA issue for this. Please vote for the unblock !&lt;br /&gt;
https://jira.secondlife.com/browse/SVC-3122&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT : OK after having read this article from LL: http://wiki.secondlife.com/wiki/SearchAPI, it seems proxy usage is allowed. So I modified the upper code in order to go through a proxy machine and it works again :)&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT: After review, it appears the Yahoo Babelfish proxy you are using above does not return the results expected.  I rewrote this to allow different proxies by a simple configuration.  This now uses Google instead of Babelfish by default.  This does not, however, work for any avatars that do not have a Profile filled out (this is due to a limitation of the Googly proxy we&#039;re using here).  I&#039;m researching this and trying to see if there is a better proxy to use.&lt;br /&gt;
&lt;br /&gt;
This version can handle multiple requests at once.  Replies have changed slightly, as the found key is returned in the &amp;quot;key&amp;quot; field instead of the message field.  In addition, failure of any kind results in a NULL_KEY being returned, and status information is returned in the message field. - [[User:Sensei Schism|Sensei Schism]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Mar-08: Sensei, I reused your version here above and took back BabelFish as Google one is unable to retrieve all links (doesn&#039;t recognized correctly the secondlife:/// link). In addition, I made some slight changes as LL recently changed their search engine. This version now works properly.&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Aug-27: LL changed the search URL from &#039;&#039;&#039;search&#039;&#039;&#039;.secondlife.com/client_search.php to &#039;&#039;&#039;vwrsearch&#039;&#039;&#039;.secondlife.com/client_search.php&lt;br /&gt;
[[User:ab Vanmoer|ab Vanmoer]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-04: The problem with the proxy you have there is that it translates the name as a french name, and if it happens to be a real french word, then the name gets changed to that.  for example the last name of Vella got changed to Calved, so no match was made.  PS. I also found some names had been surrounded by bold tags.  So, since i have a few websites i can run PHP on i got [http://sourceforge.net/projects/php-proxy/ PHP Web Proxy] and point to it.  Also, I used: body = llDumpList2String(llParseStringKeepNulls(body, [&amp;quot;&amp;lt;b&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/b&amp;gt;&amp;quot;], []), &amp;quot;&amp;quot;); to remove the bold tags.&lt;br /&gt;
-Spritely Pixel&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-19: Changed the translation from french to korean on the theory that there are very few names that contain valid Korean characters, thus the translation should just pass straight through.  Changes were: 1. Change the proxy url to use ko_en instead of fr_en.  2. Change the profile search string from &amp;quot;Resident profiles&amp;quot; to &amp;quot;Resident profile&amp;quot; (note change from plural to singular) and changed the name offset to account for the (now missing) &#039;s&#039;. Also note that Babel will sometimes return an advertising page instead of the translation.  Thus, you should be prepared to retry the search a few times if you get a page that doesn&#039;t make sense.[[User:Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-20: Got fed up with the babel translation thing.  Apparently, if you make too many requests, Yahoo throttles you for between 2 and 24 hours.  So I made a relay for the google appspot engine and replicated this page with the new code here: [https://wiki.secondlife.com/wiki/User:Takat_Su/Name2Key] [[Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}{{LSLC|Examples|Name2Key}}&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=493972</id>
		<title>Name2Key in LSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=493972"/>
		<updated>2009-09-20T23:05:54Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: /* Comments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== Name2Key ==&lt;br /&gt;
Still missing Name2Key functions in your code? Still relying on external databases that are not always up to date with latests SL subscribers? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script! All you have to do is to rely on LL Search engine! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Library ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY     = 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET = 19791;&lt;br /&gt;
&lt;br /&gt;
string proxy     = &amp;quot;http://66.196.80.202/babelfish/translate_url_content?&amp;amp;intl=us&amp;amp;lp=ko_en&amp;amp;trurl=&amp;quot;;&lt;br /&gt;
string search    = &amp;quot;http://vwrsearch.secondlife.com/client_search.php?session=00000000-0000-0000-0000-000000000000&amp;amp;q=&amp;quot;;&lt;br /&gt;
string result    = &amp;quot;secondlife:///app/agent/&amp;quot;;&lt;br /&gt;
string profile   = &amp;quot;Resident profile&amp;quot;;&lt;br /&gt;
string notfound  = &amp;quot;There were no matches for &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
list    requests;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        requests = [];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer s, integer n, string m, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if (n == SERVICE_NAME2KEY) {&lt;br /&gt;
            if(llListFindList(requests,[m]) == -1) {&lt;br /&gt;
                list Args=llParseString2List(m, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
&lt;br /&gt;
                string FirstName = llList2String(Args, 0);&lt;br /&gt;
                string LastName = llList2String(Args, 1);&lt;br /&gt;
&lt;br /&gt;
                string url = proxy+llEscapeURL(search)+FirstName+&amp;quot;%2520&amp;quot;+LastName;;&lt;br /&gt;
                key id = llHTTPRequest(url, [], &amp;quot;&amp;quot;);&lt;br /&gt;
                requests += [id,m];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer p = llListFindList(requests,[request_id]);&lt;br /&gt;
        if (p != -1) {&lt;br /&gt;
            string name = llList2String(requests,p+1);&lt;br /&gt;
            integer find = llSubStringIndex(body,result);&lt;br /&gt;
            if(find == -1) {&lt;br /&gt;
                find = llSubStringIndex(body,notfound);&lt;br /&gt;
                if(find == -1)&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,&amp;quot;Error with lookup!&amp;quot;,NULL_KEY);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; not found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                find += llStringLength(result);&lt;br /&gt;
                string avKey = llGetSubString(body,find,find+35);&lt;br /&gt;
                integer namePos = llSubStringIndex(body,profile)+17;&lt;br /&gt;
                string foundName = llGetSubString(body, namePos+1,&lt;br /&gt;
                    namePos + llSubStringIndex(llGetSubString(body,namePos+1, llStringLength(body)-1),&amp;quot;&amp;lt;&amp;quot;));&lt;br /&gt;
                if(llToLower(name) == llToLower(foundName))&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,foundName,(key)avKey);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; failed: Wrong found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            requests = llDeleteSubList(requests,p,p+1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Usage sample ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        =   19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    =   19791;&lt;br /&gt;
 &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
 &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    listen(integer c, string n, key i, string m)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Requesting key for &amp;quot;+m);&lt;br /&gt;
        llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, m, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    link_message(integer f, integer n, string s, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if(n == SERVICE_NAME2KEY_RET) {&lt;br /&gt;
            if(i == NULL_KEY)&lt;br /&gt;
                llSay(0,&amp;quot;Lookup failed.  Returned: &amp;quot;+s);&lt;br /&gt;
            else&lt;br /&gt;
                llSay(0,s+&amp;quot;: &amp;quot;+(string)i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Comments ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
Hope this helps !&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
EDIT : Looks like the Lindens have either broken or blocked this function. It works from my browser, however from LSL I get an error page containing this message &amp;quot;Access control configuration prevents your request from&lt;br /&gt;
being allowed at this time.  Please contact your service provider if&lt;br /&gt;
you feel this is incorrect.&amp;quot; - Darling Brody.&lt;br /&gt;
&lt;br /&gt;
EDIT : Yes you&#039;re right Darling. It seems they&#039;ve blocked this access from within the world... I still wonder why, especially as there are some workarounds to this...&lt;br /&gt;
Anyway I discovered there is a JIRA issue for this. Please vote for the unblock !&lt;br /&gt;
https://jira.secondlife.com/browse/SVC-3122&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT : OK after having read this article from LL: http://wiki.secondlife.com/wiki/SearchAPI, it seems proxy usage is allowed. So I modified the upper code in order to go through a proxy machine and it works again :)&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT: After review, it appears the Yahoo Babelfish proxy you are using above does not return the results expected.  I rewrote this to allow different proxies by a simple configuration.  This now uses Google instead of Babelfish by default.  This does not, however, work for any avatars that do not have a Profile filled out (this is due to a limitation of the Googly proxy we&#039;re using here).  I&#039;m researching this and trying to see if there is a better proxy to use.&lt;br /&gt;
&lt;br /&gt;
This version can handle multiple requests at once.  Replies have changed slightly, as the found key is returned in the &amp;quot;key&amp;quot; field instead of the message field.  In addition, failure of any kind results in a NULL_KEY being returned, and status information is returned in the message field. - [[User:Sensei Schism|Sensei Schism]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Mar-08: Sensei, I reused your version here above and took back BabelFish as Google one is unable to retrieve all links (doesn&#039;t recognized correctly the secondlife:/// link). In addition, I made some slight changes as LL recently changed their search engine. This version now works properly.&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Aug-27: LL changed the search URL from &#039;&#039;&#039;search&#039;&#039;&#039;.secondlife.com/client_search.php to &#039;&#039;&#039;vwrsearch&#039;&#039;&#039;.secondlife.com/client_search.php&lt;br /&gt;
[[User:ab Vanmoer|ab Vanmoer]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-04: The problem with the proxy you have there is that it translates the name as a french name, and if it happens to be a real french word, then the name gets changed to that.  for example the last name of Vella got changed to Calved, so no match was made.  PS. I also found some names had been surrounded by bold tags.  So, since i have a few websites i can run PHP on i got [http://sourceforge.net/projects/php-proxy/ PHP Web Proxy] and point to it.  Also, I used: body = llDumpList2String(llParseStringKeepNulls(body, [&amp;quot;&amp;lt;b&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/b&amp;gt;&amp;quot;], []), &amp;quot;&amp;quot;); to remove the bold tags.&lt;br /&gt;
-Spritely Pixel&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-19: Changed the translation from french to korean on the theory that there are very few names that contain valid Korean characters, thus the translation should just pass straight through.  Changes were: 1. Change the proxy url to use ko_en instead of fr_en.  2. Change the profile search string from &amp;quot;Resident profiles&amp;quot; to &amp;quot;Resident profile&amp;quot; (note change from plural to singular) and changed the name offset to account for the (now missing) &#039;s&#039;. Also note that Babel will sometimes return an advertising page instead of the translation.  Thus, you should be prepared to retry the search a few times if you get a page that doesn&#039;t make sense.[[User:Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-20: Got fed up with the babel translation thing.  Apparently, if you make too many requests, Yahoo throttles you for between 2 and 24 hours.  So I made a relay for the google appspot engine and replicated this page with the new code here: [https://wiki.secondlife.com/wiki/User:Takat_Su/Name2Key]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}{{LSLC|Examples|Name2Key}}&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Takat_Su/Name2Key&amp;diff=493962</id>
		<title>User:Takat Su/Name2Key</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Takat_Su/Name2Key&amp;diff=493962"/>
		<updated>2009-09-20T23:02:20Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: Created page with &amp;#039;{{LSL Header}}__NOTOC__  == Name2Key == &amp;#039;&amp;#039;&amp;#039;This is an update to Maeva Anatine&amp;#039;s excellent suggestion for an updated name2key function.  Rather than overwrite all her work, I crea...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== Name2Key ==&lt;br /&gt;
&#039;&#039;&#039;This is an update to Maeva Anatine&#039;s excellent suggestion for an updated name2key function.  Rather than overwrite all her work, I created this page.  The idea is DEFINITELY hers - I just am creating an alternate implementation.&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Still missing Name2Key functions in your code? Still relying on external databases that are not always up to date with latests SL subscribers? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script! All you have to do is to rely on LL Search engine! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Library ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer cmdName2Key = 19790;&lt;br /&gt;
integer cmdName2KeyResponse = 19791;&lt;br /&gt;
&lt;br /&gt;
list gRequests;&lt;br /&gt;
&lt;br /&gt;
key requestName2Key( string inName ) {&lt;br /&gt;
    list lNameParts = llParseString2List( inName, [&amp;quot; &amp;quot;], [] );&lt;br /&gt;
    string lFirstName = llList2String( lNameParts, 0 );&lt;br /&gt;
    string lLastName = llList2String( lNameParts, 1 );&lt;br /&gt;
    return llHTTPRequest( &amp;quot;http://name2key.appspot.com/?name=&amp;quot; + lFirstName + &amp;quot;%20&amp;quot; + lLastName, [], &amp;quot;&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    link_message( integer inFromPrim, integer inCommand, string inName, key inKey ) {&lt;br /&gt;
        if( inCommand == cmdName2Key )&lt;br /&gt;
            gRequests += [requestName2Key( inName ), inKey ];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    http_response(key inKey, integer inStatus, list inMetaData, string inBody ) {&lt;br /&gt;
        integer lPosition = llListFindList( gRequests, [inKey]);&lt;br /&gt;
        if( lPosition != -1 ) {&lt;br /&gt;
            llMessageLinked( LINK_SET, cmdName2KeyResponse, inBody, llList2Key( gRequests, lPosition+1 ) );&lt;br /&gt;
            gRequests = llDeleteSubList( gRequests, lPosition, lPosition + 1 );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Usage sample ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer cmdName2Key = 19790;&lt;br /&gt;
integer cmdName2KeyResponse = 19791;&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        llMessageLinked( LINK_SET, cmdName2Key, &amp;quot;Test Name&amp;quot;, NULL_KEY );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message( integer inFromPrim, integer inCommand, string inKeyData, key inReturnedKey ) {&lt;br /&gt;
        if( inCommand == cmdName2KeyResponse ) {&lt;br /&gt;
            list lParts = llParseString2List( inKeyData, [&amp;quot;:&amp;quot;], [] );&lt;br /&gt;
            string lName = llList2String( lParts, 0 );&lt;br /&gt;
            key lKey = (key)llList2String(lParts, 1 );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Comments ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
The main difference is that I wrote a an app for the google app engine that act as a relay.  Since I was going that far, it also parses the return, strips out all the extraneous stuff and just returns you the name and key separated by a colon.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[User:Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}{{LSLC|Examples|Name2Key}}&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=493703</id>
		<title>Name2Key in LSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=493703"/>
		<updated>2009-09-20T02:10:13Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: Added in autionary note about babel returning an advertising page instead of the translation upon occasion.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== Name2Key ==&lt;br /&gt;
Still missing Name2Key functions in your code? Still relying on external databases that are not always up to date with latests SL subscribers? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script! All you have to do is to rely on LL Search engine! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Library ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY     = 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET = 19791;&lt;br /&gt;
&lt;br /&gt;
string proxy     = &amp;quot;http://66.196.80.202/babelfish/translate_url_content?&amp;amp;intl=us&amp;amp;lp=ko_en&amp;amp;trurl=&amp;quot;;&lt;br /&gt;
string search    = &amp;quot;http://vwrsearch.secondlife.com/client_search.php?session=00000000-0000-0000-0000-000000000000&amp;amp;q=&amp;quot;;&lt;br /&gt;
string result    = &amp;quot;secondlife:///app/agent/&amp;quot;;&lt;br /&gt;
string profile   = &amp;quot;Resident profile&amp;quot;;&lt;br /&gt;
string notfound  = &amp;quot;There were no matches for &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
list    requests;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        requests = [];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer s, integer n, string m, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if (n == SERVICE_NAME2KEY) {&lt;br /&gt;
            if(llListFindList(requests,[m]) == -1) {&lt;br /&gt;
                list Args=llParseString2List(m, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
&lt;br /&gt;
                string FirstName = llList2String(Args, 0);&lt;br /&gt;
                string LastName = llList2String(Args, 1);&lt;br /&gt;
&lt;br /&gt;
                string url = proxy+llEscapeURL(search)+FirstName+&amp;quot;%2520&amp;quot;+LastName;;&lt;br /&gt;
                key id = llHTTPRequest(url, [], &amp;quot;&amp;quot;);&lt;br /&gt;
                requests += [id,m];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer p = llListFindList(requests,[request_id]);&lt;br /&gt;
        if (p != -1) {&lt;br /&gt;
            string name = llList2String(requests,p+1);&lt;br /&gt;
            integer find = llSubStringIndex(body,result);&lt;br /&gt;
            if(find == -1) {&lt;br /&gt;
                find = llSubStringIndex(body,notfound);&lt;br /&gt;
                if(find == -1)&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,&amp;quot;Error with lookup!&amp;quot;,NULL_KEY);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; not found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                find += llStringLength(result);&lt;br /&gt;
                string avKey = llGetSubString(body,find,find+35);&lt;br /&gt;
                integer namePos = llSubStringIndex(body,profile)+17;&lt;br /&gt;
                string foundName = llGetSubString(body, namePos+1,&lt;br /&gt;
                    namePos + llSubStringIndex(llGetSubString(body,namePos+1, llStringLength(body)-1),&amp;quot;&amp;lt;&amp;quot;));&lt;br /&gt;
                if(llToLower(name) == llToLower(foundName))&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,foundName,(key)avKey);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; failed: Wrong found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            requests = llDeleteSubList(requests,p,p+1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Usage sample ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        =   19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    =   19791;&lt;br /&gt;
 &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
 &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    listen(integer c, string n, key i, string m)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Requesting key for &amp;quot;+m);&lt;br /&gt;
        llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, m, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    link_message(integer f, integer n, string s, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if(n == SERVICE_NAME2KEY_RET) {&lt;br /&gt;
            if(i == NULL_KEY)&lt;br /&gt;
                llSay(0,&amp;quot;Lookup failed.  Returned: &amp;quot;+s);&lt;br /&gt;
            else&lt;br /&gt;
                llSay(0,s+&amp;quot;: &amp;quot;+(string)i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Comments ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
Hope this helps !&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
EDIT : Looks like the Lindens have either broken or blocked this function. It works from my browser, however from LSL I get an error page containing this message &amp;quot;Access control configuration prevents your request from&lt;br /&gt;
being allowed at this time.  Please contact your service provider if&lt;br /&gt;
you feel this is incorrect.&amp;quot; - Darling Brody.&lt;br /&gt;
&lt;br /&gt;
EDIT : Yes you&#039;re right Darling. It seems they&#039;ve blocked this access from within the world... I still wonder why, especially as there are some workarounds to this...&lt;br /&gt;
Anyway I discovered there is a JIRA issue for this. Please vote for the unblock !&lt;br /&gt;
https://jira.secondlife.com/browse/SVC-3122&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT : OK after having read this article from LL: http://wiki.secondlife.com/wiki/SearchAPI, it seems proxy usage is allowed. So I modified the upper code in order to go through a proxy machine and it works again :)&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT: After review, it appears the Yahoo Babelfish proxy you are using above does not return the results expected.  I rewrote this to allow different proxies by a simple configuration.  This now uses Google instead of Babelfish by default.  This does not, however, work for any avatars that do not have a Profile filled out (this is due to a limitation of the Googly proxy we&#039;re using here).  I&#039;m researching this and trying to see if there is a better proxy to use.&lt;br /&gt;
&lt;br /&gt;
This version can handle multiple requests at once.  Replies have changed slightly, as the found key is returned in the &amp;quot;key&amp;quot; field instead of the message field.  In addition, failure of any kind results in a NULL_KEY being returned, and status information is returned in the message field. - [[User:Sensei Schism|Sensei Schism]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Mar-08: Sensei, I reused your version here above and took back BabelFish as Google one is unable to retrieve all links (doesn&#039;t recognized correctly the secondlife:/// link). In addition, I made some slight changes as LL recently changed their search engine. This version now works properly.&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Aug-27: LL changed the search URL from &#039;&#039;&#039;search&#039;&#039;&#039;.secondlife.com/client_search.php to &#039;&#039;&#039;vwrsearch&#039;&#039;&#039;.secondlife.com/client_search.php&lt;br /&gt;
[[User:ab Vanmoer|ab Vanmoer]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-04: The problem with the proxy you have there is that it translates the name as a french name, and if it happens to be a real french word, then the name gets changed to that.  for example the last name of Vella got changed to Calved, so no match was made.  PS. I also found some names had been surrounded by bold tags.  So, since i have a few websites i can run PHP on i got [http://sourceforge.net/projects/php-proxy/ PHP Web Proxy] and point to it.  Also, I used: body = llDumpList2String(llParseStringKeepNulls(body, [&amp;quot;&amp;lt;b&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/b&amp;gt;&amp;quot;], []), &amp;quot;&amp;quot;); to remove the bold tags.&lt;br /&gt;
-Spritely Pixel&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-19: Changed the translation from french to korean on the theory that there are very few names that contain valid Korean characters, thus the translation should just pass straight through.  Changes were: 1. Change the proxy url to use ko_en instead of fr_en.  2. Change the profile search string from &amp;quot;Resident profiles&amp;quot; to &amp;quot;Resident profile&amp;quot; (note change from plural to singular) and changed the name offset to account for the (now missing) &#039;s&#039;. Also note that Babel will sometimes return an advertising page instead of the translation.  Thus, you should be prepared to retry the search a few times if you get a page that doesn&#039;t make sense.[[User:Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}{{LSLC|Examples|Name2Key}}&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=493403</id>
		<title>Name2Key in LSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Name2Key_in_LSL&amp;diff=493403"/>
		<updated>2009-09-19T15:39:45Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: Changed the translation from French to Korean to mitigate the &amp;quot;name is a french word&amp;quot; problem.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== Name2Key ==&lt;br /&gt;
Still missing Name2Key functions in your code? Still relying on external databases that are not always up to date with latests SL subscribers? &lt;br /&gt;
&lt;br /&gt;
Well now you can solve this by yourself, within your LSL script! All you have to do is to rely on LL Search engine! &lt;br /&gt;
&lt;br /&gt;
I put a kind of &amp;quot;library&amp;quot; and a sample of usage for your convenience&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Library ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY     = 19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET = 19791;&lt;br /&gt;
&lt;br /&gt;
string proxy     = &amp;quot;http://66.196.80.202/babelfish/translate_url_content?&amp;amp;intl=us&amp;amp;lp=ko_en&amp;amp;trurl=&amp;quot;;&lt;br /&gt;
string search    = &amp;quot;http://vwrsearch.secondlife.com/client_search.php?session=00000000-0000-0000-0000-000000000000&amp;amp;q=&amp;quot;;&lt;br /&gt;
string result    = &amp;quot;secondlife:///app/agent/&amp;quot;;&lt;br /&gt;
string profile   = &amp;quot;Resident profile&amp;quot;;&lt;br /&gt;
string notfound  = &amp;quot;There were no matches for &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
list    requests;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        requests = [];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer s, integer n, string m, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if (n == SERVICE_NAME2KEY) {&lt;br /&gt;
            if(llListFindList(requests,[m]) == -1) {&lt;br /&gt;
                list Args=llParseString2List(m, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
&lt;br /&gt;
                string FirstName = llList2String(Args, 0);&lt;br /&gt;
                string LastName = llList2String(Args, 1);&lt;br /&gt;
&lt;br /&gt;
                string url = proxy+llEscapeURL(search)+FirstName+&amp;quot;%2520&amp;quot;+LastName;;&lt;br /&gt;
                key id = llHTTPRequest(url, [], &amp;quot;&amp;quot;);&lt;br /&gt;
                requests += [id,m];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    http_response(key request_id, integer status, list metadata, string body)&lt;br /&gt;
    {&lt;br /&gt;
        integer p = llListFindList(requests,[request_id]);&lt;br /&gt;
        if (p != -1) {&lt;br /&gt;
            string name = llList2String(requests,p+1);&lt;br /&gt;
            integer find = llSubStringIndex(body,result);&lt;br /&gt;
            if(find == -1) {&lt;br /&gt;
                find = llSubStringIndex(body,notfound);&lt;br /&gt;
                if(find == -1)&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,&amp;quot;Error with lookup!&amp;quot;,NULL_KEY);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; not found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                find += llStringLength(result);&lt;br /&gt;
                string avKey = llGetSubString(body,find,find+35);&lt;br /&gt;
                integer namePos = llSubStringIndex(body,profile)+17;&lt;br /&gt;
                string foundName = llGetSubString(body, namePos+1,&lt;br /&gt;
                    namePos + llSubStringIndex(llGetSubString(body,namePos+1, llStringLength(body)-1),&amp;quot;&amp;lt;&amp;quot;));&lt;br /&gt;
                if(llToLower(name) == llToLower(foundName))&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,foundName,(key)avKey);&lt;br /&gt;
                else&lt;br /&gt;
                    llMessageLinked(LINK_SET,SERVICE_NAME2KEY_RET,name+&amp;quot; failed: Wrong found.&amp;quot;,NULL_KEY);&lt;br /&gt;
            }&lt;br /&gt;
            requests = llDeleteSubList(requests,p,p+1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Usage sample ==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer SERVICE_NAME2KEY        =   19790;&lt;br /&gt;
integer SERVICE_NAME2KEY_RET    =   19791;&lt;br /&gt;
 &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer i) { llResetScript(); }&lt;br /&gt;
 &lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llListen(1, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    listen(integer c, string n, key i, string m)&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0,&amp;quot;Requesting key for &amp;quot;+m);&lt;br /&gt;
        llMessageLinked(LINK_THIS, SERVICE_NAME2KEY, m, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    link_message(integer f, integer n, string s, key i)&lt;br /&gt;
    {&lt;br /&gt;
        if(n == SERVICE_NAME2KEY_RET) {&lt;br /&gt;
            if(i == NULL_KEY)&lt;br /&gt;
                llSay(0,&amp;quot;Lookup failed.  Returned: &amp;quot;+s);&lt;br /&gt;
            else&lt;br /&gt;
                llSay(0,s+&amp;quot;: &amp;quot;+(string)i);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt; &lt;br /&gt;
== Comments ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
Hope this helps !&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
EDIT : Looks like the Lindens have either broken or blocked this function. It works from my browser, however from LSL I get an error page containing this message &amp;quot;Access control configuration prevents your request from&lt;br /&gt;
being allowed at this time.  Please contact your service provider if&lt;br /&gt;
you feel this is incorrect.&amp;quot; - Darling Brody.&lt;br /&gt;
&lt;br /&gt;
EDIT : Yes you&#039;re right Darling. It seems they&#039;ve blocked this access from within the world... I still wonder why, especially as there are some workarounds to this...&lt;br /&gt;
Anyway I discovered there is a JIRA issue for this. Please vote for the unblock !&lt;br /&gt;
https://jira.secondlife.com/browse/SVC-3122&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT : OK after having read this article from LL: http://wiki.secondlife.com/wiki/SearchAPI, it seems proxy usage is allowed. So I modified the upper code in order to go through a proxy machine and it works again :)&lt;br /&gt;
- Mae&lt;br /&gt;
&lt;br /&gt;
EDIT: After review, it appears the Yahoo Babelfish proxy you are using above does not return the results expected.  I rewrote this to allow different proxies by a simple configuration.  This now uses Google instead of Babelfish by default.  This does not, however, work for any avatars that do not have a Profile filled out (this is due to a limitation of the Googly proxy we&#039;re using here).  I&#039;m researching this and trying to see if there is a better proxy to use.&lt;br /&gt;
&lt;br /&gt;
This version can handle multiple requests at once.  Replies have changed slightly, as the found key is returned in the &amp;quot;key&amp;quot; field instead of the message field.  In addition, failure of any kind results in a NULL_KEY being returned, and status information is returned in the message field. - [[User:Sensei Schism|Sensei Schism]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Mar-08: Sensei, I reused your version here above and took back BabelFish as Google one is unable to retrieve all links (doesn&#039;t recognized correctly the secondlife:/// link). In addition, I made some slight changes as LL recently changed their search engine. This version now works properly.&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Aug-27: LL changed the search URL from &#039;&#039;&#039;search&#039;&#039;&#039;.secondlife.com/client_search.php to &#039;&#039;&#039;vwrsearch&#039;&#039;&#039;.secondlife.com/client_search.php&lt;br /&gt;
[[User:ab Vanmoer|ab Vanmoer]]&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-04: The problem with the proxy you have there is that it translates the name as a french name, and if it happens to be a real french word, then the name gets changed to that.  for example the last name of Vella got changed to Calved, so no match was made.  PS. I also found some names had been surrounded by bold tags.  So, since i have a few websites i can run PHP on i got [http://sourceforge.net/projects/php-proxy/ PHP Web Proxy] and point to it.  Also, I used: body = llDumpList2String(llParseStringKeepNulls(body, [&amp;quot;&amp;lt;b&amp;gt;&amp;quot;, &amp;quot;&amp;lt;/b&amp;gt;&amp;quot;], []), &amp;quot;&amp;quot;); to remove the bold tags.&lt;br /&gt;
-Spritely Pixel&lt;br /&gt;
&lt;br /&gt;
EDIT 2009-Sep-19: Changed the translation from french to korean on the theory that there are very few names that contain valid Korean characters, thus the translation should just pass straight through.  Changes were: 1. Change the proxy url to use ko_en instead of fr_en.  2. Change the profile search string from &amp;quot;Resident profiles&amp;quot; to &amp;quot;Resident profile&amp;quot; (note change from plural to singular) and changed the name offset to account for the (now missing) &#039;s&#039;. [[User:Takat Su|Takat Su]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}{{LSLC|Examples|Name2Key}}&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetHTTPHeader&amp;diff=462723</id>
		<title>LlGetHTTPHeader</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetHTTPHeader&amp;diff=462723"/>
		<updated>2009-08-17T17:06:45Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=349|func_sleep=0.0|func_energy=10.0|mode&lt;br /&gt;
|func=llGetHTTPHeader|return_type=string&lt;br /&gt;
|p1_type=key|p1_name=request_id|p1_desc=A valid HTTP request key.&lt;br /&gt;
|p2_type=string|p2_name=header|p2_desc=Header value name.&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the value for &#039;&#039;&#039;header&#039;&#039;&#039; for &#039;&#039;&#039;request_id&#039;&#039;&#039;.&lt;br /&gt;
|spec=&lt;br /&gt;
===Generated Headers===&lt;br /&gt;
These headers are automatically generated by the simulator, they were not actually sent by the requesting client. They supply information about the request to make parsing easier.&lt;br /&gt;
&lt;br /&gt;
Sample URL: [https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322/foo/bar?arg=gra {{HoverTextStyle|style=color:green;|&amp;lt;nowiki&amp;gt;https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322&amp;lt;/nowiki&amp;gt;|2={{String|x-script-url}} = {{String|https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322}}}}{{HoverTextStyle|style=color:blue;|/foo/bar|2={{String|x-path-info}} = {{String|/foo/bar}}}}?{{HoverTextStyle|style=color:red;|1=arg=gra|2={{String|x-query-string}} = {{String|1=arg=gra}}}}]&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;lltable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! header&lt;br /&gt;
! description&lt;br /&gt;
! example&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;quot;x-script-url&amp;quot;&lt;br /&gt;
{{!}} The base url, as originally received from [[llRequestURL]]/[[llRequestSecureURL]]&lt;br /&gt;
{{!}} &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;quot;x-path-info&amp;quot;&lt;br /&gt;
{{!}} Any trailing path information from the requested url&lt;br /&gt;
{{!}} &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;/foo/bar&amp;lt;/font&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;quot;x-query-string&amp;quot;&lt;br /&gt;
{{!}} Any query arguments, the text past the first &amp;quot;?&amp;quot; in the url&lt;br /&gt;
{{!}} &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;arg=gra&amp;lt;/font&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;quot;x-remote-ip&amp;quot;&lt;br /&gt;
{{!}} IP address of the host that made the request&lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===Common Headers===&lt;br /&gt;
&lt;br /&gt;
{{{!}} class=&amp;quot;lltable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! header&lt;br /&gt;
! description&lt;br /&gt;
! example&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;quot;user-agent&amp;quot;&lt;br /&gt;
{{!}} The user-agent header as reported by the requester &lt;br /&gt;
{{!}}&lt;br /&gt;
{{!}}}&lt;br /&gt;
&lt;br /&gt;
===[[llHTTPRequest]] Headers===&lt;br /&gt;
{{LSL_Constants/HTTP_Headers|lower-case=*}}&lt;br /&gt;
|caveats=* LSL is not a CGI environment&lt;br /&gt;
** &amp;quot;Content-Type&amp;quot; is an example of a normal header name, in a CGI environment the name would be &amp;quot;HTTP_CONTENT_TYPE&amp;quot;.&lt;br /&gt;
* This header information is valid for 30 seconds, or until [[llHTTPResponse]] is called.&lt;br /&gt;
* The header names listed above are incorrect - they should all be fully lower case (i.e. x-secondlife-shard, x-secondlife-object-name, x-secondlife-object-key, x-secondlife-region, etc.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
key url_request;&lt;br /&gt;
 &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        url_request = llRequestURL();&lt;br /&gt;
    }&lt;br /&gt;
    http_request(key id, string method, string body)&lt;br /&gt;
    {&lt;br /&gt;
        if (url_request == id)&lt;br /&gt;
        {&lt;br /&gt;
            url_request = &amp;quot;&amp;quot;;&lt;br /&gt;
            if (method == URL_REQUEST_GRANTED)&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0,&amp;quot;URL: &amp;quot; + body);&lt;br /&gt;
                if(llGetAgentSize(llGetOwner()))&lt;br /&gt;
                    llLoadURL(llGetOwner(), &amp;quot;&amp;quot;, body);&lt;br /&gt;
            }&lt;br /&gt;
            else if (method == URL_REQUEST_DENIED)&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Something went wrong, no url. &amp;quot; + body);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            list headers = [ &amp;quot;x-script-url&amp;quot;, &amp;quot;x-path-info&amp;quot;, &amp;quot;x-query-string&amp;quot;, &amp;quot;x-remote-ip&amp;quot;, &amp;quot;user-agent&amp;quot; ];&lt;br /&gt;
            integer pos = ~llGetListLength(headers);&lt;br /&gt;
            while( ++pos )&lt;br /&gt;
            {&lt;br /&gt;
                string header = llList2String(headers, pos);&lt;br /&gt;
                llSay(0,header + &amp;quot;: &amp;quot; + llGetHTTPHeader(id, header));&lt;br /&gt;
            }&lt;br /&gt;
            llSay(0, &amp;quot;body: &amp;quot; + body);&lt;br /&gt;
            llHTTPResponse(id, 200, body);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llGetFreeURLs]]}}&lt;br /&gt;
{{LSL DefineRow||[[llRequestURL]]}}&lt;br /&gt;
{{LSL DefineRow||[[llRequestSecureURL]]}}&lt;br /&gt;
{{LSL DefineRow||[[llReleaseURL]]}}&lt;br /&gt;
{{LSL DefineRow||[[llHTTPResponse]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events=&lt;br /&gt;
{{LSL DefineRow||[[http_request]]}}&lt;br /&gt;
|also_articles=&lt;br /&gt;
{{LSL DefineRow||[[LSL http server]]}}&lt;br /&gt;
{{LSL DefineRow||{{Wikipedia|List_of_HTTP_headers|Wikipedia:List of HTTP headers}}}}&lt;br /&gt;
|notes&lt;br /&gt;
|deepnotes=&lt;br /&gt;
|history=&lt;br /&gt;
*{{SVN|1836|rev=112899 |trunk=*|anchor=file22|ver=|ser=}}&lt;br /&gt;
|cat1=HTTP&lt;br /&gt;
|cat2=HTTP/Server&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlRotBetween&amp;diff=399502</id>
		<title>LlRotBetween</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlRotBetween&amp;diff=399502"/>
		<updated>2009-06-20T18:44:06Z</updated>

		<summary type="html">&lt;p&gt;Takat Su: Noted bug in llRotBetween and added caveat that the rotations returned range from -PI to +PI around each axis.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=21|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llRotBetween&lt;br /&gt;
|return_type=rotation|p1_type=vector|p1_name=start|p2_type=vector|p2_name=end&lt;br /&gt;
|func_footnote&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=that is the rotation between the direction &#039;&#039;&#039;start&#039;&#039;&#039; and the direction &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
|spec=&#039;&#039;&#039;start&#039;&#039;&#039; and &#039;&#039;&#039;end&#039;&#039;&#039; are directions and are relative to the origin &amp;lt;0.0, 0.0, 0.0&amp;gt;. If you have coordinates relative to a different origin, subtract that origin from the input vectors.&lt;br /&gt;
|caveats=*&amp;lt;code&amp;gt;start * llRotBetween(start, end) == end&amp;lt;/code&amp;gt; is only true if &#039;&#039;&#039;start&#039;&#039;&#039; and &#039;&#039;&#039;end&#039;&#039;&#039; have the same magnitude and neither have a magnitude of zero (see [[#Notes]] for a workaround).&lt;br /&gt;
* Rotations are from -PI to +PI around each axis.&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;llRotBetween(&amp;lt;1.0, 0.0, 0.0&amp;gt;, &amp;lt;0.0, -1.0, 0.0&amp;gt;)&lt;br /&gt;
// will return &amp;lt;0.00000, 0.00000, -0.70711, 0.70711&amp;gt; (which represents -45 degrees on the z axis)&lt;br /&gt;
&lt;br /&gt;
llRotBetween(&amp;lt;0.0, 0.0, 0.0&amp;gt;, &amp;lt;0.0, -1.0, 0.0&amp;gt;)&lt;br /&gt;
// will return &amp;lt;0.00000, 0.00000, 0.00000, 1.00000&amp;gt; (which represents a zero angle on all axis)&lt;br /&gt;
// because &amp;lt;0.0, 0.0, 0.0&amp;gt; does not convey a direction.&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llAngleBetween]]}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes=&lt;br /&gt;
This function adjusts the magnitude of the quaternion so &amp;lt;code&amp;gt;start * llRotBetween(start, end) == end&amp;lt;/code&amp;gt; is true as long as neither have a magnitude of zero. They don&#039;t have to have the same magnitude. &lt;br /&gt;
&amp;lt;lsl&amp;gt;rotation RotBetween(vector start, vector end) //adjusts quaternion magnitude so (start * return == end) &lt;br /&gt;
{//Authors note: I have never had a use for this but it&#039;s good to know how to do it if I did.&lt;br /&gt;
    rotation rot = llRotBetween(start, end);&lt;br /&gt;
    if(start)&lt;br /&gt;
    {&lt;br /&gt;
        if(end)&lt;br /&gt;
        {&lt;br /&gt;
            float d = llSqrt(llVecMag(end) / llVecMag(start));&lt;br /&gt;
            return &amp;lt;rot.x * d, rot.y * d, rot.z * d, rot.s * d&amp;gt;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return rot;&lt;br /&gt;
}//Strife Onizuka&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Vectors that are near opposite each other in direction may lead to erroneous results. &lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// First Vector is due north second vector is ALMOST due south.&lt;br /&gt;
rotation lRotation = llRotBetween( &amp;lt;0., 1., 0.&amp;gt;, &amp;lt;-0.001, -.1, 0.&amp;gt; );&lt;br /&gt;
llSay(0, lRotation );&lt;br /&gt;
// Provides a result of &amp;lt;1.00000, 0.00000, 0.00000, 0.00000&amp;gt;.&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=Math/3D&lt;br /&gt;
|cat2=Rotation&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Takat Su</name></author>
	</entry>
</feed>