Viewing 1 reply thread
  • Author
    Posts
    • #10774
      lecagnois
      Participant

      Toujours dans l’esprit d’un robot compagnon , après la qualité de l’air , la météo , le planning , la gestion des mails , l’envoi d’une photo , les numéro du loto ,la domotique avec l’allumage des vos lampes voici un nouveau TUTO .

      Votre robot vos donne les informations du jour.

      Comment allons nous faire ? (nous allons encore utiliser un API internet). J’ai donc rechercher sur google
      et j’ai trouvé une API de news gratuite , a cette adresse :
      https://newsapi.org/

      Cliquer sur Get API key pour vous inscrire et obtenir un clé d’activation .
      Noter cette clé , elle servira pour le programme python.

      Il y a beaucoup de sources d informations dans différente langues https://newsapi.org/sources
      j ‘ai utilisé les celle de google sources=google-news-fr
      https://newsapi.org/s/google-news-fr-api
      En tappant cette commande dans votre navigateur
      https://newsapi.org/v2/top-headlines?sources=google-news-fr&apiKey=VOTRE CLES ICI
      la réponse JSON vous renvoi une dizaine des news.

      vous pouvez aussi taper :
      https://newsapi.org/v2/top-headlines?country=fr&apiKey=VOTRE CLES ICI
      La réponse JSON renvoi 20 news .

      Bon maintenant on va faire quoi avec ses réponse JSON ?
      On va les mettre en formes pour les utiliser avec notre InMoov .

      Voici le code python :

      def info(nombre):
      	try:
      		##https://newsapi.org/v2/top-headlines?country=fr&apiKey=VOTRE CLES ICI ( adresse a mettre dans url pour avoir 20 news)
      		#lecture du flux de API new adresse google 10 news
      		url = urllib2.urlopen("https://newsapi.org/v2/top-headlines?sources=google-news-fr&apiKey=VOTRE CLES ICI")
      		f = url.read()
      		# creation tableau a partir de API 
      		tableau = f[1:10000].decode('utf-8').split('"')
      		# creation tableau avec uniquement les titres et contenu
      		Mnew = []
      		# remplissage du tableau 
      		i=0
      		while i < len(tableau):
      			if (tableau[i]=="title"):
      				Mnew.append(tableau[i+2]+" . "+tableau[i+6])
      			i=i+1
      		#lecture des donnees en parametre le nombre d informations
      		# si nombre = 1 alors  donne une information au hasard sinon le nombre informations demandés
      		if nombre == "1" :
      			talkBlocking(Mnew[random.randint(1,(len(Mnew)))])
      		else :
      			i=0
      			while i < int(nombre) :
      				talkBlocking(Mnew[i])
      				sleep(5)
      				i = i+1
      			
      	except IOError:
      		talk("le serveur de nouvelles est hors service")
      	except OSError:
      		talkBlocking("oups il y a une erreur OS")
      	except ValueError:
      		talkBlocking("oups il y a une erreur de valeur ")
      	except:
      		print(sys.exc_info()[0])
      		raise
      		 
      

      On aura la posibilité d’avoir toutes les news ( mais inmoov va être très bavard ) donc j’ai affiné le programme pour lui demande le nombre de news que l on veux écouter ( 1, 2, 3 etc …)

      voici le fichier AIML correspondant .

      <?xml version="1.0" encoding="UTF-8"?>
      <aiml>
      <!--  -->
      <!--  -->
      <category><pattern>INFORMATIONS</pattern>
      <template><oob>
              <mrl>
                <service>python</service>
                <method>exec</method>
                <param>info("10")</param>
              </mrl>
            </oob></template>
      </category>
      <category><pattern>DONNE MOI UNE NOUVELLE</pattern>
      <template><oob>
              <mrl>
                <service>python</service>
                <method>exec</method>
                <param>info("1")</param>
              </mrl>
            </oob></template>
      </category>
      <category><pattern>DONNE MOI * INFORMATIONS</pattern>
      <template><think>
              <set name="nombre"><star index="1"/></set>
            </think>
            <condition>
      		<li name="nombre" value="deux"><think><set name="nombre">2</set></think></li>
      		<li name="nombre" value="de"><think><set name="nombre">2</set></think></li>
      		<li name="nombre" value="2"><think><set name="nombre">2</set></think></li>
      		<li name="nombre" value="trois"><think><set name="nombre">3</set></think></li>
      		<li name="nombre" value="quatre"><think><set name="nombre">4</set></think></li>
      		<li name="nombre" value="cinq"><think><set name="nombre">5</set></think></li>
      		<li name="nombre" value="six"><think><set name="nombre">6</set></think></li>
      		<li name="nombre" value="sept"><think><set name="nombre">7</set></think></li>
      		<li name="nombre" value="huit"><think><set name="nombre">8</set></think></li>
      		<li name="nombre" value="neuf"><think><set name="nombre">9</set></think></li>
      		<li name="nombre" value="dix"><think><set name="nombre">10</set></think></li>
             </condition>
      		<oob>
              <mrl>
                <service>python</service>
                <method>exec</method>
                <param>info('<get name="nombre"/>')</param>
              </mrl>
            </oob></template>
      </category>
      <category><pattern>DONNE MOI UNE INFORMATION</pattern>
      <template><srai>DONNE MOI UNE NOUVELLE</srai></template>
      </category>
      </aiml>
      

      exemple : Pour avoir trois informations, demander a votre robot “donne moi 3 informations”

      ci-joint un fichier zip avec les programmes . les fichiers se mettent aux mêmes endroit que les tutos précèdent .

      Voila si cela vous intéressent je continuerai a vous fournir mes petits programmes python.

      • This topic was modified 6 years, 8 months ago by lecagnois.
      Attachments:
      You must be logged in to view attached files.
    • #12344
      Fabrice
      Participant

      Bonjour, je suis friand de toutes tes améliorations, mais voila j’ai vraiment du mal avec le codage je fais des efforts mais je débute.

      J’ai bien copié tes fichiers et introduit la clé Api, mais chez moi ca ne fonctionne pas. Y a t-il d’autre fichier a modifier ou a renseigner pour que ca fonctionne ?

      Merci

Viewing 1 reply thread
  • You must be logged in to reply to this topic.