Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
Le blog du CRRIAM

Enregistrer et lire des cookies avec rivescript

15 Octobre 2015 , Rédigé par crriam Publié dans #Enregistrement des variables et auto apprentissage

Bon, je vous préviens la méthode que je vais vous exposer n'est pas conventionnel. J'ai demandé à kirsle (Noa Peterbridge) le concepteur du rivescripte comment on pourrait mémoriser des cookies etc, mais sa réponse ne m'a pas satisfait, elle ne fonctionne pas sur la version de rivscripte que j'utilise qui est plus ancienne car la nouvelle version ne marche pas en local aa cause de nod js. Donc, moi ça ne m'interesse pas puisque le but était de pouvoir s'affranchir d'une connection internet. Et déja que si on veut utiliser l'enregistrement des variable, il faut monter un serveur php , je voulais pas avoir en plus a installer nod js !

Bon, bref,

1ere observation,

enregistrer des cookies, les lire, pas de probléme particulier, il suffit de faire ça :

// lecture d'une variable dans un cookie

// fonction lecture tout les cookies > object liretoutcookie javascript var id = args[0]; var nom1 = rs.getUservar(id, "nom1"); var nameeq = nom1 + "="; var ca = document.cookie.split(';'); //alert(ca); juste pour le debug

return ca; var dim = ""; return dim; < object // fin fonction lecture tout les cookie

// code rs lecture tout les cookies

+ test80 - je lis tout les cookies liretoutcookie // fin code rs lecture tout les cookies

// fonction lecture un seul cookie > object lirecookie javascript var id = args[0]; var nom1 = rs.getUservar(id, "nom1"); var nameeq = nom1 + "="; var ca = document.cookie.split(';'); // alert(nom1); juste pour le debug for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameeq) == 0) return c.substring(nameeq.length,c.length); } return null; var dim = ""; return dim; < object // fin fonction lecture un seul cookie

// code rs lecture 1 seul cookie

+ recup * - > lirecookie

// fin code rs lecture 1 seul cookies

// ----- ca marche pour les ecrires, attention ne pas mettre comme valeur oui ou non, sinon ca bug a cause du pattern oui non // et bien penser a mettre la durée en jour du cookie // je n'ai pas mis cookie ou lecture cookie ou memo cookie car cookie bug avec d autres truc

// fonction ecrire cookie > object ecrirecookie javascript

var id = args[0]; var name = rs.getUservar(id, "nom1"); // alert(name); juste pour le debug var value = rs.getUservar(id, "value"); var days = rs.getUservar(id, "days"); if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; var dim = ""; return dim; < object

// fin fonction ecriture cookie

// code rs ecriture cookie

+ memo * * - > > ecrirecookie

// commentaire : j ai mis 100 ans de duree de vie du cookie

// debut fonction effacer cookie

+ efface varsurpc * - > ecrirecookie // pour effacer un cookie, il suffit de mettre une valeur de nombre de jours (day ) à -1 j'aai mis null a la valeur, car on s'en fou // pour effaacer le cookie "login", il suffit donc de tapper dans le tchat ou de renvoyer dessus // efface varsurpc login // si on veut aussi effacer la variable il suffit d'ajouter la commande

// fin fonction effacer cookie

// fin code rs ecriture cookies

/* pour enregistrer ou lire une variable dans un cookie, il faudra donc faire comme ca : exemple :

+ salut - salut, tu es un garcon ou une fille ?

+ je suis une fille - ha ok une fille tres bien {@memo genre fille}

et pour la lire

+ je suis une fille ou un garcon ? - tu es {@recup genre}

*/

ça parait tout con, mais je m'y suis bien casser la tête dessus.

Le probléme qui se posait ensuite, c'est que même si le bot arriver a récuperer les cookies, impossible de les mémoriser directement dans une variable !!!

Pourquoi ?

Parce que l'insctruction est utiliser en dernier ! donc

+ recup * - > = lirecookie >

ne peut pas fonctionner !

Solution d'enregistrement dans un <set>

C'est là que j'ai eu l'idée de contourner le probléme en utlisant la fonction celle qui permet au robot de redire ce qu'il a dit. Le but va donc être de créer dans une nouvelle fram de la page web, un 2eme robot qui ne servira qu'a renvoyer une instruction dans notre 1ere fenêtre de tchat.

pour ça, j'ai donc créer une nouvelle fram, et j'y ai fais charger un nouveau fichier chat rivescripte que j'ai appeler chat02.html dans ce rivescript, je ne fais charger que le fichier renvois.rs, j'ai enlever aussi tout les codes javascript qui font parler etc. bref le rivescript presque comme d'origine, presque parceque j'ai garder la fonction de remplacement des lettres accentuées ou cédillées françaises.

