🏠 返回首頁 

Greasy Fork is available in English.

Qr Code pour Sortie OVS

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


Installer ce script?
// ==UserScript==
// @name          Qr Code pour Sortie OVS
// @name:en       Qr Code from event on OnVaSortir! (French Urbeez)
// @version       0.5.0
// @author        Anthony Orger
// @namespace     http://maj.pc.free.fr/
// @description   Affiche un Qr code d'évènement pour la sortie consultée sur onvasortir.com
// @description:en   Displays a QR Code for the current event on onvasortir.com (French Urbeez)
// @include       *.onvasortir.com*
// @exclude       */vue_sortie_perso.php*
// ==/UserScript==
// @aboutversion  correction bug caractère spécial "&" // bug fix on "&".
// @thanks        Script inspiré par "Display Canonical Urls" de Chris Roos // based on "Display Canonical Urls" by Chris Roos
// @warning Ne fonctionne pas sur certaines pages.
function extractEventDate(dateLink) {
var arrayOfStrings = dateLink.split('&');
var dateDEBUT = '';
var aaaa='';
var mm='';
var jj='';
for (var i=0; i < arrayOfStrings.length; i++){
aaaa += (arrayOfStrings[i].indexOf('y')>-1) ? arrayOfStrings[i].substr(-4):'';
mm += (arrayOfStrings[i].indexOf('m')>-1) ? arrayOfStrings[i].substr(-2):'';
jj += (arrayOfStrings[i].indexOf('d')>-1) ? arrayOfStrings[i].substr(-2):'';
}
dateDEBUT = dateDEBUT.concat(aaaa,mm,jj);
return dateDEBUT;
}
function extractEventTitle() {
var head                  = document.getElementsByTagName('head')[0];
var headElements          = head.getElementsByTagName('title');
var eventTitleElements = [];
var enventTitle = 'Sortie OVS';
for (var i = 0; i < headElements.length; i++) {
var newElement = headElements[i];
eventTitleElements.push(newElement);
}
if (eventTitleElements.length > 0)    enventTitle = eventTitleElements[0].text;
return enventTitle;
}
/*******************************************************/
//Début du script
//script beginning
/*******************************************************/
//console.log("Start script for URL \'"+document.URL+"\'");
var i;
var dateDEBUT = [];
var heureDEBUT = [];
var lieuRDV = [];
var codePostal = [];
var lnk=document.getElementsByTagName('a');
var href;
var urlroot = document.URL.split('.'); // https://ville
var hroot=urlroot[0]+".onvasortir.com/vue_sortie_day.php"; //"https://paris.onvasortir.com/vue_sortie_day.php?Pseudo"
var hrdv ="http://maps.google.fr/maps"; //"?q=adresse-donne-par-mp-ou-sms-en-matinee-metro-valmy"
var hzip =urlroot[0]+".onvasortir.com/vue_sortie_filtre.php"; var fzip = "f_ou2"; //"https://paris.onvasortir.com/vue_sortie_filtre.php?f_ou2=69009"
var harray = [];
for(i=0;i<lnk.length;i++){
href=lnk[i].href;
harray = href.split('?');
//on cherche une date de sortie et pas d'anniversaire ou autre, donc sans "#"
if(href.indexOf('?')>-1 && href.indexOf('#')<0){
harray = href.split('?');
if (harray[0]==hroot){
dateDEBUT.push(extractEventDate(harray[1]));
}
//recherche du lieu : adresse, code postal
if (harray[0]==hrdv){
var adrs = lnk[i].innerHTML.replace('\r','').replace('\n','').replace('<br>',', ');
while(adrs.indexOf('<br>')>-1 || adrs.indexOf('\r')>-1 || adrs.indexOf('\n')>-1 || adrs.indexOf(', ,')>-1)
{
adrs = adrs.replace('\r','').replace('\n','').replace('<br>',', ').replace(', ,',',');
}
if (adrs.endsWith(', ')) adrs = adrs.substr(0,adrs.length-2);
lieuRDV.push(adrs);
}
if (harray[0]==hzip && harray[1].split('=')[0]==fzip){
codePostal.push(lnk[i].innerHTML.replace("<b>",'').replace("</b>",''));
//console.log('codePostal='+codePostal[0]);
}
if (lieuRDV.length>0 && dateDEBUT.length>0 && codePostal.length>0) break;
}
}
// Si la date est introuvable, il est inutile de continuer.
//console.log('dateDEBUT[0]='+dateDEBUT[0]);
if(dateDEBUT[0]){
/**/
var dvs=document.getElementsByTagName('div');
var klass='';
var kName="corpsComplement300";
var karray = [];
var ktext = '';
var k;
var GO = [];
var goarray = [];
var Gref = "profil_read.php?";
for(i=0;i<dvs.length;i++){
klass=dvs[i].className;
if (klass != kName) continue; //si la classe n'est pas "corpsComplement300", on passe à la suivante.
ktext = dvs[i].innerHTML; // on récupère le contenu de la <div/>
//on cherche une heure sur le modème "18:30" ou " 6:30 (pm)"
if(ktext.indexOf(':')>-1 && ktext.indexOf('#')<0 && ktext.indexOf(',')<0 && ktext.indexOf('=')<0){
ktext = ktext.replace('(',':');
ktext = ktext.replace(')',' ');
karray = ktext.split(':');
for (k=0; k<karray.length; k++){
karray[k]= karray[k].trim();
}
if (karray.length>2){
if (karray[2].toLowerCase()=="pm") {
// k = parseInt(karray[0],10);
// k += 12;
karray[0] = parseInt(karray[0],10)+12;
}
}
if (karray[0].length<2){
karray[0] = '0'+karray[0];
}
heureDEBUT.push(karray[0]);
heureDEBUT.push(karray[1]);
continue;
}
//on cherche le Gentil Organisateur (ou la Gentille Organisatrice) dont le pseudo est précédé de Gref
if(ktext.indexOf(Gref)>-1){
var priref=dvs[i].getElementsByTagName('a');
var secref = priref[0].getElementsByTagName('font');
for(var r=0;r<secref.length;r++){
GO.push(secref[r].innerHTML);
}
//recherche du numéro de téléphone
if(ktext.indexOf("Tel :")>-1){
// /!\ 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
// voir exemple : http://lyon.onvasortir.com/eveil-corporel-auto-massage-nuque-4796931.html
GO.push(' - '+"Tel: "+ktext.substring(ktext.indexOf("Tel :")+10));
}
continue;
}
//console.log("heureDEBUT.length="+heureDEBUT.length+";GO.length="+GO.length);
if (heureDEBUT.length>-1 && GO.length>-1) break;
}
/**/
//Construction du QR Code
//Building QR Code
//définition des élements du QR Code
//QR Code elements
//  var TITRE = SUMMARY : On abrège "OnVaSortir!" en "OVS" entre parenthèses
var TITRE = extractEventTitle().replace('- OnVaSortir!','(OVS')+')'; //SUMMARY
//  var DEBUT = DTSTART : "aaaammjjThhmm00B";
var DEBUT = dateDEBUT[0]+"T"+heureDEBUT[0]+heureDEBUT[1]+"00B"; // TIMEZONE: "00Z" for UTC; "00B" for GMT+2 (Paris, Brussels)
//  var FIN   = DTEND : "aaaaMMjjThhmm00B";
var FIN   = dateDEBUT[0]+"T"+"23"+"59"+"00B";
//  var LIEU  = "LOCATION: Adresse - District";
var LIEU  = '';
if (lieuRDV.length>-1)  LIEU += lieuRDV[0];
if (codePostal.length>-1 && lieuRDV[0] && lieuRDV[0].toUpperCase().includes(codePostal[0].toUpperCase())!==true ){
LIEU += ' - '+codePostal[0];
}
else if (codePostal.length>-1) LIEU += ' - '+codePostal[0];
if (LIEU === '')  LIEU += "Région de "+TITRE.substring(TITRE.indexOf('/ OVS')+5);
//console.log("lieu= "+LIEU);
//  var R###ME= "DESCRIPTION";
var R###ME = "Sortie OVS organisée par ";
for(var o=0;o<GO.length;o++)
{
R###ME += GO[o];
}
// Ajout du lien vers la page de la sortie : "lienOVS"
var lienOVS = document.location.href;
if (lienOVS.indexOf('#')>-1) lienOVS = lienOVS.substring(0,lienOVS.indexOf('#')) ;
R###ME += ' - '+lienOVS;
// Préparation du QR Code
var s = 205; // dimensions du QR Code
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(R###ME)+"%0D%0A"+"END:VEVENT" ;
evnmt = evnmt.replace('&','et'); //Bug caractère spécial
//console.log(evnmt);
//Appel de l'API Google
//Request to Google API
var qrcode = "https://chart.apis.google.com/chart?cht=qr&chs="+s+"x"+s+"&chl="+evnmt;
//console.log(qrcode);
//Construction de l'élément à afficher
//Building display element
var canonicalUrlContainer            = document.createElement('div');
canonicalUrlContainer.style.position = 'fixed';
canonicalUrlContainer.style.left     = '5px';
canonicalUrlContainer.style.top      = '5px';
canonicalUrlContainer.style.zIndex   = '999';
canonicalUrlContainer.style.padding  = '2px';
canonicalUrlContainer.style.font     = '9px arial';
canonicalUrlContainer.style.border   = '1px solid';
canonicalUrlContainer.style.backgroundColor = 'yellow';
canonicalUrlContainer.style.borderColor     = 'red';
canonicalUrlContainer.style.color           = 'blue';
var anchor = document.createElement('img');
anchor.src = qrcode;
anchor.style.color = 'blue';
anchor.appendChild(document.createTextNode(TITRE));
canonicalUrlContainer.appendChild(anchor);
document.body.appendChild(canonicalUrlContainer);
}