Outils pour utilisateurs

Outils du site


issue69:programmer_en_python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue69:programmer_en_python [2013/03/27 21:19] – [6] fredphil91issue69:programmer_en_python [2013/04/03 19:52] (Version actuelle) – [12] fredphil91
Ligne 10: Ligne 10:
 3 - Get episode specific information based on ShowID** 3 - Get episode specific information based on ShowID**
  
-La dernière fois, nous avons eu une longue discussion à propos de l'API web TVRAGE. Cette fois-ci, nous allons commencer à écrire du code et à s'en servir.+La dernière fois, nous avons eu une longue discussion à propos de l'API web TVRAGE. Cette fois-ci, nous allons commencer à écrire du code et à nous en servir.
  
-Le but de cette partie est de commencer le processus de création de code qui sera un module réutilisable pouvant être importé dans un autre programme python et donnera accès à l'API facilement.+Le but de cette partie est de commencer le processus de création de code qui sera un module réutilisable pouvant être importé dans un autre programme python et qui donnera accès à l'API facilement.
  
 Bien que l'API TVRAGE nous fournisse un certain nombre de possibilités, a fortiori pour la version enregistrée, nous allons nous concentrer sur seulement trois appels : Bien que l'API TVRAGE nous fournisse un certain nombre de possibilités, a fortiori pour la version enregistrée, nous allons nous concentrer sur seulement trois appels :
-Rechercher une émission par son nomet obtenir le ShowID +1Rechercher une émission par son nom et obtenir le ShowID. 
-Obtenir de l'information sur l'émission à partir du ShowID +2Obtenir de l'information sur l'émission à partir du ShowID. 
-Obtenir de l'informations spécifique à une épisode à partir du ShowID+3Obtenir des informations spécifiques à un épisode à partir du ShowID.
 ====== 2 ====== ====== 2 ======
  
Ligne 24: Ligne 24:
 We will create three main routines to make the calls and return the information, three routines that will be used to display the returned information (assuming that we are running in the “stand alone” mode), and a main routine to do the work – again assuming that we are running in the “stand alone” mode.** We will create three main routines to make the calls and return the information, three routines that will be used to display the returned information (assuming that we are running in the “stand alone” mode), and a main routine to do the work – again assuming that we are running in the “stand alone” mode.**
  
-La dernière fois, je vous ai montré les appels de l'API « non enregistrée » qui sont accessibles par tout le monde. Cette fois, nous allons utiliser les appels enregistrés - basés sur une clé d'enregistrement que j'ai. Je vais partager avec vous cette clé (TVRAGE sait que je vais le faire). Cependant, je vous demande s'il vous plaît, si vous envisagez d'utiliser l'API, de vous inscrire et d'obtenir votre propre clé, pour ne pas abuser du site. Réfléchissez également à leur faire un don pour soutenir leurs efforts constants s'il vous plaît.+La dernière fois, je vous ai montré les appels de l'API « non enregistrée » qui sont accessibles par tout le monde. Cette fois, nous allons utiliser les appels enregistrés - basés sur une clé d'enregistrement que j'ai. Je vais partager avec vous cette clé (TVRAGE sait que je vais le faire). Cependant, je vous demandes'il vous plaît, si vous envisagez d'utiliser l'API, de vous inscrire et d'obtenir votre propre clé, pour ne pas abuser du site. Je vous saurais gré de réfléchir également à leur faire un don pour soutenir leurs efforts constants. 
  
-Nous allons créer trois programmes principaux pour faire les appels et retourner l'information, trois routines qui seront utilisées pour afficher les informations retournées (en supposant que nous sommes en mode « indépendant »), et un sous-programme principal pour faire le travail - en supposant là encore que nous sommes dans le « indépendant ».+Nous allons créer trois programmes principaux pour faire les appels et retourner l'information, trois routines qui seront utilisées pour afficher les informations retournées (en supposant que nous sommes en mode « indépendant »), et un sous-programme principal pour faire le travail - en supposantlà encoreque nous sommes en mode « indépendant ».
  
 ====== 3 ====== ====== 3 ======
