Script.lsl 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. // :CATEGORY:Database
  2. // :NAME:SlPhant
  3. // :AUTHOR:SLPhant
  4. // :KEYWORDS:
  5. // :CREATED:2014-09-24 14:54:34
  6. // :EDITED:2014-09-24
  7. // :ID:1050
  8. // :NUM:1664
  9. // :REV:1
  10. // :WORLD:Second Life
  11. // :DESCRIPTION:
  12. // A simple external database for SL
  13. // :CODE:
  14. // See https://data.sparkfun.com/
  15. // SLPhant_v1_0.lsl
  16. // *****************************************************************************************
  17. // SLPhant v1.0 Header
  18. // *** Enter Public/Private/Delete Keys below *** //
  19. string sSLPHANT_PUBLIC_KEY = "7JvgN1NbE5H2JwAvlza0";
  20. string sSLPHANT_PRIVATE_KEY = "mzqm6g6GNaS0q6D7RrNy";
  21. // Save your Delete Key here so you never lose it "xxxxxxxxxxxxxxxxxxxx";
  22. // *** Enter your Field Names below (Case Sensitive!) in SAME ORDER as Phant Returns *** //
  23. // *** For Example: list lSLPHANT_FIELDNAMES { Id, Temperature, Pressure, Humidity, WindSpeed };
  24. //list lSLPHANT_FIELDNAMES = [ "avatarname", "id", "regionname" ];
  25. // *** If running your own Phant Server, enter URL below *** //
  26. string sSLPHANT_BASE_URL = "https://data.sparkfun.com/";
  27. // SLPhant Data Formats (must begin w/ a period ".")
  28. string sSLPHANT_FORMAT_CSV = ".csv";
  29. string sSLPHANT_FORMAT_JSON = ".json";
  30. string sSLPHANT_FORMAT_SQL = ".sql";
  31. string sSLPHANT_FORMAT_PSQL = ".psql";
  32. string sSLPHANT_FORMAT_ATOM = ".atom";
  33. // string sSLPHANT_FORMAT_xxxx = "."; // Place holder for future formats
  34. // *****************************************************************************************
  35. key SLPhant_Clear() {
  36. // Clear All Data: http://data.sparkfun.com/input/PUBLIC_KEY/clear?private_key=PRIVATE_KEY
  37. return llHTTPRequest(sSLPHANT_BASE_URL+"input/"+sSLPHANT_PUBLIC_KEY+"/clear?private_key="+sSLPHANT_PRIVATE_KEY, [], "");
  38. }
  39. // *****************************************************************************************
  40. // It is *YOUR* responsibility to have sData in format "Field1=Value1&Field2=Value2..."
  41. // Fields must be the valid names for YOUR stream.
  42. // Values must be put thru llEscapeURL(sURL).
  43. // Name/Value pairs must be separated by "&".
  44. //
  45. // *** For example...
  46. // SLPhant_AddData(
  47. // "avatarname="+llEscapeURL(llKey2Name(llGetOwner()))+
  48. // "&id="+llEscapeURL(llGetOwner())+
  49. // "&regionname="+llEscapeURL(llGetRegionName()));
  50. key SLPhant_AddData(string sData) {
  51. // Add Data: http://data.sparkfun.com/input/PUBLIC_KEY?private_key=PRIVATE_KEY&FIELD1=VALUE1&=FIELD2=VALUE2
  52. return llHTTPRequest(sSLPHANT_BASE_URL+"input/"+sSLPHANT_PUBLIC_KEY+"?private_key="+sSLPHANT_PRIVATE_KEY+"&"+sData, [], "");
  53. }
  54. // *****************************************************************************************
  55. key SLPhant_RequestData(string sFormat) {
  56. // Get Data: http://data.sparkfun.com/output/PUBLIC_KEY.FORMAT?page=PAGE_NUMBER
  57. return llHTTPRequest(sSLPHANT_BASE_URL+"output/"+sSLPHANT_PUBLIC_KEY+sFormat, [], "");
  58. }
  59. // *****************************************************************************************
  60. key SLPhant_RequestStats(string sFormat) {
  61. // Get Stats: http://data.sparkfun.com/output/PUBLIC_KEY/stats.FORMAT
  62. return llHTTPRequest(sSLPHANT_BASE_URL+"output/"+sSLPHANT_PUBLIC_KEY+"/stats"+sFormat, [], "");
  63. }
  64. // *****************************************************************************************
  65. // *****************************************************************************************
  66. // *****************************************************************************************
  67. //
  68. // Copy everything above this line to your own Program.
  69. // Then modify the Key Constants to use your own Stream's Keys.
  70. //
  71. // *****************************************************************************************
  72. // *****************************************************************************************
  73. // *****************************************************************************************
  74. //
  75. // Example Program...
  76. //
  77. integer iTestNumber = 0;
  78. key kSLPhantHttpRequest = NULL_KEY;
  79. default {
  80. // *****************************************************************************************
  81. state_entry() {
  82. iTestNumber = 0;
  83. llOwnerSay("Test "+(string)iTestNumber+": Clearing Data...");
  84. kSLPhantHttpRequest = SLPhant_Clear();
  85. }
  86. // *****************************************************************************************
  87. http_response(key kRequestId, integer iStatus, list lMetadata, string sBody) {
  88. llOwnerSay("http_response("+(string)kRequestId+", "+(string)iStatus+", ["+llList2CSV(lMetadata)+"], "+sBody+")");
  89. if(kRequestId==kSLPhantHttpRequest) {
  90. llSleep(1.0); // Phant sometimes messes up if polled too fast.
  91. if(iTestNumber==0) {
  92. iTestNumber++;
  93. llOwnerSay("Test "+(string)iTestNumber+": Adding Data...");
  94. kSLPhantHttpRequest = SLPhant_AddData("avatarname="+llEscapeURL(llKey2Name(llGetOwner()))+"&id="+llEscapeURL(llGetOwner())+"&regionname="+llEscapeURL(llGetRegionName()));
  95. } else if(iTestNumber==1) {
  96. iTestNumber++;
  97. llOwnerSay("Test "+(string)iTestNumber+": Requesting Data in Default Format...");
  98. kSLPhantHttpRequest = SLPhant_RequestData("");
  99. } else if(iTestNumber==2) {
  100. iTestNumber++;
  101. llOwnerSay("Test "+(string)iTestNumber+": Requesting Data in "+sSLPHANT_FORMAT_CSV+" Format...");
  102. kSLPhantHttpRequest = SLPhant_RequestData(sSLPHANT_FORMAT_CSV);
  103. } else if(iTestNumber==3) {
  104. iTestNumber++;
  105. llOwnerSay("Test "+(string)iTestNumber+": Requesting Data in "+sSLPHANT_FORMAT_JSON+" Format...");
  106. kSLPhantHttpRequest = SLPhant_RequestData(sSLPHANT_FORMAT_JSON);
  107. } else if(iTestNumber==4) {
  108. iTestNumber++;
  109. llOwnerSay("Test "+(string)iTestNumber+": Requesting Data in "+sSLPHANT_FORMAT_SQL+" Format...");
  110. kSLPhantHttpRequest = SLPhant_RequestData(sSLPHANT_FORMAT_SQL);
  111. } else if(iTestNumber==5) {
  112. iTestNumber++;
  113. llOwnerSay("Test "+(string)iTestNumber+": Requesting Data in "+sSLPHANT_FORMAT_PSQL+" Format...");
  114. kSLPhantHttpRequest = SLPhant_RequestData(sSLPHANT_FORMAT_PSQL);
  115. } else if(iTestNumber==6) {
  116. iTestNumber++;
  117. llOwnerSay("Test "+(string)iTestNumber+": Requesting Data in "+sSLPHANT_FORMAT_ATOM+" Format...");
  118. kSLPhantHttpRequest = SLPhant_RequestData(sSLPHANT_FORMAT_ATOM);
  119. } else if(iTestNumber==7) {
  120. iTestNumber++;
  121. llOwnerSay("Test "+(string)iTestNumber+": Requesting Stats in "+sSLPHANT_FORMAT_JSON+" Format...");
  122. kSLPhantHttpRequest = SLPhant_RequestStats(sSLPHANT_FORMAT_JSON);
  123. } else {
  124. llOwnerSay("Done. You can view your data at "+sSLPHANT_BASE_URL+"streams/"+sSLPHANT_PUBLIC_KEY);
  125. }
  126. }
  127. }
  128. // *****************************************************************************************
  129. }
  130. // *****************************************************************************************