Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
issue72:python [2013/08/25 12:51] – [8] andre_domenech | issue72:python [2013/08/25 15:46] (Version actuelle) – [8] auntiee |
---|
Series.0x00** | Series.0x00** |
| |
La dernière fois, nous avons commencé un projet qui utiliserait finalement le module de TvRage que nous avons créé le mois d'avant. Nous allons maintenant poursuivre ce projet. Cette fois, nous allons ajouter des fonctionnalités à notre programme : peaufiner la routine d'analyse de nom de fichier et ajouter deux champs (TvRageId et Etat) à la base de données. C'est parti ! | La dernière fois, nous avons commencé un projet qui finira par utiliser le module de TvRage que nous avons créé le mois d'avant. Nous allons maintenant poursuivre ce projet. Cette fois-ci, nous allons ajouter des fonctionnalités à notre programme : peaufiner la routine d'analyse de nom de fichier et ajouter deux champs (TvRageId et Etat) à la base de données. C'est parti ! |
| |
Tout d'abord, nous modifions nos lignes d'importation. Pour ceux qui viennent de nous rejoindre, je vais inclure ceux de la dernière fois (en haut à droite). | Tout d'abord, nous modifierons nos lignes d'importation. Pour ceux qui viennent de nous rejoindre, je vais inclure celles de la dernière fois (en haut à droite). |
| |
Les lignes après « import re » sont les nouvelles pour cette fois. | Les lignes après « import re » sont nouvelles. |
| |
La chose suivante que nous allons faire est de réécrire la routine RecupereSaisonEpisode. Nous allons jeter à peu près tout ce que nous avons fait le mois dernier, et le rendre plus souple à travers des schémas de saisons/épisodes possibles. Dans cette itération, nous serons en mesure de soutenir les schémas suivants... | La chose suivante que nous allons faire est de réécrire la routine RecupereSaisonEpisode. Nous allons jeter à peu près tout ce que nous avons fait le mois dernier et le rendre plus souple à travers des schémas possibles de saisons/épisodes. Dans cette itération, nous serons en mesure de soutenir les schémas suivants : |
| |
Série.S00E00 | Série.S00E00 |
S[5] = 06** | S[5] = 06** |
| |
Nous allons également corriger les problèmes de « zéro initial manquant » avant d'écrire dans la base de données. | Nous allons également corriger les problèmes éventuels de « zéro initial manquant » avant d'écrire dans la base de données. |
| |
Notre premier motif essaie d'attraper les fichiers multi-épisode. Il existe différents systèmes de nommage, mais celui que nous prenons en charge ressemble à 'S01E03.S01E04 ». Nous utilisons le modèle de chaîne « (.*)\.s(\d{1,2})e(\d{1,2})\.s(\d{1,2})e(\d{1,2}) ». Cela retourne (espérons-le) cinq groupes qui sont : le nom de la série (S[1]), la saison (S[2]), le numéro du premier épisode (S[3]), la saison (S[4]), et le numéro du deuxième épisode (S[5]). Rappelez-vous que les parenthèses créent les groupes retournés. Dans le cas ci-dessus, nous regroupons tout à partir du premier caractère jusqu'au « .s », puis deux chiffres, on passe le « e », puis deux chiffres, puis on recommence. Ainsi, le nom de fichier "Monk.S01E05.S01E06.avi" renvoie les groupes suivants... | Notre premier motif essaie d'attraper les fichiers multi-épisodes. Il existe différents systèmes de nommage, mais celui que nous prenons en charge ressemble à « S01E03.S01E04 ». Nous utilisons le modèle de chaîne « (.*)\.s(\d{1,2})e(\d{1,2})\.s(\d{1,2})e(\d{1,2}) ». Cela retourne (espérons-le) cinq groupes qui sont : le nom de la série (S[1]), la saison (S[2]), le numéro du premier épisode (S[3]), la saison (S[4]), et le numéro du deuxième épisode (S[5]). Rappelez-vous que les parenthèses créent les groupes retournés. Dans le cas ci-dessus, nous regroupons tout à partir du premier caractère jusqu'au « .s », puis deux chiffres, on passe le « e », puis deux chiffres, puis on recommence. Ainsi, le nom de fichier "Monk.S01E05.S01E06.avi" renvoie les groupes suivants : |
| |
S[1] = Monk | S[1] = Monk |
Again, the only thing that has changed from last time is the last two field definitions.** | Again, the only thing that has changed from last time is the last two field definitions.** |
| |
Nous utilisons uniquement des groupes S[1], S[2] et S[3] dans ce code, mais vous pouvez voir où nous allons avec cela. Si nous trouvons une correspondance, nous réglons une variable nommée "Continuer" à Vrai. Cela nous permet de savoir ce que nous devrions faire après que nous avons passé à travers les différents lignes If. | Nous utilisons uniquement des groupes S[1], S[2] et S[3] dans ce code, mais vous pouvez comprendre nos objectifs. Si nous trouvons une correspondance, nous réglons une variable nommée "Continuer" à Vrai. Cela nous permet de savoir ce que nous devrions faire après que nous soyons passés à travers les différentes lignes If. |
| |
Ainsi, la page suivante (en haut à droite) montre le code de la routine RecupereSaisonEpisode. | Ainsi, sur la page suivante (en haut à droite) se trouve le code de la routine RecupereSaisonEpisode. |
| |
Quand nous arrivons à ce point (page suivante, en bas à gauche) nous préparons le nom de l'émission en supprimant tous les points dans le nom de la série, puis extrayons les informations de la saison et de l'épisode des différents groupes, et les retournons. Pour l'information de saison, si nous avons un modèle comme « S00E00 », le numéro de saison aura un zéro. Mais si le modèle ressemble à « xxx », alors la saison est supposée être le premier caractère, et les deux suivants sont pour l'épisode. Afin d'être prévoyants, nous voulons que la saison soit un nombre à deux chiffres avec un zéro si nécessaire. | Quand nous arrivons à ce point (page suivante, en bas à gauche) nous préparons le nom de l'émission en supprimant tous les points dans le nom de la série, puis extrayons les informations de la saison et de l'épisode des différents groupes, et les retournons. Pour l'information de saison, si nous avons un modèle comme « S00E00 », le numéro de saison aura un zéro. Mais si le modèle ressemble à « xxx », alors la saison est supposée être le premier caractère, et les deux suivants sont pour l'épisode. Afin d'être prévoyants, nous voulons que la saison soit un nombre à deux chiffres avec un zéro au début si nécessaire. |
| |
Ensuite, dans notre routine FabriquerBase, nous allons modifier l'instruction SQL de création pour ajouter les deux nouveaux champs (page suivante, en haut). | Ensuite, dans notre routine FabriquerBase, nous allons modifier l'instruction de création SQL pour ajouter les deux nouveaux champs (page suivante, en haut). |
| |
Encore une fois, la seule chose qui a changé depuis la dernière fois ce sont les deux dernières définitions de champs. | Encore une fois, la seule chose qui a changé depuis la dernière fois, ce sont les deux dernières définitions de champs. |
| |
====== 4 ====== | ====== 4 ====== |
We are already over halfway done. Next are some support routines that work with our TvRage routine to fill in the database fields. Our first routine runs after the WalkThePath routine, and runs through the database, getting the series name and querying the TvRage server for the id number. Once we have that, we update the database, then use that id number to once again query TvRage to get the current status of the series. This status can be "New Series", "Returning Series", "Canceled", "Ended" and "On Haitus". The reason we want this information is that, when we go to check for new episodes, we don't want to bother with series that won't have any new episodes because they are cancelled. So, now we have the status and can write that to the database (above).** | We are already over halfway done. Next are some support routines that work with our TvRage routine to fill in the database fields. Our first routine runs after the WalkThePath routine, and runs through the database, getting the series name and querying the TvRage server for the id number. Once we have that, we update the database, then use that id number to once again query TvRage to get the current status of the series. This status can be "New Series", "Returning Series", "Canceled", "Ended" and "On Haitus". The reason we want this information is that, when we go to check for new episodes, we don't want to bother with series that won't have any new episodes because they are cancelled. So, now we have the status and can write that to the database (above).** |
| |
Dans notre routine ParcourirChemin, les seuls changements sont les lignes qui insèrent réellement dans la base de données. Ceci afin de supporter la nouvelle structure. Si vous vous souvenez de la dernière fois, nous passons le dossier qui contient les fichiers TV à cette routine. Dans mon cas, il y a deux dossiers, ils sont donc placés dans une liste et nous utilisons une boucle pour passer chacun à la routine. En passant par la routine, nous parcourons chaque répertoire à la recherche de fichiers avec des extensions .avi, .mkv, .mp4 et .m4v. Lorsque nous trouvons un fichier qui correspond, nous l'envoyons à la routine RecupereSaisonEpisode. Nous vérifions ensuite si nous l'avons déjà entré dans la base de données, et, sinon, nous l'ajoutons. Je vais vous donner (en haut à droite) seulement une partie de la routine du mois dernier. | Dans notre routine ParcourirChemin, les seuls changements sont les lignes qui sont réellement insérées dans la base de données, ceci afin de supporter la nouvelle structure. Si vous vous souvenez de la dernière fois, nous passons le dossier qui contient les fichiers TV à cette routine. Dans mon cas, il y a deux dossiers, ils sont donc placés dans une liste et nous utilisons une boucle pour passer chacun à la routine. En cours de la routine, nous parcourons chaque répertoire à la recherche de fichiers avec des extensions .avi, .mkv, .mp4 et .m4v. Lorsque nous trouvons un fichier qui correspond, nous l'envoyons à la routine RecupereSaisonEpisode. Nous vérifions ensuite si nous l'avons déjà entré dans la base de données et, sinon, nous l'ajoutons. Je vais vous donner (en haut à droite) seulement une partie de la routine du mois dernier. |
| |
Les deux lignes en noir sont nouvelles pour cette fois. | Les deux lignes en noir sont nouvelles. |
| |
Nous en sommes déjà à mi-chemin. Suivent quelques routines de support qui travaillent avec notre routine TvRage pour remplir les champs de la base. Notre première routine s'exécute après la routine ParcourirChemin, et parcours la base de données pour obtenir le nom de la série et interroge le serveur de TvRage avec le numéro d'identification. Une fois que nous avons cela, nous mettons à jour la base de données, puis utilisons ce numéro d'identification sur TvRage à nouveau pour obtenir l'état actuel de la série. Cet état peut être « New Series », « Returning Series », « Canceled », « Ended » et « On Haitus » (série nouvelle, de retour, annulée, terminée, en pause). La raison pour laquelle nous voulons cette information est que, lorsque nous allons vérifier les nouveaux épisodes, nous ne voulons pas nous embêter avec des séries qui n'auraient pas de nouveaux épisodes parce qu'elles sont annulées. Donc, maintenant nous avons l'état et pouvons l'écrire dans la base de données (ci-dessus). | Nous en sommes déjà à mi-chemin. Suivent quelques routines de support qui fonctionnent avec notre routine TvRage pour remplir les champs de la base. Notre première routine s'exécute après la routine ParcourirChemin, et parcourt la base de données pour obtenir le nom de la série et interroger le serveur de TvRage pour obtenir le numéro d'identification. Une fois que nous avons cela, nous mettons à jour la base de données, puis utilisons à nouveau le numéro d'identification sur TvRage pour obtenir l'état actuel de la série. Cet état peut être « New Series », « Returning Series », « Canceled », « Ended » et « On Haitus » (série nouvelle, de retour, annulée, terminée, en pause). La raison pour laquelle nous voulons cette information est que, lorsque nous allons vérifier les nouveaux épisodes, nous ne voulons pas nous embêter avec des séries qui n'auraient pas de nouveaux épisodes parce qu'elles sont annulées. Ainsi, nous en avons maintenant l'état et pouvons l'écrire dans la base de données (ci-dessus). |
| |
====== 5 ====== | ====== 5 ====== |
searchname = string.capwords(x[0]," ")** | searchname = string.capwords(x[0]," ")** |
| |
Nous allons nous arrêter ici dans notre code et regarder la requête SQL que nous utilisons. C'est un peu différent de tout ce que nous avons fait avant. La chaîne est : | Nous allons nous arrêter ici dans notre code pendant un instant pour regarder la requête SQL que nous utilisons. C'est un peu différent de tout ce que nous avons fait auparavant. La chaîne est : |
| |
SELECT DISTINCT Serie FROM EmissionsTV WHERE tvrageid = -1 | SELECT DISTINCT Serie FROM EmissionsTV WHERE tvrageid = -1 |
GetShowStatus (above) is also very simple. We call the GetShowInfo routine from the TvRage library by passing the id that we just got to TvRage – to get the series information. If you remember, there is a lot of information provided about the series from TvRage, but all we are concerned about at this point is the show status. Since everything is returned in a dictionary, we just look for the [‘Status’] key. Once we have it, we update the database with that and move on.** | GetShowStatus (above) is also very simple. We call the GetShowInfo routine from the TvRage library by passing the id that we just got to TvRage – to get the series information. If you remember, there is a lot of information provided about the series from TvRage, but all we are concerned about at this point is the show status. Since everything is returned in a dictionary, we just look for the [‘Status’] key. Once we have it, we update the database with that and move on.** |
| |
Nous utilisons la routine capwords de la bibliothèque string pour changer le nom de la série (x[0]) « de façon correcte » puisque nous stockons les noms de émissions en majuscules. Nous faisons cela parce que TvRage s'attend à quelque chose d'autre que uniquement des majuscules, et nous n'obtenons pas les résultats que nous recherchons. Ainsi, le nom de la série « THE MAN FROM UNCLE » sera converti en « The Man From Uncle ». Nous utilisons cela dans l'appel à la fonction TrouverIdParNom de notre bibliothèque TvRage. Cela récupère la liste des émissions correspondantes, et les affiche pour qu'on choisisse la meilleure. Une fois que nous choisissons une, nous mettons à jour la base de données avec le numéro d'identification puis appelons la routine RecupererEtatEmission pour obtenir le statut en cours depuis TvRage (en bas à droite). | Nous utilisons la routine capwords de la bibliothèque string pour changer le nom de la série (x[0]) « de façon correcte » puisque nous stockons les noms des émissions en majuscules. Nous faisons cela parce que TvRage s'attend à recevoir quelque chose d'autre que des seules majuscules et nous n'obtiendrons pas les résultats que nous recherchons. Ainsi, le nom de la série « THE MAN FROM UNCLE » sera converti en « The Man From Uncle ». Nous utilisons cela dans l'appel à la fonction TrouverIdParNom de notre bibliothèque TvRage. Cela récupère la liste des émissions correspondantes et les affiche pour qu'on choisisse la meilleure. Une fois que nous en avons choisi une, nous mettons à jour la base de données avec le numéro d'identification, puis appelons la routine RecupererEtatEmission pour obtenir le statut en cours depuis TvRage (en bas à droite). |
| |
La routine MettreAJourBase (en haut) utilise simplement le nom de la série comme clé pour mettre à jour tous les enregistrements avec l'ID approprié de TvRage. | La routine MettreAJourBase (en haut) utilise simplement le nom de la série comme clé pour mettre à jour tous les enregistrements avec l'ID approprié de TvRage. |
| |
RecupererEtatEmission (ci-dessus) est également très simple. Nous appelons la routine TrouveInfoEmission de la bibliothèque TvRage en passant l'id que nous venons de récupérer de TvRage - pour obtenir l'information sur la série. Si vous vous souvenez, TvRage fournit beaucoup d'informations sur la série, mais tout ce qui nous intéresse à ce stade est l'état de l'émission. Puisque tout est retourné dans un dictionnaire, il nous suffit de chercher la clé ['Etat']. Une fois que nous l'avons, nous mettons à jour la base de données avec, et passons à autre chose. | RecupererEtatEmission (ci-dessus) est également très simple. Nous appelons la routine TrouveInfoEmission de la bibliothèque TvRage en passant l'id que nous venons de récupérer de TvRage pour obtenir l'information sur la série. Si vous vous souvenez, TvRage fournit beaucoup d'informations sur la série, mais tout ce qui nous intéresse à ce stade est l'état de l'émission. Puisque tout est retourné dans un dictionnaire, il nous suffit de chercher la clé ['Etat']. Une fois que nous l'avons, nous mettons à jour la base de données avec, puis passons à autre chose. |
| |
====== 7 ====== | ====== 7 ====== |
.AVI, .MKV, .M4V, .MP4 | .AVI, .MKV, .M4V, .MP4 |
| |
Lorsque nous en trouvons un, nous essayons d'analyser le nom du fichier à la recherche d'un nom de série, numéro de saison, et numéro d'épisode. Nous prenons cette information et la mettons dans une base de données, si elle n'existe pas déjà. | Lorsque nous en trouvons un, nous essayons d'analyser le nom du fichier à la recherche d'un nom de série, d'un numéro de saison et d'un numéro d'épisode. Nous prenons cette information et la mettons dans une base de données, si elle n'y existe pas déjà. |
| |
====== 8 ====== | ====== 8 ====== |
Next time we will continue with the integration with TvRage. Until then have a great month!** | Next time we will continue with the integration with TvRage. Until then have a great month!** |
| |
Tans que nous recherchons les fichiers, nous interrogeons la base de données à la recherche de noms de séries qui n'ont pas d'ID TvRage associé. Nous interrogeons alors l'API TvRage et demandons des fichiers correspondants pour trouver cet ID. Chaque série va passer par cette étape une fois. La capture d'écran ci-dessous montre les options pour, dans ce cas, la série « Midsomer Murders ». | Après avoir recherché les fichiers, nous interrogeons la base de données à la recherche de noms de séries pour lesquelles il n'y a pas d'ID TvRage associé. Nous interrogeons alors l'API TvRage et demandons des fichiers correspondants pour trouver cet ID. Chaque série va passer par cette étape une fois. La capture d'écran ci-dessous montre les options pour, dans ce cas, la série « Midsomer Murders ». |
| |
J'ai saisi (dans ce cas) 1, qui associe cette série avec l'ID TvRage 4466. Il est entré dans la base de données, et nous utilisons alors cet ID pour demander l'état actuel de la série, toujours sur TvRage. Dans ce cas, on nous renvoie « Returning Series ». L'état est alors entré dans la base de données et nous continuons. | J'ai saisi (dans ce cas) 1, qui associe cette série avec l'ID TvRage 4466. Il est entré dans la base de données, et nous utilisons alors cet ID pour demander l'état actuel de la série, toujours sur TvRage. Dans ce cas, on nous renvoie « Returning Series ». L'état est alors entré dans la base de données et nous continuons. |
| |
Le passage initial dans la base de données prendra un certain temps et nécessitera votre attention, parce que chaque série doit poser des questions sur le numéro d'identification correspondant. La bonne nouvelle est que ceci ne doit être fait qu'une seule fois. Si vous êtes « normal », vous n'en aurez pas tant que ça à traiter. J'ai eu 157 séries différentes à passer, donc il a fallu un peu de temps. Comme j'ai été prudent lorsque j'ai saisi mes noms de fichiers (en vérifiant sur TvRage et TheTvDB.com pour avoir la formulation correcte du nom de la série), la majorité des réponses ont été l'option n° 1. | Le passage initial dans la base de données prendra un certain temps et nécessitera votre attention, parce que chaque série doit poser des questions sur le numéro d'identification correspondant. La bonne nouvelle est que ceci n'est fait qu'une seule fois. Si vous êtes « normal », vous n'en aurez pas tant que ça à traiter. J'ai eu 157 séries différentes à passer et il a donc fallu un peu de temps. Comme j'ai été prudent lorsque j'ai saisi mes noms de fichiers (en vérifiant sur TvRage et TheTvDB.com pour avoir la formulation correcte du nom de la série), la majorité des réponses a été l'option n° 1. |
| |
Juste pour votre information, plus de la moitié des séries télévisées que j'ai sont terminées ou ont été annulées. Cela devrait vous dire quelque chose sur mon âge approximatif. | Juste pour votre information, plus de la moitié des séries télévisées que j'ai sont terminées ou ont été annulées. Cela devrait vous donner une idée de mon âge approximatif. |
| |
Le code complet est, comme toujours, disponible sur Pastebin : http://pastebin.com/DgwmTMHr [NdT: code traduit par l'équipe francophone]. Pour le code original, voir avec l'URL en vo. | Le code complet est, comme toujours, disponible sur Pastebin : http://pastebin.com/DgwmTMHr [NdT: code traduit par l'équipe francophone. Pour le code original, voir http://pastebin.com/MeuGyKpX.] |
| |
La prochaine fois, nous continuerons l'intégration avec TvRage. D'ici-là, passez un bon mois ! | La prochaine fois, nous continuerons l'intégration avec TvRage. D'ici là, passez un bon mois ! |