Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
issue68:tutoriel_-_programmer_en_python [2013/03/02 23:22] – [EPISODE] andre_domenech | issue68:tutoriel_-_programmer_en_python [2013/03/05 09:49] (Version actuelle) – [FIN] auntiee |
---|
**Many, many months ago, we worked with API calls for Weather Underground. Actually, it was in part 11 which was back in issue #37. Well, we are going to deal with APIs again, this time for a website named TVRage (http://tvrage.com). If you aren’t familiar with this site, it deals with television shows. So far, every TV show that I could think of has been in their system. In this series of articles, we are going to revisit XML, APIs, and ElementTree to create a wrapper library that will allow us to create a small library which simplifies our retrieval of TV information on our favorite shows.** | **Many, many months ago, we worked with API calls for Weather Underground. Actually, it was in part 11 which was back in issue #37. Well, we are going to deal with APIs again, this time for a website named TVRage (http://tvrage.com). If you aren’t familiar with this site, it deals with television shows. So far, every TV show that I could think of has been in their system. In this series of articles, we are going to revisit XML, APIs, and ElementTree to create a wrapper library that will allow us to create a small library which simplifies our retrieval of TV information on our favorite shows.** |
| |
Il y a plusieurs longs mois, nous avons travaillé avec des appels d'API pour Weather Underground. En fait, c'était dans la partie 11 qui était parue dans le numéro 37. Eh bien, nous allons à nouveau traiter d'API, cette fois pour un site web nommé TVRage (http://tvrage.com). Si vous n'êtes pas familier avec ce site, il traite des émissions de télévision. Jusqu'à présent, toutes les émissions télévisées auxquelles je pouvais penser étaient dans leur système. Dans cette série d'articles, nous allons revenir sur XML, les API et ElementTree pour créer une couche d'abstraction qui nous permettra de créer une petite bibliothèque qui simplifiera notre recherche d'information sur nos émissions préférées. | Il y a plusieurs longs mois, nous avons travaillé avec des appels d'API pour Weather Underground. En fait, c'était dans la partie 11, parue dans le numéro 37. Eh bien, nous allons à nouveau traiter d'API, cette fois pour un site web nommé TVRage (http://tvrage.com). Si vous ne connaissez pas ce site, il traite des émissions de télévision. Jusqu'à présent, toutes les émissions télévisées auxquelles je pouvais penser étaient dans leur système. Dans cette série d'articles, nous allons revenir sur XML, les API et ElementTree pour créer une couche d'abstraction qui nous permettra de créer une petite bibliothèque qui simplifiera notre recherche d'information sur nos émissions préférées. |
| |
====== LIBRARY ====== | ====== LIBRARY ====== |
**Now, I mentioned a wrapper library. What’s that? In simple terms, when you create or use a wrapper library, you are using a set of code that “wraps” the complexity of the website’s API into an easy-to-use library. Before we get started, I need to make a few things clear. First, this is a free service. However, they do request donations for use of their API. If you feel that this is a worthwhile service, please consider donating $10 US or more. Second, you should register at their website and get your own API key. It’s free, so there’s really no reason not to, especially if you are going to use the information provided here. In addition, you have access to a few other fields of information like series and episode summaries that are not included in the unregistered version. Third, they are hard at work at updating the API. This means that when you get to seeing this article, their API might have changed. We’ll be using the public feeds, which are free for everyone to use as of December 2012. The API website is located at http://services.tvrage.com/info.php?page=main and shows a few examples of the types of information that are available.** | **Now, I mentioned a wrapper library. What’s that? In simple terms, when you create or use a wrapper library, you are using a set of code that “wraps” the complexity of the website’s API into an easy-to-use library. Before we get started, I need to make a few things clear. First, this is a free service. However, they do request donations for use of their API. If you feel that this is a worthwhile service, please consider donating $10 US or more. Second, you should register at their website and get your own API key. It’s free, so there’s really no reason not to, especially if you are going to use the information provided here. In addition, you have access to a few other fields of information like series and episode summaries that are not included in the unregistered version. Third, they are hard at work at updating the API. This means that when you get to seeing this article, their API might have changed. We’ll be using the public feeds, which are free for everyone to use as of December 2012. The API website is located at http://services.tvrage.com/info.php?page=main and shows a few examples of the types of information that are available.** |
| |
Bon, j'ai mentionné une petite bibliothèque. Qu'est-ce que c'est ? En termes simples, lorsque vous créez ou utilisez une bibliothèque, vous utilisez des morceaux de code qui « enveloppent » la complexité de l'API du site Web dans des fonctions faciles à utiliser. Avant de commencer, je dois éclaircir quelques petites choses. Tout d'abord, il s'agit d'un service gratuit. Cependant, ils demandent des dons pour l'utilisation de leur API. Si vous pensez que c'est un service utile, s'il vous plaît envisagez de faire un don de 8 € ou plus. Deuxièmement, vous devez vous inscrire sur leur site et obtenir votre clé personnelle pour l'API. C'est gratuit, donc il n'y a vraiment aucune raison de ne pas le faire, surtout si vous envisagez d'utiliser les informations qu'ils fournissent. En outre, vous avez accès à quelques champs d'information comme les résumés des séries et des épisodes qui ne sont pas inclus dans la version non enregistrée. Troisièmement, ils sont à pied d'œuvre sur la mise à jour de l'API. Cela signifie que quand vous lirez le présent article, leur API peut avoir changé. Nous allons utiliser les flux publics, qui sont gratuits pour tout le monde depuis décembre 2012. Le site de l'API est situé à http://services.tvrage.com/info.php?page=main et montre quelques exemples des types d'informations qui sont disponibles. | Bon, j'ai mentionné une couche d'abstraction. Qu'est-ce que c'est ? En termes simples, lorsque vous créez ou utilisez une bibliothèque, vous utilisez des morceaux de code qui « enveloppent » la complexité de l'API du site Web dans une bibliothèque facile à utiliser. Avant de commencer, je dois éclaircir quelques petites choses. Tout d'abord, il s'agit d'un service gratuit. Cependant, ils demandent des dons pour l'utilisation de leur API. Si vous pensez que c'est un service utile, prière d'envisager de faire un don de 8 € ou plus. Deuxièmement, vous devez vous inscrire sur leur site et obtenir votre clé personnelle pour l'API. C'est gratuit, donc il n'y a vraiment aucune raison de ne pas le faire, surtout si vous envisagez d'utiliser les informations fournies. En outre, vous avez accès à quelques autres champs d'information comme les résumés des séries et des épisodes qui ne sont pas inclus dans la version sans inscription. Troisièmement, ils sont à pied d'œuvre sur la mise à jour de l'API. Cela signifie que quand vous lirez le présent article, leur API peut avoir changé. Nous allons utiliser les flux publics, qui sont gratuits pour tout le monde depuis décembre 2012. Le site de l'API est situé à http://services.tvrage.com/info.php?page=main et montre quelques exemples des types d'informations qui sont disponibles. |
| |
====== API ====== | ====== API ====== |
| |
En utilisant leur API, nous pouvons obtenir des informations très précises sur l'émission elle-même et/ou sur chacun des épisodes. Il faut en fait trois étapes pour trouver des informations sur une émission. Les voici : | En utilisant leur API, nous pouvons obtenir des informations très précises sur l'émission elle-même et/ou sur chacun des épisodes. Il faut en fait trois étapes pour trouver des informations sur une émission. Les voici : |
• Rechercher dans leur base de données le nom de l'émission pour obtenir son identifiant (ID) que l'on doit utiliser pour obtenir plus de données. Pensez à la valeur showid comme une clé permettant d'accéder directement à un enregistrement dans la base de données, c'est exactement ça. | • Rechercher dans leur base de données le nom de l'émission pour obtenir son identifiant (« Show ID ») que l'on doit utiliser pour obtenir plus de données. Pensez à la valeur showid comme une clé permettant d'accéder directement à un enregistrement dans la base de données ; c'est exactement ça. |
• Une fois que vous avez l'ID, obtenez les informations sur l'émission. | • Une fois que vous avez l'ID, obtenez les informations sur l'émission. |
• Enfin, recherchez les informations sur un épisode spécifique. Elles viendront d'une liste des épisodes de l'émission jusqu'à aujourd'hui. | • Enfin, recherchez les informations sur un épisode spécifique. Elles viendront d'une liste des épisodes de l'émission jusqu'à aujourd'hui. |
http://services.tvrage.com/feeds/search.php?show={UneEmission} | http://services.tvrage.com/feeds/search.php?show={UneEmission} |
| |
• Récupération des données de l'émision à partir du ShowID (sid) - | • Récupération des données de l'émission à partir du ShowID (sid) - |
http://services.tvrage.com/feeds/showinfo.php?sid={UnIdentifiant} | http://services.tvrage.com/feeds/showinfo.php?sid={UnIdentifiant} |
| |
</CLOSING TAG>** | </CLOSING TAG>** |
| |
On reçoit en retour un flux de données au format XML. Prenons un moment pour examiner à quoi ressemble XML. La première ligne doit toujours être similaire à celle illustrée ci-dessous pour être considérée comme un bon flux de données XML (ci-dessous). | On reçoit en retour un flux de données au format XML. Prenons un moment pour revoir à quoi ressemble XML. La première ligne doit toujours être similaire à celle illustrée ci-dessous pour être considérée comme un bon flux de données XML (ci-dessous). |
| |
Chaque donnée est entourée par une balise de définition et une balise de fin. Parfois, vous aurez une balise enfant qui est aussi elle-même une balise parent comme ceci : | Chaque donnée est entourée par une balise de définition et une balise de fin. Parfois, vous aurez une balise enfant qui est aussi elle-même une balise parent comme ceci : |
| |
<Results> - Il s'agit de la racine des données XML. La dernière ligne du flux retourné doit être la balise de fermeture </Results>. Fondamentalement, cela marque le début et la fin du flux XML. Il pourrait n'y avoir aucun résultat ou cinquante résultats. | <Results> - Il s'agit de la racine des données XML. La dernière ligne du flux retourné doit être la balise de fermeture </Results>. Fondamentalement, cela marque le début et la fin du flux XML. Il pourrait n'y avoir aucun résultat ou cinquante résultats. |
<show> - C'est le nœud parent qui dit: « Ce qui suit (jusqu'à la balise fermante) est l'information sur une émission de télévision ». Encore une fois, il se termine par la balise de fin </show>. Tout ce qui est entre ces deux balises concerne une émission. | <show> - C'est le nœud parent qui dit : « Ce qui suit (jusqu'à la balise fermante) est l'information sur une émission de télévision ». Encore une fois, il se termine par la balise de fin </show>. Tout ce qui est entre ces deux balises concerne une émission. |
<showid>2930</showid> - Cette balise showid contient le sid que nous devons utiliser pour obtenir les informations de l'émission, dans ce cas 2930. | <showid>2930</showid> - Cette balise showid contient le sid que nous devons utiliser pour obtenir les informations de l'émission, dans ce cas 2930. |
<name>Buffy contre les vampires</name> - C'est le nom de l'émission. | <name>Buffy contre les vampires</name> - C'est le nom de l'émission. |
**In the case of our program, we would be really interested in only the two fields <showid> and <name>. We might also consider paying attention to the <started> field as well. This is because we rarely get back just one set of data, especially if we didn’t give the absolutely complete show name. For example, if we were interested in the show “The Big Bang Theory,” and searched using only the string “Big Bang”, we would get twenty or so data sets back because anything that even remotely matched “big” or “bang” would be returned. However, if we were interested in the show “NCIS,” and we searched for that, we would get back many responses. Some not what we would expect right away. Not only would we get “NCIS”, “NCIS: Los Angeles”, “The Real NCIS”, but also “The Streets of San Francisco” and “Da Vinci’s Inquest”, and many more, since the letters “N” “C” “I” and “S” are in all of those, pretty much in that order.** | **In the case of our program, we would be really interested in only the two fields <showid> and <name>. We might also consider paying attention to the <started> field as well. This is because we rarely get back just one set of data, especially if we didn’t give the absolutely complete show name. For example, if we were interested in the show “The Big Bang Theory,” and searched using only the string “Big Bang”, we would get twenty or so data sets back because anything that even remotely matched “big” or “bang” would be returned. However, if we were interested in the show “NCIS,” and we searched for that, we would get back many responses. Some not what we would expect right away. Not only would we get “NCIS”, “NCIS: Los Angeles”, “The Real NCIS”, but also “The Streets of San Francisco” and “Da Vinci’s Inquest”, and many more, since the letters “N” “C” “I” and “S” are in all of those, pretty much in that order.** |
| |
Dans le cas de notre programme, nous ne sommes vraiment intéressés que par les deux balises <showid> et <name>. Nous pourrions également envisager de prêter attention au champ <started>. Ceci parce que nous recevons rarement un seul ensemble de données, surtout si l'on ne donne pas le nom absolument complet de l'émission. Par exemple, si nous nous étions intéressés à l'émission « The Big Bang Theory » et l'avions recherchée en utilisant uniquement la chaîne « Big Bang », nous aurions obtenu une vingtaine d'ensembles de données en retour car tout ce qui est approchant, même de loin, serait renvoyé. De même, si nous nous étions intéressés à l'émission "NCIS" et avions cherché cela, nous trouverions de nombreuses réponses. Certains ne correspondent pas à ce que nous attendons. Non seulement nous obtenons « NCIS », « NCIS : Los Angeles », « The Real NCIS », mais aussi « Les rues de San Francisco » et « L'enquête Da Vinci », et beaucoup plus, puisque les lettres « N » « C » « I » et « S » sont contenus dans tous ceux-ci, à peu près dans cet ordre. | Dans le cas de notre programme, nous ne sommes vraiment intéressés que par les deux balises <showid> et <name>. Nous pourrions également envisager de prêter attention au champ <started>. Ceci, parce que nous recevons rarement un seul ensemble de données, surtout si l'on ne donne pas le nom absolument complet de l'émission. Par exemple, si nous nous étions intéressés à l'émission « The Big Bang Theory » et l'avions recherchée en utilisant uniquement la chaîne « Big Bang » ou à «», nous aurions obtenu une vingtaine d'ensembles de données en retour car tout ce qui s'approche, même de loin, à « big » ou à « bang »serait renvoyé. De même, si nous nous étions intéressés à l'émission "NCIS" et avions cherché cela, nous trouverions de nombreuses réponses. Certains ne correspondent pas à ce que nous attendons. Non seulement nous obtenons « NCIS », « NCIS : Los Angeles », « The Real NCIS », mais aussi « Les rues de San Francisco » et « L'enquête Da Vinci », et beaucoup plus, puisque les lettres « N » « C » « I » et « S » sont contenus dans tous ceux-ci, à peu près dans cet ordre. |
| |
====== EPISODE ====== | ====== EPISODE ====== |
Next, we would request the episode list. If the show is only one season long and has/had only six episodes, this stream would be short. However, let’s take the case of one of my favorite TV shows, Doctor Who. Doctor Who is a British TV show that, in its original form, started in 1963 and ran for 26 seasons (‘series’ for our friends in the UK) until 1989. Its first season alone had 42 episodes, while other seasons/series have around 24 episodes. You can see where you might have a HUGE stream to parse through.** | Next, we would request the episode list. If the show is only one season long and has/had only six episodes, this stream would be short. However, let’s take the case of one of my favorite TV shows, Doctor Who. Doctor Who is a British TV show that, in its original form, started in 1963 and ran for 26 seasons (‘series’ for our friends in the UK) until 1989. Its first season alone had 42 episodes, while other seasons/series have around 24 episodes. You can see where you might have a HUGE stream to parse through.** |
| |
Une fois que nous connaissons l'identifiant d'émission, nous pouvons demander l'information sur l'émission pour cet ID. Les données sont similaires à celles que nous venons de recevoir dans la réponse à la recherche, mais plus détaillées. En utilisant encore une fois Buffy comme exemple, voici (page suivante, à droite) une version abrégée du fichier XML. | Une fois que nous connaissons l'identifiant d'émission, nous pouvons demander l'information sur l'émission pour cet ID-là. Les données sont similaires à celles que nous venons de recevoir dans la réponse à la recherche, mais plus détaillées. En utilisant encore une fois Buffy comme exemple, voici (page suivante, à droite) une version abrégée du fichier XML. |
| |
Vous pouvez voir que la plupart des données étaient déjà dans le flux de réponse à la recherche. Cependant, des choses comme la chaîne, le pays de la chaîne, l'exécution, le jour et l'heure de diffusion, sont spécifiques à cette série de réponses. | Vous pouvez voir que la plupart des données étaient déjà dans le flux de réponse à la recherche originale. Cependant, des choses comme la chaîne, le pays de la chaîne, l'exécution, le jour et l'heure de diffusion, sont spécifiques à cette série de réponses. |
| |
Ensuite, nous allons demander la liste des épisodes. Si l'émission n'a qu'une saison et a/avait seulement six épisodes, ce flux sera court. Cependant, prenons le cas d'une de mes émissions préférées, Doctor Who. Doctor Who est une émission britannique qui, dans sa forme originale, a commencé en 1963 et a duré 26 saisons (« séries » pour nos amis du Royaume-Uni) jusqu'en 1989. Sa première saison compte 42 épisodes, tandis que les autres saisons/séries ont environ 24 épisodes. Vous pouvez voir que vous pourriez avoir un énorme, ÉNORME flux à analyser. | Ensuite, nous allons demander la liste des épisodes. Si l'émission n'a qu'une saison et a/avait seulement six épisodes, ce flux sera court. Cependant, prenons le cas d'une de mes émissions préférées, Doctor Who. Doctor Who est une émission britannique qui, dans sa forme originale, a commencé en 1963 et a duré 26 saisons jusqu'en 1989. Sa première saison compte 42 épisodes, tandis que les autres saisons/séries ont environ 24 épisodes. Vous pouvez voir que vous pourriez avoir un ÉNORME flux à analyser. |
| |
====== RESULTATS ====== | ====== RESULTATS ====== |
<started>** | <started>** |
| |
Ce que nous obtenons après la demande de la liste des épisodes est indiqué sur la page suivante (en utilisant encore Buffy comme exemple) ; je vais juste utiliser une partie du flux pour vous montrer ce qu'on reçoit. | Ce que nous obtenons après la demande de la liste des épisodes est indiqué sur la page suivante (en utilisant encore Buffy comme exemple) ; je vais juste utiliser une partie du flux pour que vous ayez une bonne idée de ce qu'on reçoit. |
| |
Donc pour résumer, l'information dont nous avons vraiment besoin après la recherche de l'identifiant de l'émission à partir de son nom serait : | Pour résumer, donc, l'information dont nous avons vraiment besoin après la recherche de l'identifiant de l'émission à partir de son nom serait : |
<showid> | <showid> |
<name> | <name> |
Until then, have a good holiday season.** | Until then, have a good holiday season.** |
| |
Un petit « avertissement » ici. Le numéro de saison et les numéros des épisodes ne sont pas forcément ce à quoi vous pensez. Dans le cas des données de TVRage, le numéro de saison est le numéro de l'épisode dans la saison. Le numéro d'épisode est le numéro de cet épisode dans la durée de vie totale de la série. Le numéro de production est un numéro qui a été utilisé en interne pour la série et qui, pour beaucoup de gens, n'a pas vraiment de signification. | Un petit « avertissement » ici. Le numéro de saison et les numéros des épisodes ne sont pas forcément ce à quoi vous pensez. Dans le cas des données de TVRage, le numéro de saison est le numéro de l'épisode dans la saison. Le numéro d'épisode est le numéro de cet épisode dans la durée de vie totale de la série. Le numéro de production est un numéro qui a été utilisé en interne pour la série et qui, pour beaucoup de gens, n'a pas vraiment de signification. |
| |
Maintenant que nous avons rafraîchi notre mémoire sur la structure des fichiers XML et examiné les appels à l'API de TVRage, nous sommes prêts à commencer à coder, mais cela devra attendre jusqu'à la prochaine fois. | Maintenant que nous avons rafraîchi notre mémoire sur la structure des fichiers XML et examiné les appels à l'API de TVRage, nous sommes prêts à commencer à coder, mais cela devra attendre jusqu'à la prochaine fois. |