Found Cache on BML?

Zeigt gefundene Caches einer Bookmarkliste an. Zuerst bitte einen Token generieren und im Script einfügen. Die Bookmarkliste nur bis max 50 Einträge pro Seite anzeigen lassen.

  1. // ==UserScript==
  2. // @name Found Cache on BML?
  3. // @namespace
  4. // @copyright benebelter
  5. // @description Zeigt gefundene Caches einer Bookmarkliste an. Zuerst bitte einen Token generieren und im Script einfügen. Die Bookmarkliste nur bis max 50 Einträge pro Seite anzeigen lassen.
  6. // @version 1.8
  7. // @include https://www.geocaching.com/bookmarks/view.aspx?guid=*
  8. // @include http://gsak.net/stats/gcoauth/GCoauth_live_callback_browser.php?oauth_verifier=*
  9. // @grant GM_addStyle
  10. // @grant GM_xmlhttpRequest
  11. // @grant GM_getValue
  12. // @grant GM_setValue
  13. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
  14. // ==/UserScript==
  15.  
  16. if(window.location.href.indexOf("http://gsak.net/stats/gcoauth/GCoauth_live_callback_browser.php?oauth_verifier=") > -1) {
  17. var arr = $('a[href^="gsak://%FF/token/"]') ;//gsak://%FF/token/
  18. var decodedUri = encodeURIComponent(arr[0]);
  19. var gsaktoken = decodedUri.substr(29);
  20. GM_setValue('token', decodeURIComponent(gsaktoken) );
  21. alert('Dein Accesstoken wurde gespeichert. Lade nun die Bookmarkliste neu.\n'+decodeURIComponent(gsaktoken) );
  22. }
  23.  
  24.  
  25. var token = GM_getValue('token') ;
  26. $('#save').click(function() {
  27. GM_setValue('token', $( "#token" ).val() );
  28. });
  29. GM_xmlhttpRequest({
  30. method: "GET",
  31. url: "https://api.groundspeak.com/LiveV6/geocaching.svc/GetAPILimits?format=json&accessToken="+token,
  32. dataType: "json",
  33. onload: function(response) {
  34. var status = JSON.parse(response.responseText);
  35. //alert('1: '+status.Status.StatusCode);
  36. if(status.Status.StatusCode != 0){
  37. $('#ctl00_ContentBody_ListInfo_uxAbuseReport').html('<div id=tokeneingeben style="border:2px solid red; padding-left: 10px ;padding-top: 10px;padding-bottom: 10px "><h2>Bitte einen gültigen Accesstoken abrufen:</h2><br><a href="http://gsak.net/stats/gcoauth/GCoauth_live_browser.php" target=_blank><h1>Klick mich</h1></a><br><br>Dieser wird benötigt um die Informationen von Groundspeaks API zu laden.<!--<br><input style="width: 250px;"id=token type=text name=token value="'+GM_getValue('token')+'" Placeholder="Hier den Accesstoken eingeben"> <input id="save" value="Accesstoken speichern" onclick="myFunction()" type=submit >--></div> ');
  38. alert('Accesstoken-Fehler:\n'+status.Status.StatusMessage+ '\n\nBitte gib einen gültigen Accesstoken ein');
  39. }
  40. }
  41. });
  42. //////////////////////////////////////
  43. //GCCodes von BML sammeln
  44. var codes = [];
  45. for (var i = 0; i < document.links.length; ++i)
  46. if (document.links[i].text.substring(0, 2) == "GC") {
  47. codes.push(document.links[i].text );
  48. }
  49. if (codes.length > 50)
  50. alert('Hinweis:\nDas Greasemonkey-Script funktioniert nur mit maximal 50 Caches pro Seite.')
  51. /// VERBINDUNG API ////
  52. GM_xmlhttpRequest({
  53. dataType: "json",
  54. method: "GET",
  55. contentType: "application/json",
  56. async: false,
  57. url: "//gctools.lima-city.de/greasemonkey/bookmarkliste.php?gc="+codes+"&token="+token ,
  58. onload: function(response) {
  59. var codes = JSON.parse(response.responseText);
  60. $.each( codes, function( key, value ) {
  61. if (value.HasbeenFoundbyUser === true){
  62. //eigenes Founddate
  63. var found_d = new Date(parseInt(value.FoundDate.substr(6)));
  64. var found_year = found_d.getFullYear();
  65. var found_monat = found_d.getUTCMonth()+1;
  66. var found_tag = found_d.getUTCDate();
  67. var HasbeenFavoritedbyUser = '';
  68. if (value.HasbeenFavoritedbyUser === true){
  69. var HasbeenFavoritedbyUser = ' <span style="font-size: 1.6em">+</span> <img src="https://www.geocaching.com/images/icons/fave_fill_16.png" alt="Favoritenpunkt vergeben"> ';
  70. }
  71. $("td:contains("+ value.Code + ")").each(function(){
  72. $(this).next('td').andSelf().css('background-color', '#99ff99');
  73. $(this).next('td').next('td').css('background-color', '#99ff99');
  74. $(this).next('td').next('td').html('<center><img src="https://www.geocaching.com/images/icons/16/found.png">'+HasbeenFavoritedbyUser+'<br>'+found_tag+'.'+found_monat+'.'+found_year+'</center>');
  75. });
  76. }
  77. var available = '';
  78. if (value.Available != true){
  79. var available = '<img src="https://www.geocaching.com/images/logtypes/22.png">';
  80. }
  81. var archived = '';
  82. if (value.Archived === true){
  83. var archived = '<img src="https://www.geocaching.com/images/logtypes/5.png"> ';
  84. var available = '';
  85. }
  86. var lf_d = new Date(parseInt(value.DateLastVisited.substr(6)));
  87. var lf_year = lf_d.getFullYear();
  88. var lf_monat = lf_d.getUTCMonth()+1;
  89. var lf_tag = lf_d.getUTCDate();
  90. var diff_icon = '<img src="https://www.geocaching.com/images/stars/stars'+encodeURIComponent(value.Difficulty).replace(".", "_") + '.gif">';
  91. var terr_icon = '<img src="https://www.geocaching.com/images/stars/stars'+encodeURIComponent(value.Terrain).replace(".", "_") + '.gif">';
  92. //alert(diffi);
  93. $("td:contains("+ value.Code + ")").next('td').html('<span class="favorite-rank">'+value.FavoritePoints+'</span> <img src="https://www.geocaching.com/images/wpttypes/sm/'+ value.CacheType.GeocacheTypeId+ '.gif"> <span style="font-weight:bold; font-size: 1.3em;"><a href="http://coord.info/'+value.Code+'" target=_blank>'+value.Name + '</a></span> '+archived+available+'<br><span style="font-size: 1.1em;">D '+diff_icon + ' T '+terr_icon +' | Letzer Fund: ' + lf_tag+ '.' +lf_monat+ '.' +lf_year+ '</span>' );
  94. });
  95. }
  96. });