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, 7 months ago by lecagnois.
Attachments:
You must be
logged in to view attached files.