Tutoriel: Ajout de la Météo dans SARAH
Voici un petit exemple de grammaire/script permettant de demander à S.A.R.A.H. la météo de demain.
Grammaire
Voici une grammaire très simple pour demander la météo:
<grammar version="1.0" xml:lang="fr-FR" mode="voice" root="ruleMeteo" xmlns="http://www.w3.org/2001/06/grammar" tag-format="semantics/1.0"> <rule id="ruleMeteo" scope="public"> <example>Sarah quelle est la météo pour demain ?</example> <tag>out.action=new Object(); </tag> <one-of> <item>Sarah quelle est la météo pour demain</item> <item>Sarah il fait quel temps demain</item> </one-of> <tag>out.action._attributes.uri="http://127.0.0.1:8080/sarah/phantom/meteo";</tag> <tag>out.action.zip="78000";</tag> </rule> </grammar>
- Voici une documentation des balises XML
- L’attribut « uri » est une convention pour accéder aux scripts phantomJS
- L’attribut « zip » est forcé pour le code postal
Script
Voici le script associé à mettre dans /scipt/phantom/meteo.js:
// Inject helper phantom.injectJs("../lib/scraper.js"); // Merge default options var options = {'zip' :'78000'}; scraper.setOptions(options); // Scrap var url = 'http://mobile.meteofrance.com/france/ville/versailles/'+options.zip; scraper.scrap(url, options, function(options, results){ var tr = $('DIV#prevision TABLE.prevSem1 TR:nth-child(4)'); results.tts = tr.find('TD:nth-child(1)').text() + ', '; // Days results.tts += tr.find('TD:nth-child(2) IMG').attr('alt') + ', '; // Sun results.tts += tr.find('TD:nth-child(3)').text(); // Temperature });
En « Français » le code parcours le DOM (visible sous chrome: avec bouton droit > Inspecter)
- Dans la DIV qui a l’identifiant « prevision »
- on récupère la première TABLE ayant la classe « prevSem1 »
- puis on prend le 4ème TR correspondant à demain
- On concatène les 3 TDs, en utilisant l’attribut alt de l’image
Voici une documentation des sélecteurs jQuery
Effectivement une API de web-scraping au dessus de PhantomJS simplifierait grandement le tout (pourtant déjà bien simplifié grâce à ta bonne conception).
As tu regarder pjscrape ?
http://nrabinowitz.github.com/pjscrape/
Ah c’est pas mal, c’est exactement ce que j’avais en tête.
Bonjour,
bon boulot.
J’ai apporté une petite modification.
Dans la grammaire, j’ai ajouté un niveau supplémentaire: « aujourd’hui » et « demain » qui renvoie une option ‘date’ qui contient 1 ou 3.
et j’ai modifié le code .js comme suis:
D’ailleurs vous parsez ‘options.movie’. Un reste du script d’origine ?
Oh oui il était tard hier soir 🙂
C’est super ! Je n’avais pas rajouté les jours aujourd’hui / demain pour ne pas trop complexifier le code du billet.
Je viens de publier la version 1.3
– Amélioration du scraping
– Ajout de la météo (simple)
Le fichier scraper.js se charge du reste. J’ai mis à jour l’article.
Bonjour,
Auriez vous une idée du script php de la grammaire météo ? je suis sous raspberry (raspbian) et j’en aurai besoin pour le yuri.php dans mon dossier serveur.
J’utilise un vieux pc sous win 7 qui envoie les infos sur le rapi.
Voici le site dont j’ai suivi le tuto:
http://blog.idleman.fr/
@Sigisbert Renardet Je crois que Yuri c’est un serveur LAMP qui n’utilise que la partie cliente de SARAH.
La partie serveur de SARAH est en NodeJS et dans le cas du plugin Meteo, on fait un bête Scraping PhantomJS (ça changera dans la 2.8)
La liste + code des modules:
http://dl.dropboxusercontent.com/u/255810/Encausse.net/Sarah/plugins/index.html
Merci de ta réponse,
Peux t’on utiliser yuri et sara en même temps ?
@Sigisbert Renardet oui et non
Après une réco vocale, SARAH balance une requête HTTP indiqué dans son XML. Quel serveur choisir ?
Il y a un chercher/remplacer de 127.0.0.1 par l’adresse du serveur donc ça doit être possible d’avoir des grammaires qui pointent NodeJS et d’autres qui pointent Yuri
Mais je n’ai pas fait le test, il y a peut-être d’autres choses qui bloquent.
Re,
J’ai fait le test cela ne fonctionne pas, j’ai dezipper sarah sur le bureau (et aussi sur c:/), le serveur http se lance mais pas kinect . Je pense que c’est parce que j’ai utiliser yuri avant..
Même avec un redémarrage ça passe pas.
Une idée ?
Je ne connais pas bien Yuri, il faut
1. Installer SARAH sur c:/
2. Lancer WSRMicro (l’icone apparait dans la barre des tâches)
3. Lancer WSRNodeJS
4. Avoir Yuri de lancé sur RPi
Normalement tout doit marcher, sinon regarder les logs sur /bin
5. Tester « SARAH il est quelle heure » => requête à NodeJS et réponse
6. Copier les grammaire de Yuri dans ??? plugins ?
7. Appeler une grammaire de Yuri ???
Je pars du principe que les grammaire de Yuri on l’Ip du RPi dans le XML sinon il faut modifier les grammaires de Yuri pour mettre l’IP de RPi
Salut à tous,
J’ai installé le plugin meteo depuis le store, mais je ne comprend pas comment paramétrer la météo pour ma ville…
J’ai fait quelques modifs dans les différents fichiers ou je trouvais l’information de la ville en la remplaçant par celle voulue, mais rien n’y fait…
Et lorsque je lance une requete, voici le code que jobtiens dans le fichier log:
« [2013:05:26 11:23:27] [ENGINE] RECOGNIZED Speech: 0,7381006/0,9621688 Device: Text: SARAH quelle est la météo demain
[2013:05:26 11:23:27] [CONTEXT] Reset timeout
[2013:05:26 11:23:27] [HTTP] Build HttpRequest: http://127.0.0.1:8080/sarah/meteo?date=3&confidence=0,7381006&directory=C:SARAHmacros
[2013:05:26 11:23:27] [HTTP] Send HttpRequest: http://127.0.0.1:8080/sarah/meteo?date=3&confidence=0,7381006&directory=C:SARAHmacros
[2013:05:26 11:25:07] [HTTP] System.Net.WebException: Le délai d’attente de l’opération a expiré.
à System.Net.HttpWebRequest.GetResponse()
à net.encausse.sarah.WSRHttpManager.SendRequest(String url) »
Normalement,
– Solution simple: tu modifies la ville par défaut depuis le site web > configurer
– Solution avancée: tu déclares plus de villes dans le meteo.xml
Bon après faut que le site meteofrance connaissent ton zipcode
moi jai installer au moin 12 plugin de meteo diferant et auqun ne marche, sa me dis ‘Object false has no method ‘action’ ‘ et sa me fait aussi sa pour des plugin autres que meteo donc je voulais savoir quoi faire
Super JP, ça a fonctionnė sans soucis!!
En tout cas bravo pour le boulot que tu fais sur Sarah, et surtout sur le partage!
Bonjour, petite question, si d’aventure le site venait à subir une refonte par exemple et que le code source ne ressemble plus à celui-ci, faut-il revoir tout le script ?
Merci et bonne soirée 😉
Les billets de blog sont surtout pour expliquer le fonctionnement de SARAH.
– le code « qui marche » est surtout dans les plugin du marketplace
– la « vrai » doc est sur Github
Ping : Projet S.A.R.A.H => l’internet des objets | Veille technologique consacré aux nouvelles technologies
Bonjour,
Information très intéressante pour l’ajout de la météo dans SARAH.
Cependant, savez-vous comment ajouter ce type de widget météo ? http://www.my-meteo.fr/meteo+webmaster.html
Je trouve le design plutôt sympa et je voudrais l’avoir sur mon projet.
Merci à vous.
Le Portail contient des toutes petites portlets très basique en HTML. Pour changer le look actuelle il suffit de recoder la portlet avec le HTML qui va bien
Bonjour, pour trouver le code de sa ville en france : http://www.insee.fr/fr/methodes/nomenclatures/cog/default.asp
Cela a fonctionné pour moi.