ça me donne donc une double fenêtre, partager horizontalement, en haut la tchat normal, en bas le tchat de renvois. (voir image)

Et le code rs dans la tchat normal est le suivant :

// fonction renvois sur la fenetre du bas // le retour est assuré uniquement par le fichier renvois.rs qui n'est charger que dans la fenetre chat02.html du droitebas

> object renvois1 javascript

var id = args[0]; var renv1 = rs.getUservar(id, "renvois1"); // alert(renv1); juste pour le debug

setTimeout(function(){parent.droitebas.document.form1.message.value=renv1;if(parent.droitebas.document.form1.onsubmit()) {parent.droitebas.document.form1.submit();}},20); var dim = ""; return dim; < object

// fin fonction renvois

// lecture d'une variable dans un cookie

// fonction lecture tout les cookies > object liretoutcookie javascript var id = args[0]; var nom1 = rs.getUservar(id, "nom1"); var nameeq = nom1 + "="; var ca = document.cookie.split(';'); //alert(ca); juste pour le debug

return ca; var dim = ""; return dim; < object // fin fonction lecture tout les cookie

// code rs lecture tout les cookies

+ test80 - je lis tout les cookies liretoutcookie // fin code rs lecture tout les cookies

// fonction lecture un seul cookie > object lirecookie javascript var id = args[0]; var nom1 = rs.getUservar(id, "nom1"); var nameeq = nom1 + "="; var ca = document.cookie.split(';'); // alert(nom1); juste pour le debug for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameeq) == 0) return c.substring(nameeq.length,c.length); } return null; var dim = ""; return dim; < object // fin fonction lecture un seul cookie

// code rs lecture 1 seul cookie

+ recup * - {@renvois1 tent1 } > lirecookie

// {@renvois1 tent1 } sert a envoyer tente1 et recuperer le nom de la variable qu'on veut recuperer sur le chat02 par exempel "genre" // puis > lirecookie lit le cookie corespondant

+ renvois1 * - > renvois1 // ca ecrit tente1 et en star la variable sur chat02 pour declencher la commande "tente1 *" du fichier renvois.rs

+ reply1 * - => et voila j ai enregistrer le cookie // sert a faire reecrire le cookie pour pouvoir le memoriser dans la variable revenu par chat02

// fin code rs lecture 1 seul cookies

// ----- ca marche pour les ecrires, attention ne pas mettre comme valeur oui ou non, sinon ca bug a cause du pattern oui non // et bien penser a mettre la durée en jour du cookie // je n'ai pas mis cookie ou lecture cookie ou memo cookie car ca bug avec d autres truc

// fonction ecrire cookie > object ecrirecookie javascript

var id = args[0]; var name = rs.getUservar(id, "nom1"); // alert(name); juste pour le debug var value = rs.getUservar(id, "value"); var days = rs.getUservar(id, "days"); if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; var dim = ""; return dim; < object

// fin fonction ecriture cookie

// code rs ecriture cookie

+ memo * * - > > ecrirecookie

// commentaire : j ai mis 100 ans de duree de vie du cookie

// debut fonction effacer cookie

+ efface varsurpc * - > ecrirecookie // pour effacer un cookie, il suffit de mettre une valeur de nombre de jours (day ) à -1 j'aai mis null a la valeur, car on s'en fou // pour effaacer le cookie "login", il suffit donc de tapper dans le tchat ou de renvoyer dessus // efface varsurpc login // si on veut aussi effacer la variable il suffit d'ajouter la commande

// fin fonction effacer cookie

// fin code rs ecriture cookies

/* pour enregistrer ou lire une variable dans un cookie, il faudra donc faire comme ca : exemple :

+ salut - salut, tu es un garcon ou une fille ?

+ je suis une fille - ha ok une fille tres bien {@memo genre fille}

et pour la lire

+ je suis une fille ou un garcon ? - tu es {@recup genre}

*/

On remaque que le code de recupération des cookies a changé

Code pour le fichier renvois.rs de la 2eme fenêtre tchat :

> object renvois javascript

var id = args[0]; var renv = rs.getUservar(id, "renvois"); // alert(renv); juste pour le debug

setTimeout(function(){parent.droite.document.form1.message.value=renv;if(parent.droite.document.form1.onsubmit()) {parent.droite.document.form1.submit();}},20); var dim = ""; return dim; < object

// tent1 * recois de chat.html la variable a remplire par le cookie + tent1 * @renvois reply1 // @renvois reply1 reporte sur la commande renvois * en inscivant renvois reply1 + le nom de la variable arrivee de chat