Ligne 47: Ligne 47:
  
  
-Voici la liste des routines que nous allons créer (enfin pas toutes pour cette fois. Je veux laisser la place à d'autres choses dans ce numéro.)+Voici la liste des routines que nous allons créer (enfin pas toutes pour cette fois-ci. Je veux laisser la place à d'autres choses dans ce numéro).
  
 def TrouverIdParNom(self, nomEmission, debug = 0) def TrouverIdParNom(self, nomEmission, debug = 0)
Ligne 74: Ligne 74:
  
  
-La routine TrouverIdParNom prend une chaîne (nomEmission), effectue l'appel API, analyse la réponse XML et retourne une liste des émissions qui correspondent aux informations contenues dans un dictionnaire, ce sera donc une liste de dictionnaires. RecupererInformationEmission récupère le showid de la routine précédente et retourne un dictionnaire d'informations sur l'émission. RecupererListeEpisodes utilise également le showid de la routine ci-dessus et retourne une liste de dictionnaires contenant des informations pour chaque épisode.+La routine TrouverIdParNom prend une chaîne (nomEmission), effectue l'appel API, analyse la réponse XML et retourne une liste des émissions qui correspondent aux informations contenues dans un dictionnaire ; ainsi, ce sera une liste de dictionnaires. RecupererInformationEmission récupère le showid de la routine précédente et retourne un dictionnaire d'informations sur l'émission. RecupererListeEpisodes utilise également le showid de la routine ci-dessus et retourne une liste de dictionnaires contenant des informations pour chaque épisode.
  
-Nous utiliserons une série de chaînes pour contenir la clé et l'URL de base, puis leur ajouter ce dont nous avons besoin. Par exemple, considérons le code suivant (nous compléterons ceci plus tard).+Nous utiliserons une série de chaînes pour contenir la clé et l'URL de base, puis leur ajouter ce dont nous avons besoin. Par exemple, considérons le code suivant (nous le compléterons plus tard).
  
 self.CleApi = "Itnl8IyY1hsR9n0IP6zI" self.CleApi = "Itnl8IyY1hsR9n0IP6zI"
Ligne 98: Ligne 98:
 http://services.tvrage.com/myfeeds/search.php?key=Itnl8IyY1hsR9n0IP6zI&show={NomEmission} http://services.tvrage.com/myfeeds/search.php?key=Itnl8IyY1hsR9n0IP6zI&show={NomEmission}
  
-Nous combinons la chaîne comme ceci...+Nous combinons la chaîne comme ceci :
  
 chaine = self.ChaineRechercheSerie + self.CleAPI + "&show=" + nomEmission chaine = self.ChaineRechercheSerie + self.CleAPI + "&show=" + nomEmission
  
