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

 

21 réflexions sur “Tutoriel: Ajout de la Météo dans SARAH

  • 15 septembre 2012 à 11 h 08 min
    Permalien

    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/

    Répondre
  • 15 septembre 2012 à 11 h 50 min
    Permalien

    Ah c’est pas mal, c’est exactement ce que j’avais en tête.

    Répondre
  • 15 septembre 2012 à 12 h 02 min
    Permalien

    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:

      // Scrapping
      var pos = parseInt(options.date);
      results = evaluate(page, function(pos) {
        results = {};
    
        var tr = $('DIV#prevision TABLE.prevSem1 TR:nth-child('+pos+')'); // 1 = aujourd'hui  3=demain
    

    D’ailleurs vous parsez ‘options.movie’. Un reste du script d’origine ?

    Répondre
  • 15 septembre 2012 à 12 h 09 min
    Permalien

    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.

    Répondre
  • 15 septembre 2012 à 13 h 53 min
    Permalien

    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.

    Répondre
  • 12 mai 2013 à 23 h 22 min
    Permalien

    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/

    Répondre
  • 13 mai 2013 à 20 h 03 min
    Permalien

    @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.

    Répondre
  • 13 mai 2013 à 21 h 53 min
    Permalien

    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 ?

    Répondre
  • 13 mai 2013 à 22 h 04 min
    Permalien

    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

    Répondre
  • 26 mai 2013 à 11 h 28 min
    Permalien

    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) »

    Répondre
  • 26 mai 2013 à 11 h 51 min
    Permalien

    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

    Répondre
    • 19 août 2020 à 16 h 21 min
      Permalien

      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

      Répondre
  • 28 mai 2013 à 4 h 27 min
    Permalien

    Super JP, ça a fonctionnė sans soucis!!
    En tout cas bravo pour le boulot que tu fais sur Sarah, et surtout sur le partage!

    Répondre
  • 21 mai 2014 à 23 h 41 min
    Permalien

    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 😉

    Répondre
    • 21 mai 2014 à 23 h 44 min
      Permalien

      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

      Répondre
  • Ping : Projet S.A.R.A.H => l’internet des objets | Veille technologique consacré aux nouvelles technologies

  • 10 juillet 2014 à 11 h 01 min
    Permalien

    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.

    Répondre
    • 10 juillet 2014 à 11 h 22 min
      Permalien

      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

      Répondre

Répondre à Jp Encausse Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.