+ renvois * - > renvois // ecrit dans la fenetre du chat principal la commande repl1 + le nom de la variable arrivee de chat

Comment ça marche ?

On va prendre l'exemple pour récupérer le cookie genre.

voici une petite photo explicative

Voila, ça fonctionne trés bien. aprés, faudra peut etre fignoler encore un peu tout ça pour que ça fasse beau dans le tchat principal, car là ça écris les renvois. On peut peut etre faire terminer par la phrase déja dite par l'utilisateur en la faisant renvoyer par tchat2.

a voir.

Nouveauté

 

Jusqu'a présent pour enregistrer un cookie, il fallait mettre un syteme lourd de double chat.html d'envois et reception de cocde etc.

Grace au syteme d'autovalidation que j'ai découvert en octobre 2016, cela facillite grandement la tache.

 

Voici le code complet et comment faire :

//----------------------------cookies------debut----------------------------

 

// lecture d'une variable dans un cookie

// fonction lecture tout les cookies
> object liretoutcookie javascript
var id = args[0];
var nom1 = rs.getUservar(id, "nom1"); var nameeq = nom1 + "=";
var ca = document.cookie.split(';');
//alert(ca); juste pour le debug

return ca;
var dim = "";
return dim;
< object
// fin fonction lecture tout les cookie

 

// code rs lecture tout les cookies

+ test80
- je lis tout les cookies <call> liretoutcookie <id></call>

 

// fin code rs lecture tout les cookies

 


// fonction lecture un seul cookie

> object lirecookie javascript
var id = args[0];
var nom1 = rs.getUservar(id, "nom1");
var nameeq = nom1 + "=";
var ca = document.cookie.split(';');
// alert(nom1); juste pour le debug
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameeq) == 0) return c.substring(nameeq.length,c.length);
}
return null;
var dim = "";
return dim;
< object


// fin fonction lecture un seul cookie


// code rs lecture 1 seul cookie

+ recup *
- {@autovalid recup1 <star>} {@autovalid ok}  {@autovalid transparent}

+ recup1 *
- <set nom1=<star>> <get nom1> <call> lirecookie <id></call> {topic=recup}

> topic recup

+ *
@cooki qsd<reply>qsd
// qsd sert a delimiter le cookie pour eviter les caractere blanc invisible qui s inscrive automatiquement avant et apres le cookie

+ cooki * * * *
- <set <star2>=<star3>> \s {topic=random}
// j ai donc mis dans la variable <star2> <get nom>
// la 1er et 4 eme * serve a isoler les qsd et laisser le cookie propore
// on sort du topic avec random

< topic

 

// ----- ca marche pour les ecrires, attention ne pas mettre comme valeur oui ou non, sinon ca bug a cause du pattern oui non
// et bien penser a mettre la duree en jour du cookie
// je n'ai pas mis cookie ou lecture cookie ou memor cookie car cookie bug avec le ok du oui general
// j ai mis memor au lieu car memo est utiliser pour la date

// fonction ecrire cookie


> object ecrirecookie javascript

var id = args[0];
var name = rs.getUservar(id, "nom1");
// alert(name); juste pour le debug
var value = rs.getUservar(id, "value");
var days = rs.getUservar(id, "days");
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
var dim = "";
return dim;
< object

// fin fonction ecriture cookie

// code rs ecriture cookie

+ memor * *
- <set nom1=<star1>> <set value=<star2>> <set days=36500> <call>ecrirecookie <id></call>

// commentaire : j ai mis 100 ans de duree de vie du cookie


// debut fonction effacer cookie

+ efface varsurpc *
- <set nom1=<star1>> <set value=null> <set days=-1> <call>ecrirecookie <id></call>


// pour effacer un cookie, il suffit de mettre une valeur de nombre de jours (day ) a -1 j'ai mis null a la valeur, car on s'en fou
// pour effaacer le cookie "login", il suffit donc de tapper dans le tchat ou de renvoyer dessus
// efface varsurpc login
// si on veut aussi effacer la variable il suffit d'ajouter la commande <set nomvariable=undefined>

// fin fonction effacer cookie

// fin code rs ecriture cookies


/* pour enregistrer ou lire une variable dans un cookie, il faudra donc faire comme ca : exemple :

+ bonjour
- bonjour tu es un garcon ou une fille ?

+ je suis un *
- ha cool, tu es un <star>  {@memor genre <star>}

+ que suis je
-  {@recup genre} {@que suis je2}

+ que suis je2
- tu es un <get genre>

// on ne peut pas mettre directement {@recup genre} <get genre>

*/

//---------------------------- cookies fin -------------------------------------

 

 

Enregistrer et lire des cookies avec rivescript

Partager cet article

Repost 0

Commenter cet article