-Pour les besoins des tests, je vais utiliser une série intitulée « Continuum » qui, si vous ne l'avez jamais vue, est une série géniale de science fiction sur la chaîne canadienne Showcase. J'utilise cette série pour plusieurs raisons. Tout d'abord, il n'y a (lorsque j'écris ces lignes) que deux séries qui correspondent à la recherche « Continuum », ce qui  rend votre débogage facile, et d'autre part, il n'y a actuellement qu'une seule saison de 10 épisodes à gérer.+Pour les besoins des tests, je vais utiliser une série intitulée « Continuum » qui, si vous ne l'avez jamais vue, est une série géniale de science-fiction sur la chaîne canadienne Showcase. J'utilise cette série pour plusieurs raisons. Tout d'abord, il n'y a (lorsque j'écris ces lignes) que deux séries qui correspondent à la recherche « Continuum », ce qui  rend votre débogage facile, etd'autre part, il n'y a actuellement qu'une seule saison de 10 épisodes à gérer.
  
 ====== 6 ====== ====== 6 ======
Ligne 117: Ligne 117:
 http://services.tvrage.com/myfeeds/episode_list.php?key=Itnl8IyY1hsR9n0IP6zI&sid=30789** http://services.tvrage.com/myfeeds/episode_list.php?key=Itnl8IyY1hsR9n0IP6zI&sid=30789**
  
-Vous devriez avoir une idée de ce que vous rechercherez dans vos routines d'analysej'ai donc placé ci-dessous les URL complètes pour que vous testiez avant de vous lancer dans votre code.+Vous devriez avoir une idée de ce que vous rechercherez dans vos routines d'analyse j'ai donc placé ci-dessous les URL complètes pour que vous les testiez avant de vous lancer dans votre code.
  
-Rechercher en utilisant un nom d'émission...+Rechercher en utilisant un nom d'émission :
 http://services.tvrage.com/myfeeds/search.php?key=Itnl8IyY1hsR9n0IP6zI&show=continuum http://services.tvrage.com/myfeeds/search.php?key=Itnl8IyY1hsR9n0IP6zI&show=continuum
  
-Récupérer des informations sur la série avec le ShowID (sid)+Récupérer des informations sur la série avec le ShowID (sid) :
 http://services.tvrage.com/myfeeds/showinfo.php?key=Itnl8IyY1hsR9n0IP6zI&sid=30789 http://services.tvrage.com/myfeeds/showinfo.php?key=Itnl8IyY1hsR9n0IP6zI&sid=30789
  
-Récupérer la liste des épisodes et leurs informations avec le ShowID (sid)+Récupérer la liste des épisodes et leurs informations avec le ShowID (sid) :
 http://services.tvrage.com/myfeeds/episode_list.php?key=Itnl8IyY1hsR9n0IP6zI&sid=30789 http://services.tvrage.com/myfeeds/episode_list.php?key=Itnl8IyY1hsR9n0IP6zI&sid=30789
  
 ====== 7 ====== ====== 7 ======
  
-Now that we have all that out of the way, let’s get started with our code.+**Now that we have all that out of the way, let’s get started with our code.
  
 You’ll create a file with the name of “tvrage.py”. We’ll be using this for the next issue or two. You’ll create a file with the name of “tvrage.py”. We’ll be using this for the next issue or two.
Ligne 136: Ligne 136:
 We’ll start with our imports shown above right. We’ll start with our imports shown above right.
  
-You can see that we will be using ElementTree to do the XML parsing, and urllib for the internet communication. The sys library is used for sys.exit.+You can see that we will be using ElementTree to do the XML parsing, and urllib for the internet communication. The sys library is used for sys.exit.** 
 + 
 +Maintenant que nous avons vu tout cela, nous allons commencer à écrire le code. 
 + 
 +Vous allez créer un fichier nommé « tvrage.py ». Nous allons nous en servir pendant un ou deux articles. 
 + 
 +Nous allons commencer avec nos importations indiquées en haut à droite. 
 + 
 +Vous pouvez voir que nous allons utiliser ElementTree pour faire l'analyse XML et urllib pour la communication internet. La bibliothèque sys est utilisée pour sys.exit.
  
 ====== 8 ====== ====== 8 ======
  
-We’ll set up the main loop now so we can test things as we go (bottom right).  Remember this is the last thing in our source file.+**We’ll set up the main loop now so we can test things as we go (bottom right).  Remember this is the last thing in our source file.
  
 As I said earlier, the first four lines are our partial strings to build the URL for the function that we want to use. (GetEpisodeListString should all be on one line.) The last four lines are the initialization of the lists we will be using later. As I said earlier, the first four lines are our partial strings to build the URL for the function that we want to use. (GetEpisodeListString should all be on one line.) The last four lines are the initialization of the lists we will be using later.
  
-First (middle right), we set up the string that will be used as the URL. Next, we set up the socket with an 8 second default timeout. Then we call urllib.urlopen with our generated URL and (hopefully) receive our xml file in the usock object. We call ElementTree setup so we can parse the xml information. (If you are lost here, please re-read my articles on XML (parts 10, 11 and 12 appearing in FCM #36, 37 and 38)). Next, we close the socket, and initialize the counter for the number of matches found, and reset the list ‘showlist’ to an empty list.+First (middle right), we set up the string that will be used as the URL. Next, we set up the socket with an 8 second default timeout. Then we call urllib.urlopen with our generated URL and (hopefully) receive our xml file in the usock object. We call ElementTree setup so we can parse the xml information. (If you are lost here, please re-read my articles on XML (parts 10, 11 and 12 appearing in FCM #36, 37 and 38)). Next, we close the socket, and initialize the counter for the number of matches found, and reset the list ‘showlist’ to an empty list.** 
 + 
 +Nous allons mettre en place la boucle principale maintenant afin de pouvoir tester les choses au fur et à mesure (en bas à droite). Rappelez-vous que ceci doit être tout à la fin de notre fichier source. 
 + 
 +Comme je l'ai dit plus tôt, les quatre premières lignes sont nos chaînes partielles pour construire l'URL de la fonction que nous voulons utiliser. (ChaineListeEpisodes doit être sur une seule ligne.) Les quatre dernières lignes sont l'initialisation des listes que nous utiliserons plus tard. 
 + 
 +Tout d'abord (au milieu à droite), nous réglons la chaîne qui sera utilisée comme URL. Puis, nous réglons le socket avec un délai d'attente de 8 secondes par défaut. Ensuite, nous appelons urllib.urlopen avec l'URL générée et (espérons-le) recevons notre fichier xml dans l'objet usock. Nous utilisons ElementTree pour analyser les informations xml. (Si vous êtes perdus, relisez s'il vous plaît mes articles sur XML (les parties 10, 11 et 12 figurant dans les FCM n° 36, 37 et 38)). Enfin, on ferme le socket et on initialise le compteur pour le nombre de résultats trouvés, puis on réinitialise la liste listeEmissions à une liste vide.
  
 ====== 9 ====== ====== 9 ======
  
-Now we will step through the xml information using the tag ‘show’ as the parent for what we want. Remember the returned information looks something like that shown top right.+**Now we will step through the xml information using the tag ‘show’ as the parent for what we want. Remember the returned information looks something like that shown top right.
  
 We will be going through each group of information for the parent ‘show’ and parsing out the information. In practice, all we really need is the show name (<name>) and the showid (<showid>) shown bottom left, but we’ll handle all of the results. We will be going through each group of information for the parent ‘show’ and parsing out the information. In practice, all we really need is the show name (<name>) and the showid (<showid>) shown bottom left, but we’ll handle all of the results.
  
-I’ll discuss the first one and you’ll understand the rest. As we go through the information, we look for tags (bottom right) that match what we want. If we find any, we assign each to a temporary variable and then put that into the dictionary as a value with a key that matches what we are putting in. In the case of the above, we are looking for the tag ‘showid’ in the XML data. When we find it, we assign that as a value to the dictionary key ‘ID’.+I’ll discuss the first one and you’ll understand the rest. As we go through the information, we look for tags (bottom right) that match what we want. If we find any, we assign each to a temporary variable and then put that into the dictionary as a value with a key that matches what we are putting in. In the case of the above, we are looking for the tag ‘showid’ in the XML data. When we find it, we assign that as a value to the dictionary key ‘ID’.** 
 + 
 +Maintenant, nous allons passer en revue les informations XML en utilisant la balise « show » comme parent de ce que nous voulons. Rappelez-vous que les informations retournées ressemblent à ce qui est en haut à droite. 
 + 
 +Nous allons parcourir chaque groupe d'informations en cherchant « show » comme parent et analyser l'information. En pratique, nous n'avons besoin que du nom de l'émission (<name>) et du showid (<showid>) montré en bas à gauche, mais nous allons gérer tous les résultats. 
 + 
 +Je vais expliquer le premier et vous comprendrez le reste. Lorsque nous parcourons les informations, nous recherchons les balises (en bas à droite) qui correspondent à ce que nous voulons. Si nous en trouvons une, nous l'affectons à une variable temporaire, puis mettons cela dans le dictionnaire comme valeur avec une clé qui correspond à ce que nous insérons. Dans le cas qui précède, nous recherchons la balise « showid » dans les données XML. Lorsque nous la trouvons, nous l'assignons en tant que valeur de la clé « ID ».
  
 ====== 10 ====== ====== 10 ======
  
-The next portion (next page, top right) deals with the genre(s) of the show. As you can see from the above XML snippet, this show has four different genres that it fits into. Action, Crime, Drama, and Sci-Fi. We need to handle each.+**The next portion (next page, top right) deals with the genre(s) of the show. As you can see from the above XML snippet, this show has four different genres that it fits into. Action, Crime, Drama, and Sci-Fi. We need to handle each.
  
-Finally, we increment the foundcounter variable, and append this dictionary into the list ‘showlist’. Then we start the entire thing over until there is no more XML data. Once everything is done, we return the list of dictionaries (bottom right).+Finally, we increment the foundcounter variable, and append this dictionary into the list ‘showlist’. Then we start the entire thing over until there is no more XML data. Once everything is done, we return the list of dictionaries (bottom right).** 
 + 
 +La partie suivante (page suivante, en haut à droite) porte sur le(s) genre(s) de la série. Comme vous pouvez le voir dans l'extrait XML ci-dessus, cette série se trouve dans quatre genres différents. Action, crime, drame et Sci-Fi. Nous devons les traiter tous. 
 + 
 +Enfin, on incrémente la variable compteurTrouves et on ajoute ce dictionnaire dans la liste « listeEmissions ». Ensuite, nous recommençons le processus jusqu'à ce qu'il n'y ait plus aucune donnée XML. Une fois que tout est terminé, on retourne la liste des dictionnaires (en bas à droite).
  
 ====== 11 ====== ====== 11 ======
  
-Most of the code is pretty self explanatory. We’ll concentrate on the for loop we use to print out the information. We loop through each item in the list of dictionaries and print a counter variable, the show name (c[‘Name’]), and the id. The result looks something like this...+**Most of the code is pretty self explanatory. We’ll concentrate on the for loop we use to print out the information. We loop through each item in the list of dictionaries and print a counter variable, the show name (c[‘Name’]), and the id. The result looks something like this...
  
 Enter Series Name -> continuum Enter Series Name -> continuum
Ligne 169: Ligne 193:
 1 - Continuum - 30789 1 - Continuum - 30789
 2 - Continuum (Web series) - 32083 2 - Continuum (Web series) - 32083
-Enter Selection or 0 to exit ->+Enter Selection or 0 to exit ->** 
 + 
 +La plupart du code est assez explicite. Nous allons nous concentrer sur la boucle « for » que nous utilisons pour afficher les informations. Nous bouclons sur chaque élément de la liste de dictionnaires et affichons une variable compteur, le nom de l'émission (c['Nom']) et l'id. Le résultat ressemble à ceci : 
 + 
 +Entrer le nom de la série -> continuum 
 +2 resultat(s) 
 +------------------------ 
 +1 - Continuum - 30789 
 +2 - Continuum (Web series) - 32083 
 +Choisir un nombre ou 0 pour quitter ->
  
 ====== 12 ====== ====== 12 ======
  
-Please remember that the list of items is zero based, so when the user enters ‘1’, they are really asking for dictionary number 0. We do this, because “regular” people think that counting should start with ‘1’ not 0. And we can then use 0 to escape the routine and not make them use ‘Q’ or ‘q’ or ‘-1’.+**Please remember that the list of items is zero based, so when the user enters ‘1’, they are really asking for dictionary number 0. We do this, because “regular” people think that counting should start with ‘1’ not 0. And we can then use 0 to escape the routine and not make them use ‘Q’ or ‘q’ or ‘-1’.
  
 Now, the “main” routine that pulls it all together for us. Now, the “main” routine that pulls it all together for us.
Ligne 181: Ligne 214:
 Next time, we’ll add the other routines. For now, the code can be found at http://pastebin.com/6iw5NQrW Next time, we’ll add the other routines. For now, the code can be found at http://pastebin.com/6iw5NQrW
  
-See you soon.+See you soon.**
  
 +Souvenez-vous que la liste des articles commence à zéro, donc lorsque l'utilisateur entre 1, en fait il demande le dictionnaire numéro 0. Nous faisons comme ça parce que les gens « normaux » pensent que le décompte doit commencer par 1, pas par 0. Et nous pouvons ainsi utiliser 0 pour quitter la routine et ne pas leur faire utiliser Q ou q ou -1.
  
 +Maintenant, la routine « main » va tout rassembler pour nous.
  
 +Pour aujourd'hui, nous allons juste commencer la routine (au milieu à droite) et nous la continuerons la prochaine fois.
  
-code en français : http://pastebin.com/8F3Bd1Xd+La prochaine fois, nous ajouterons les autres routines. Pour l'instant, le code peut être trouvé sur http://pastebin.com/8F3Bd1Xd
  
 +À bientôt.
issue69/programmer_en_python.1364415560.txt.gz · Dernière modification : 2013/03/27 21:19 de fredphil91