LSL: AOL IM Status Indicator
Posted: April 28, 2009 | Author: hilary | Filed under: blog | Tags: aim, lsl, second life | 3 Comments »I think this might be my very first LSL script, from back in 2005! This script indicates whether your AIM (AOL Instant Messenger) account is online by changing the color of an object. You can configure it to either share your AIM ID publicly, or keep it private.
This script uses the AIM web services API to check your online status — you only need to give it your username, not your password! This is not a proxy service. You can’t send messages through this script, just show your online status in SL.
To use this script, create an object in your favorite shape, create a new script inside of it, paste this code into it and save.
key request_id;
string aim_id;
string av_name;
key data_card;
integer nLine = 0;
integer public = TRUE;
default
{
state_entry()
{
llSetText("AIM Indicator... setting up",<1,1,1>,1);
data_card = llGetNotecardLine("Settings",nLine); // load settings
llSetTimerEvent(60); // check once per min
}
// reset when owner touches it
touch_start(integer total_number) {
if (llDetectedKey(0) == llGetOwner()) {
llResetScript();
}
}
// read settings from notecard
dataserver(key query_id, string data) {
if (query_id == data_card) {
if (data != EOF) { // not at the end of the notecard
if (nLine == 0) {
av_name = data;
} if (nLine == 1) {
aim_id = data;
} if (nLine == 2) {
if (data == "private") { // if they do not want their ID shared
public = FALSE;
}
}
++nLine; // increase line count
data_card = llGetNotecardLine("Settings", nLine); // request next line
}
}
}
timer() {
string url = "http://api.oscar.aol.com/SOA/key=hi15uD79wuEukQTS/resource-lists/users/*anonymous*/presence/~~/resource-lists/list%5Bname=%22users%22%5D/entry%5B@uri=%22user:"+aim_id+"%22%5D";
request_id = llHTTPRequest(url,[HTTP_METHOD, "GET"],"");
}
http_response(key req_id, integer status, list metadata, string body) {
if (req_id == request_id) {
list result = llParseString2List(body,["<",">","n"],[]);
// if user is online
if (llList2String(result,24) != "http://cdn.digitalcity.com/presence/offline.gif") {
if (public == FALSE) {
llSetText(av_name+"'s AIM account is online",<1,1,1>,1);
} else {
llSetText("AIM "+av_name+": "+aim_id+" is online",<1,1,1>,1);
}
llSetColor(llVecNorm(<160,237,160>),ALL_SIDES);
} else { // user is offline
llSetText(av_name+"'s AIM account is offline",<1,1,1>,1);
llSetColor(llVecNorm(<237,160,160>),ALL_SIDES);
}
}
}
}
This script is released under
. Have fun!
Create a notecard called “Settings” with your avatar name on the first line* and your AIM username on the second line. If you do not want your AIM username shared, put the word “private” on the third line. If you do want it shared, change the line to anything else (“public”, or even blank will do). For example:
Ann Enigma hilm1 private
The script polls the AIM server every 60 seconds, so give it a minute to update. It will reset if the owner clicks on it.
* I’m aware that you can get the avatar name via LSL — this was my first script, be nice!
LSL: Newspaper Stand (Pull Data From an API and Display it in Second Life)
Posted: February 28, 2009 | Author: hilary | Filed under: blog | Tags: edtech, lsl, news, rss, second life, virtualworlds, xml, yahoo | 6 Comments »One of the more popular objects that I created in Second Life is the News Stand. This charming device takes any query term and displays the two latest headlines from Yahoo! News. Clicking the news stand will load the top news story for the topic in a web browser.
I’ve gotten more requests to customize the script than I can possibly keep up with, so I’ve decided to release the code under a creative commons license. I hope you find it useful! Please let me know if you make improvements, so that I can link to them from here.
Unfortunately, parsing XML at all and RSS feeds in particular is extremely messy in LSL. This script doesn’t contain a general RSS feed parser — the parsing code was written specifically for the Yahoo! news feed.
// News Stand script
// by Ann Enigma
string url="http://news.search.yahoo.com/news/rss?p=";
key requestid;
string current_url = "http://news.yahoo.com";
integer gLine = 0;
key data_card; // for settings notecard
string query;
integer mins = 10; // number of minutes between refreshes
get_news() {
llWhisper(0, "Refreshing the news...");
requestid = llHTTPRequest(url,[HTTP_METHOD,"GET"],"");
}
default
{
state_entry()
{
data_card = llGetNotecardLine("Settings",gLine); // load settings from notecard
}
// read data from the notecard
dataserver(key query_id, string data) {
if (query_id == data_card) {
if (data != EOF) { // not at the end of the notecard
if (gLine == 0) {
query = data;
}
}
}
state setup;
}
changed(integer change) {
llResetScript();
}
}
state setup {
state_entry()
{
url += llEscapeURL(query); // set the url
get_news(); // get the news!
llSetTimerEvent(60*mins); // every mins # of minutes
}
touch_start(integer total_number)
{
llLoadURL(llDetectedKey(0), "Current Top Story", current_url);
}
http_response(key req_id, integer status, list metadata, string body) {
integer count = 0;
string display;
if (req_id == requestid) { // parse the results (unfortunately messy)
list result = llParseString2List(body,["<",">","n","[","]"],[]);
integer length = llGetListLength(result);
integer i = 0;
for (i = 0; i < length; i++) {
if (llList2String(result,i) == "title" && llList2String(result,i+4) == "/title") {
display += llList2String(result,i+3) + "n";
if (count == 1) {
current_url = llList2String(result,i+6);
}
count++;
}
}
llSetText(display, <1,1,1>, 1.0);
}
}
timer() {
get_news();
}
changed(integer change) {
llResetScript();
}
}
This script is released under
. Have fun!
Create a notecard called “Settings”, with a single line containing your search term. For example:
Educational Technology
The original news stand comes with these instructions, which may come in handy:
To set up the News Stand, simply open the "Settings" notecard, delete the default search term, and type in your own! This gadget will refresh every 10 minutes, and will display the top two headlines on Yahoo! News for any search term. If you click on the news stand, it will load the top story in a web browser. If you would like to build your own news stand, you can simply drag the script and "Settings" notecard into any object.
If you want the no-assembly-required version, the News Stand is available for L$350 at Xstreet SL Marketplace or from the ICT Library on Info Island in-world.
The original news stand object was created by (now former) student Kyle Pouliot.




