Difference between revisions of "GA Event Notifier"
Jump to navigation
Jump to search
Victor Hua (talk | contribs) (Created page with 'This calendar consists of an lsl script and a php script. The lsl script is listed first, and the php script is listed below it. Please be careful not to overlap when copying t...') |
Victor Hua (talk | contribs) m (Minor typo edit) |
||
Line 176: | Line 176: | ||
if (llStringTrim(llList2String(data,3), STRING_TRIM) != "") | if (llStringTrim(llList2String(data,3), STRING_TRIM) != "") | ||
{ | { | ||
place += (val + ":" + llStringTrim(llList2String(data,2), STRING_TRIM)+ ":" + | place += (val + ":" + llStringTrim(llList2String(data,2), STRING_TRIM)+ ":" + llStringTrim(llList2String(data,3), STRING_TRIM)); | ||
} | } | ||
else | else |
Revision as of 19:42, 13 July 2010
This calendar consists of an lsl script and a php script.
The lsl script is listed first, and the php script is listed below it.
Please be careful not to overlap when copying the scripts.
FUNCTION: Gather seven days event data from a Google calendar and display it through a simple interface. The lsl script can access several calendars at once through seperate php files. One file per calendar.
//GA Event Notifier.lsl 1.0 ///////////////////////////////////////////////////////////////////// // GA Event Notifier 1.0 by Jason Dahlen (aka Victor Hua) // SpotOn3D // https://spoton3d.com/ // (c) 2010 - Jason Dahlen // // Distributed as GPL, donated to wiki.secondlife.com on 13 July 2010 // // SCRIPT: GA Event Notifier.lsl 1.0 :: Use on your web server // gaenot_1.0.php :: Use inworld // // FUNCTION: // Gather seven days event data from a Google calendar and display it through a simple interface. //The lsl script can access several calendars at once through seperate php files. One file per calendar. // // USAGE: // 1. Place gaenot_1.0.php in your web directory. Anywhere you can view the php file in a web browser. // You will need a seperate gaenot_1.0.php file for each calendar you want to display. You can rename the files. // 2. At the top of your gaenot_1.0.php file you will find two variables. // $email Enter your gmail address // $Calendar_xml_URL A URL that points to your Live Bookmarks feed for Google Calendars. // You can find this under My Calendar in the settings toward the bottom. // Choose the 'xml' button selection from the following: // -Calendar Address - This address works if you have a publically viewable calendar // (ie viewable publically in a web browser) // -Private Address - Use this address if you want to display information from an // otherwise private calendar. This calendar would then only be viewable by // yourself and those using the in world lsl tool. // 3. Drop the GA Event Notifier.lsl in your object. // 4. Add the locations of the php files in the url list. You can have one or several. // 5. Set the gmtOffset to your time or the time of the calendar you are accessing. // ///////////////////////////////////////////////////////////////////// //Add URLs to the list pointing to the location of your gaenot.php script. //list urls = [ // "https://yourdomain.com/gaenot_1.0.php", // "https://yourdomain.com/gaenot_1.0-2.php" // ]; list urls = [ "https://yourdomain.com/gaenot_1.0.php" ]; //Set the GMT offset to your timezone or to the timezone of the google calendar. integer gmtOffset = -5; //######################################### Edit below this line at your own risk ########################## list days; //Day value reference list dates; //List of event dates list titles; //Event titles list place; //Event locations if given list details; //Event details if given integer calendars; //Number of calendars traced by this tool. integer thisCalendar; //Used when retrieving calendar data. //Used to parse incoming event data list weekdays = ["Thu", "Fri", "Sat", "Sun", "Mon", "Tue", "Wed"]; //Used for generating button list. list week = ["Thursday", "Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday"]; list buttonList; //Channels integer CHANNEL; integer HANDLE; //Initialize script variables constructor() { days = []; dates = []; titles = []; place = []; details = []; calendars = llGetListLength(urls); thisCalendar = 0; llSetTimerEvent(3600); makeButtonList(); //llHTTPRequest(url, [], ""); requestData(); llOwnerSay("Events List Refreshed"); llOwnerSay(""); llListenControl(HANDLE, FALSE); } requestData() { if(thisCalendar < calendars) { llHTTPRequest(llList2String(urls,thisCalendar), [], ""); thisCalendar += 1; } } // Generate dialog button list makeButtonList() { buttonList = []; list tempList = []; integer day = getDay(gmtOffset); integer i; for (i=0; i<7; i++) { tempList += llList2String(week,day); day++; if (day > 6) { day = 0; } } buttonList = [llList2String(tempList,6),"Today", "Refresh", llList2String(tempList,3), llList2String(tempList,4), llList2String(tempList,5), llList2String(tempList,0), llList2String(tempList,1), llList2String(tempList,2)]; } //Creates dialog channel based on the object UUID. Reduces the chance of cross messaging. integer hex2int(string hex) { if(llGetSubString(hex,0,1) == "0x") return (integer)hex; if(llGetSubString(hex,0,0) == "x") return (integer)("0"+hex); return(integer)("0x"+hex); } //Parse incoming data from the php file into seperate lists. parceString(string body) { list tempList = llParseString2List(body, ["||"], []); integer listLength = llGetListLength(tempList); integer i; for (i = 0; i < listLength; i++) { list data = llParseString2List(llList2String(tempList, i), [":"], []); string flag = llStringTrim(llList2String(data,0), STRING_TRIM); string val = llStringTrim(llList2String(data,1), STRING_TRIM); if (flag == "Date") { string day = llList2String(llParseString2List(val, [" "], []), 0); integer dayNum = llListFindList(weekdays, [day]); days += dayNum; dates+=val; } else if (flag == "Title") { titles+=val; } else if (flag == "Event Description") { //Google uses a colon for its data tags. //Unfortionatly this means that if you used a colon in your description such as a URL, it would be cut off prematurly. //I put a check here so at least two URLs or SLURLS such as secondlife://lambda/175/30/26 could be included. if (llStringTrim(llList2String(data,3), STRING_TRIM) != "") { place += (val + ":" + llStringTrim(llList2String(data,2), STRING_TRIM)+ ":" + llStringTrim(llList2String(data,3), STRING_TRIM)); } else if (llStringTrim(llList2String(data,2), STRING_TRIM) != "") { place += (val + ":" + llStringTrim(llList2String(data,2), STRING_TRIM)); } else { place+=val; } } else if (flag == "Where" || flag == "Event Status") { details+=val; } } } //Display day event. displayEvent(integer day) { llListenControl(HANDLE, FALSE); integer i; if(llListFindList(days, [day]) != -1) { for (i=0; i<llGetListLength(days); i++) { if (llList2Integer(days,i) == day) { llOwnerSay("Event Date: " + llList2String(dates, i)); llOwnerSay("Event Name: " + llList2String(titles, i)); llOwnerSay(llList2String(place, i)); llOwnerSay(llList2String(details, i)); llOwnerSay(""); } } } else { llOwnerSay("No events found for the day selected."); llOwnerSay(""); } } //Get what day it is today based on ineger value integer getDay(integer offset) { integer hours = llGetUnixTime()/3600; integer days = (hours + offset)/24; integer day_of_week = days%7; return day_of_week; } default { state_entry() { CHANNEL = hex2int(llGetKey()); HANDLE = llListen(CHANNEL, "", "", ""); llListenControl(HANDLE, FALSE); constructor(); } touch_start(integer start) { llListenControl(HANDLE, TRUE); llDialog(llDetectedKey(0), "Google Access Event Calendar \n \n" + llList2String(week,getDay(0)) + " "+ llGetDate(), buttonList, CHANNEL); } http_response(key request_id, integer status, list metadata, string body) { parceString(body); requestData(); } listen(integer channel, string name, key id, string message) { //0 => "Thu", 1 =>"Fri", 2=>"Sat", 3=>"Sun", 4=>"Mon", 5=>"Tue", 6=>"Wed"]; if(message == "Today") { displayEvent(getDay(gmtOffset)); } else if(message == "Sunday") { displayEvent(3); } else if(message == "Monday") { displayEvent(4); } else if(message == "Tuesday") { displayEvent(5); } else if(message == "Wednesday") { displayEvent(6); } else if(message == "Thursday") { displayEvent(0); } else if(message == "Friday") { displayEvent(1); } else if(message == "Saturday") { displayEvent(2); } else if(message == "Refresh") { constructor(); } } timer() { llSetTimerEvent(3600); constructor(); } }
Start of the gaenot_1.0.php script.
<?php /* //gaenot_1.0.php ///////////////////////////////////////////////////////////////////// // GA Event Notifier 1.0 by Jason Dahlen (aka Victor Hua) // SpotOn3D // https://spoton3d.com/ // (c) 2010 - Jason Dahlen // // Distributed as GPL, donated to wiki.secondlife.com on 13 July 2010 // // SCRIPT: GA Event Notifier.lsl 1.0 :: Use on your web server // gaenot_1.0.php :: Use inworld // // FUNCTION: // Gather seven days event data from a Google calendar and display it through a simple interface. //The lsl script can access several calendars at once through seperate php files. One file per calendar. // // USAGE: // 1. Place gaenot_1.0.php in your web directory. Anywhere you can view the php file in a web browser. // You will need a seperate gaenot_1.0.php file for each calendar you want to display. You can rename the files. // 2. At the top of your gaenot_1.0.php file you will find two variables. // $email Enter your gmail address // $Calendar_xml_URL A URL that points to your Live Bookmarks feed for Google Calendars. // You can find this under My Calendar in the settings toward the bottom. // Choose the 'xml' button selection from the following: // -Calendar Address - This address works if you have a publically viewable calendar // (ie viewable publically in a web browser) // -Private Address - Use this address if you want to display information from an // otherwise private calendar. This calendar would then only be viewable by // yourself and those using the in world lsl tool. // 3. Drop the GA Event Notifier.lsl in your object. // 4. Add the locations of the php files in the url list. You can have one or several. // 5. Set the gmtOffset to your time or the time of the calendar you are accessing. // ///////////////////////////////////////////////////////////////////// */ $email = 'myname@gmail.com'; $Calendar_xml_URL = "http://www.google.com/calendar/feeds/myfeed"; //######################################### Edit below this line at your own risk ########################## /*Debug ini_set('display_errors',1); error_reporting(E_ALL|E_STRICT); */ $userid = $email; $magicCookie = 'cookie'; date_default_timezone_set('America/Chicago'); // build feed URL $feedURL = $Calendar_xml_URL; //Return string date as a timestamp. function _dateConv($str) { $dateStr = substr_replace($str[3], , -1, 1).' '.$str[2]; if (isset($str['4'])) { $dateStr = $dateStr.' '.$str[4]; } if (isset($str['5'])) { $dateStr = $dateStr.' '.$str[5]; } if (isset($str[7])) { $dateStr = $dateStr.' '.substr($str[7], -3, 3); } return $dateStr; } //Print Array function printArrayElements($array) { foreach($array as $key => $value) { echo "$value"."||"; } } // read feed into SimpleXML object $sxml = simplexml_load_file($feedURL); // get number of events $total = count($sxml); //Populate data arrays foreach ($sxml->entry as $entry) { $content = stripslashes($entry->content); $data = explode('
', $content); $dateArr = explode(" ",$data[0]); $dateString = _dateConv($dateArr); $date = strtotime(_dateConv($dateArr)); $pastDue = strtotime("12:00 am -11 hours"); $endDate = strtotime("+6 day"); if ($date > $pastDue && $date < $endDate) { $t = "test string"; $timeList[] = 'Date: '.$dateArr[1].' '.trim($dateString); $titleList[] = 'Title: '.trim(stripslashes($entry->title)); $placeList[] = trim($data[2]); if (isset($data[4])) { $descList[] = trim($data[4]); } else { $descList[] = "Event Description:"; } } } //print arrays printArrayElements($timeList); printArrayElements($titleList); printArrayElements($placeList); printArrayElements($descList); ?>