Qr Code pour Sortie OVS

Affiche un Qr code d'évènement pour la sortie consultée sur onvasortir.com

当前为 2016-08-16 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Qr Code pour Sortie OVS
  3. // @name:en Qr Code from event on OnVaSortir! (French Urbeez)
  4. // @version 0.4.8
  5. // @author Anthony Orger
  6. // @namespace http://maj.pc.free.fr/
  7. // @description Affiche un Qr code d'évènement pour la sortie consultée sur onvasortir.com
  8. // @description:en Displays a QR Code for the current event on onvasortir.com (French Urbeez)
  9. // @include *.onvasortir.com*
  10. // @exclude */vue_sortie_perso.php*
  11. // ==/UserScript==
  12.  
  13. // @aboutversion correction bug caractère spécial "&" // bug fix on "&".
  14. // @thanks Script inspiré par "Display Canonical Urls" de Chris Roos // based on "Display Canonical Urls" by Chris Roos
  15.  
  16. // @warning Ne fonctionne pas sur certaines pages comme : http://lyon.onvasortir.com/eveil-corporel-auto-massage-nuque-4796931.html
  17.  
  18. function extractEventDate(dateLink) {
  19. var arrayOfStrings = dateLink.split('&');
  20. var dateDEBUT = '';
  21. var aaaa='';
  22. var mm='';
  23. var jj='';
  24. for (var i=0; i < arrayOfStrings.length; i++){
  25. aaaa += (arrayOfStrings[i].indexOf('y')>-1) ? arrayOfStrings[i].substr(-4):'';
  26. mm += (arrayOfStrings[i].indexOf('m')>-1) ? arrayOfStrings[i].substr(-2):'';
  27. jj += (arrayOfStrings[i].indexOf('d')>-1) ? arrayOfStrings[i].substr(-2):'';
  28. }
  29. dateDEBUT = dateDEBUT.concat(aaaa,mm,jj);
  30. return dateDEBUT;
  31. }
  32.  
  33. function extractEventTitle() {
  34. var head = document.getElementsByTagName('head')[0];
  35. var headElements = head.getElementsByTagName('title');
  36. var eventTitleElements = [];
  37. var enventTitle = 'Sortie OVS';
  38.  
  39. for (var i = 0; i < headElements.length; i++) {
  40. var newElement = headElements[i];
  41. eventTitleElements.push(newElement);
  42. }
  43. if (eventTitleElements.length > 0) enventTitle = eventTitleElements[0].text;
  44.  
  45. return enventTitle;
  46. }
  47.  
  48. /*******************************************************/
  49. //Début du script
  50. //script beginning
  51. /*******************************************************/
  52. //console.log("Start script");
  53.  
  54. var i;
  55. var dateDEBUT = [];
  56. var heureDEBUT = [];
  57. var lieuRDV = [];
  58. var codePostal = [];
  59.  
  60. var lnk=document.getElementsByTagName('a');
  61. var href;
  62. var hroot="http://lyon.onvasortir.com/vue_sortie_day.php";
  63. var hrdv ="http://maps.google.fr/maps"; //?q=adresse-donne-par-mp-ou-sms-en-matinee-metro-valmy
  64. var hzip ="http://lyon.onvasortir.com/vue_sortie_filtre.php"; var fzip = "f_ou2"; //69009
  65. var harray = [];
  66.  
  67. for(i=0;i<lnk.length;i++){
  68. href=lnk[i].href;
  69. harray = href.split('?');
  70. //on cherche une date de sortie et pas d'anniversaire ou autre, donc sans "#"
  71. if(href.indexOf('?')>-1 && href.indexOf('#')<0){
  72. harray = href.split('?');
  73. if (harray[0]==hroot){
  74. dateDEBUT.push(extractEventDate(harray[1]));
  75. }
  76. //recherche du lieu : adresse, code postal
  77. if (harray[0]==hrdv){
  78. var adrs = lnk[i].innerHTML.replace('\r','').replace('\n','').replace('<br>',', ');
  79. while(adrs.indexOf('<br>')>-1 || adrs.indexOf('\r')>-1 || adrs.indexOf('\n')>-1 || adrs.indexOf(', ,')>-1)
  80. {
  81. adrs = adrs.replace('\r','').replace('\n','').replace('<br>',', ').replace(', ,',',');
  82. }
  83. if (adrs.endsWith(', ')) adrs = adrs.substr(0,adrs.length-2);
  84. lieuRDV.push(adrs);
  85. }
  86. if (harray[0]==hzip && harray[1].split('=')[0]==fzip){
  87. codePostal.push(lnk[i].innerHTML.replace("<b>",'').replace("</b>",''));
  88. //console.log('codePostal='+codePostal[0]);
  89. }
  90. if (lieuRDV.length>0 && dateDEBUT.length>0 && codePostal.length>0) break;
  91. }
  92. }
  93.  
  94. // Si la date est introuvable, il est inutile de continuer.
  95. if(dateDEBUT[0]){
  96. /**/
  97. var dvs=document.getElementsByTagName('div');
  98. var klass='';
  99. var kName="corpsComplement300";
  100. var karray = [];
  101. var ktext = '';
  102. var k;
  103. var GO = [];
  104. var goarray = [];
  105. var Gref = "profil_read.php?";
  106.  
  107. for(i=0;i<dvs.length;i++){
  108. klass=dvs[i].className;
  109. if (klass != kName) continue; //si la classe n'est pas "corpsComplement300", on passe à la suivante.
  110. ktext = dvs[i].innerHTML; // on récupère le contenu de la <div/>
  111.  
  112. //on cherche une heure sur le modème "18:30" ou " 6:30 (pm)"
  113. if(ktext.indexOf(':')>-1 && ktext.indexOf('#')<0 && ktext.indexOf(',')<0 && ktext.indexOf('=')<0){
  114. ktext = ktext.replace('(',':');
  115. ktext = ktext.replace(')',' ');
  116. karray = ktext.split(':');
  117. for (var k=0; k<karray.length; k++){
  118. karray[k]= karray[k].trim();
  119. }
  120. if (karray.length>2){
  121. if (karray[2].toLowerCase()=="pm") {
  122. // k = parseInt(karray[0],10);
  123. // k += 12;
  124. karray[0] = parseInt(karray[0],10)+12;
  125. }
  126. }
  127. if (karray[0].length<2){
  128. karray[0] = '0'+karray[0];
  129. }
  130. heureDEBUT.push(karray[0]);
  131. heureDEBUT.push(karray[1]);
  132. continue;
  133. }
  134.  
  135. //on cherche le Gentil Organisateur (ou la Gentille Organisatrice) dont le pseudo est précédé de Gref
  136. if(ktext.indexOf(Gref)>-1){
  137. var priref=dvs[i].getElementsByTagName('a');
  138. var secref = priref[0].getElementsByTagName('font');
  139. for(var r=0;r<secref.length;r++){
  140. GO.push(secref[r].innerHTML);
  141. }
  142. //recherche du numéro de téléphone
  143. if(ktext.indexOf("Tel :")>-1){
  144. // /!\ bug 0.4.7 : champ libre, il faut un masque pour tester la présence d'un n° valide et déterminer la longeur de chaine
  145. // voir exemple : http://lyon.onvasortir.com/eveil-corporel-auto-massage-nuque-4796931.html
  146. GO.push(' - '+"Tel: "+ktext.substring(ktext.indexOf("Tel :")+10));
  147. }
  148. continue;
  149. }
  150. if (heureDEBUT.length>-1 && GO.length>-1) break;
  151. }
  152. /**/
  153.  
  154. //Construction du QR Code
  155. //Building QR Code
  156. //définition des élements du QR Code
  157. //QR Code elements
  158. // var TITRE = SUMMARY : On abrège "OnVaSortir!" en "OVS" entre parenthèses
  159. var TITRE = extractEventTitle().replace('- OnVaSortir!','(OVS')+')'; //SUMMARY
  160.  
  161. // var DEBUT = DTSTART : "aaaammjjThhmm00B";
  162. var DEBUT = dateDEBUT[0]+"T"+heureDEBUT[0]+heureDEBUT[1]+"00B"; // TIMEZONE: "00Z" for UTC; "00B" for GMT+2 (Paris, Brussels)
  163.  
  164. // var FIN = DTEND : "aaaaMMjjThhmm00B";
  165. var FIN = dateDEBUT[0]+"T"+"23"+"59"+"00B";
  166.  
  167. // var LIEU = "LOCATION: Adresse - District";
  168. var LIEU = '';
  169. if (lieuRDV.length>-1) LIEU += lieuRDV[0];
  170. if (codePostal.length>-1 && lieuRDV[0].toUpperCase().includes(codePostal[0].toUpperCase())!==true ) LIEU += ' - '+codePostal[0];
  171. if (LIEU === '') LIEU += "Région de "+TITRE.substring(TITRE.indexOf('/ OVS')+5);
  172.  
  173. // var RESUME= "DESCRIPTION";
  174. var RESUME = "Sortie OVS organisée par ";
  175. for(var o=0;o<GO.length;o++)
  176. {
  177. RESUME += GO[o];
  178. }
  179. // Ajout du lien vers la page de la sortie : "lienOVS"
  180. var lienOVS = document.location.href;
  181. if (lienOVS.indexOf('#')>-1) lienOVS = lienOVS.substring(0,lienOVS.indexOf('#')) ;
  182. RESUME += ' - '+lienOVS;
  183.  
  184. // Préparation du QR Code
  185. var s = 205; // dimensions du QR Code
  186. var evnmt = "BEGIN:VEVENT"+"%0D%0A"+"SUMMARY:"+encodeURI(TITRE)+"%0D%0A"+"DTSTART:"+DEBUT+"%0D%0A"+"DTEND:"+FIN+"%0D%0A"+"LOCATION:"+encodeURI(LIEU)+"%0D%0A"+"DESCRIPTION:"+encodeURI(RESUME)+"%0D%0A"+"END:VEVENT" ;
  187. evnmt = evnmt.replace('&','et'); //Bug caractère spécial
  188. //console.log(evnmt);
  189.  
  190. //Appel de l'API Google
  191. //Request to Google API
  192. var qrcode = "http://chart.apis.google.com/chart?cht=qr&chs="+s+"x"+s+"&chl="+evnmt;
  193.  
  194. //Construction de l'élément à afficher
  195. //Building display element
  196. var canonicalUrlContainer = document.createElement('div');
  197. canonicalUrlContainer.style.position = 'fixed';
  198. canonicalUrlContainer.style.left = '5px';
  199. canonicalUrlContainer.style.top = '5px';
  200. canonicalUrlContainer.style.zIndex = '999';
  201. canonicalUrlContainer.style.padding = '2px';
  202. canonicalUrlContainer.style.font = '9px arial';
  203. canonicalUrlContainer.style.border = '1px solid';
  204.  
  205. canonicalUrlContainer.style.backgroundColor = 'yellow';
  206. canonicalUrlContainer.style.borderColor = 'red';
  207. canonicalUrlContainer.style.color = 'blue';
  208. var anchor = document.createElement('img');
  209. anchor.src = qrcode;
  210. anchor.style.color = 'blue';
  211. anchor.appendChild(document.createTextNode(TITRE));
  212. canonicalUrlContainer.appendChild(anchor);
  213.  
  214. document.body.appendChild(canonicalUrlContainer);
  215. }