#1 2009-04-20 19:00:12

draco31.fr
Member
Registered: 2008-12-27
Posts: 23

[FR] Import fiches séries depuis Allocine ... besoin d'aide pour débug

Bonjour à tous,

Ce week-end, j'ai voulu comprendre comment créer un module d'import web pour GCStar.
J'ai voulu adapter le plugin Allocine existant pour importer les fiches séries.

Comme je ne connais pas bien la syntaxe perl, et encore moins la POO, j'ai fais ce que j'ai pu avec mon éditeur de texte favoris (BlueFish).
La coloration syntaxique ne fait pas ressortir de problème, mais pour autant, dès que je copie le module dans le dossier /usr/lib/gcstar/GCPlugins/GCfilms ; GCStar refuse de se lancer et affiche le message suivant :

Code:

/home/draco/Listes Catalogues/DVD.gcs

Fatal error while reading file

Fatal error with plugin GCAllocineSeries
 : Undefined subroutine &GCPlugins::GCfilms::GCPluginAllocineSeries::new called at (eval 882) line 1.

Je suis vraiment motivé pour comprendre et écrire des plugins, mais là j'ai vraiment besoin d'un coup de main.

De plus, peut-être disposez vous d'un débugger perl permettant de tester le module en pas à pas ?
A moins que GCStar dispose de ce genre d'outil en interne ?
(je viens du monde AMC, où l'écriture de script est facilité par le debugger intégré ...)

Merci d'avance à celui ou celle qui m'aidera !

PS : J'utilise le modèle "GCfilms" pour l'instant, mais je pense migrer le module vers le modèle "GCTVserie" dès qu'il sera validé, et stabilisé !


Attachments:
Attachment Icon GCAllocineSeries.pm, Size: 9,246 bytes, Downloads: 253

Offline

 

#2 2009-04-20 20:47:21

Tian
Administrator
From: France
Registered: 2006-12-08
Posts: 1647
Website

Re: [FR] Import fiches séries depuis Allocine ... besoin d'aide pour débug

Bonjour,

Un debugger ne sera pas utile, car il s'agit ici de problèmes de compilation. Il y a quelques erreurs dans le code. Un moyen assez simple de les voir et de se mettre dans le répertoire où se trouve le plugin et de lancer cette commande :

perl -I../.. -c GCAllocineSeries.pm

Le -I../.. indique où se trouve le répertoire de base où chercher tous les modules nécessaires. Le -c indique d'uniquement compiler et reporter les erreurs de syntaxe.

La 1ère des 2 principales erreurs ici est l'utilisation de $attr dans la méthode text alors que cette variable n'y est pas présente. Les attributs ne sont disponibles qu'en paramètres de start. Il faudrait donc stocker ailleurs ceux qui sont nécessaires, ou faire le test nécessaire au moment du start et se souvenir dans un attribut de l'objet que l'on est dans cette situation.

L'autre est l'utilisation d'une variable $temp qui n'a pas été "déclarée" avant. Le code perl ici utilise toujours "use strict". On ne peut donc pas utiliser une variable directement. Il faut dans ce cas ajouter un "my $temp;" avant la 1ère utilisation de chaque bloc.

Merci beaucoup pour passer du temps à écrire ce plugin. Si quelque chose n'est pas clair, j'essayerai d'ajouter des précisions.

Offline

 

#3 2009-04-24 22:49:11

draco31.fr
Member
Registered: 2008-12-27
Posts: 23

Re: [FR] Import fiches séries depuis Allocine ... besoin d'aide pour débug

Merci Tian pour ton aide !

Un debugger me serait utile pour pouvoir connaître la valeur des variables et le code qui est exécuté (if/else ...)
Cependant, je m'en suis sorti avec quelques "print" bien placé !

Voici donc le module finalisé.
C'est loin d'être du bon code perl, mais il fait ce qu'on lui demande.

Il reste quelque champs qui ne sont pas importés, comme la note de la presse.

Lorsque le template "Série" sera finalisé, je prévois d'adapter ce plugin pour ce dernier.
Cependant, j'aurais alors besoin de parser plusieurs pages pour récupérer les infos générales, et les infos sur une saisons données.
Je ne sais pas vraiment comment on fait ça, mais je crois que les scripts pour TVdb le font.


Pour le template actuel (films), ça pourrait être interessant à terme de fusionner les 2 modules Allociné (films et série) sinon j'ai peur que l'on rencontre un problème lorsque l'on fait glisser une url dans GCStar (quel module va-t-il prendre ?)

En attendant vos retours ...


Attachments:
Attachment Icon GCAllocineSeries.pm, Size: 10,731 bytes, Downloads: 299

Offline

 

#4 2009-05-05 17:44:48

Tian
Administrator
From: France
Registered: 2006-12-08
Posts: 1647
Website

Re: [FR] Import fiches séries depuis Allocine ... besoin d'aide pour débug

Bonjour,

Merci beaucoup pour tout ce travail.

draco31.fr wrote:

Un debugger me serait utile pour pouvoir connaître la valeur des variables et le code qui est exécuté (if/else ...)
Cependant, je m'en suis sorti avec quelques "print" bien placé !

Honnêtement, les cas où j'ai vraiment eu besoin d'un débugger ont vraiment été rares. Et finalement avec des print on s'en sort bien souvent avec les languages interprétés.

Lorsque le template "Série" sera finalisé, je prévois d'adapter ce plugin pour ce dernier.

Malheureusement, je n'ai plus trop de nouvelles de Zombiepig qui avait commencé à s'en charger. Il y a déjà dans GCstar celui qui est orienté épisodes. Mais la version orientée séries est toujours en suspens.

Alors si quelqu'un veut y faire des changements, ne pas hésiter.

Cependant, j'aurais alors besoin de parser plusieurs pages pour récupérer les infos générales, et les infos sur une saisons données.
Je ne sais pas vraiment comment on fait ça, mais je crois que les scripts pour TVdb le font.

L'idée est d'utiliser cette méthode :

$self->loadPage($url, 0, 1);

Le 1er paramètre est l'adresse à utiliser. Le 2nd indique si la requête est de type GET (0) ou POST (1). Et le dernier devrait toujours être 1 dans le cas où c'est un plugin qui l'appelle explicitement (il faudrait que je change ça d'ailleurs, c'est une source d'erreur wink ).

Cela retourne tout le contenu de la page dans une chaîne de caractère. Il faut donc ensuite manuellement en extraire l'information utile.

Pour le template actuel (films), ça pourrait être interessant à terme de fusionner les 2 modules Allociné (films et série) sinon j'ai peur que l'on rencontre un problème lorsque l'on fait glisser une url dans GCStar (quel module va-t-il prendre ?)

Effectivement; cela va poser problème. Je pense qu'il va prendre celui dont le nom vient en 1er alphabétiquement, mais il n'y a pas de garantie là-dessus. Donc c'est un peu embêtant d'intégrer le plugin pour l'instant.

Offline

 

#5 2009-05-05 19:18:14

draco31.fr
Member
Registered: 2008-12-27
Posts: 23

Re: [FR] Import fiches séries depuis Allocine ... besoin d'aide pour débug

Tian wrote:

Bonjour,

Merci beaucoup pour tout ce travail.

De rien, je l'ai fais pour mon usage perso au départ, mais autant en faire profiter tout le monde !

Tian wrote:

Lorsque le template "Série" sera finalisé, je prévois d'adapter ce plugin pour ce dernier.

Malheureusement, je n'ai plus trop de nouvelles de Zombiepig qui avait commencé à s'en charger. Il y a déjà dans GCstar celui qui est orienté épisodes. Mais la version orientée séries est toujours en suspens.

Alors si quelqu'un veut y faire des changements, ne pas hésiter.

Je verrais ça à l'occasion, mais d'abord je dois mieux comprendre le principe de modèle de collection !
J'ai déjà envie d'ajouter un champs "nombre total d'épisode dans la saison" et un champs "dernier épisode vue ...". Reste à trouver le temps pour faire les modifs.


Tian wrote:

Cependant, j'aurais alors besoin de parser plusieurs pages pour récupérer les infos générales, et les infos sur une saisons données.
Je ne sais pas vraiment comment on fait ça, mais je crois que les scripts pour TVdb le font.

L'idée est d'utiliser cette méthode :

$self->loadPage($url, 0, 1);

Le 1er paramètre est l'adresse à utiliser. Le 2nd indique si la requête est de type GET (0) ou POST (1). Et le dernier devrait toujours être 1 dans le cas où c'est un plugin qui l'appelle explicitement (il faudrait que je change ça d'ailleurs, c'est une source d'erreur wink ).

Cela retourne tout le contenu de la page dans une chaîne de caractère. Il faut donc ensuite manuellement en extraire l'information utile.

Tu veux dire que l'on ne passera par dans les méthodes "standard" du parsing HTML : start, end, text ???

De plus, je ne sais pas comment afficher un menu intermédiaire pour choisir la saison.
En fait c'est comme si on devait remplir la "parsingList" deux fois :
* une première fois pour le choix de la série
* une seconde fois pour le choix de la saison

J'ai vu que le plugin GCTVepisode renvoyait 2 à getNumberPasses  au lieu de 1 par défaut ... et que dans la suite du code, on teste : "$self->{pass} eq 1".
Mais je ne vois pas d'appel à "loadPage", donc je comprends pas comment marche le plugin ... mais je vais trouver !!!


Tian wrote:

Pour le template actuel (films), ça pourrait être intéressant à terme de fusionner les 2 modules Allociné (films et série) sinon j'ai peur que l'on rencontre un problème lorsque l'on fait glisser une url dans GCStar (quel module va-t-il prendre ?)

Effectivement; cela va poser problème. Je pense qu'il va prendre celui dont le nom vient en 1er alphabétiquement, mais il n'y a pas de garantie là-dessus. Donc c'est un peu embêtant d'intégrer le plugin pour l'instant.

Le plus "pratique" serait que le plugin renvoi une liste contenant les films et les séries dans le même tableau ... ensuite en testant la présence du mot "series" dans l'url on saurait si on traite en mode film ou série.
Par contre, la première page, films+série ne renvoie que peut de résultats pour chacun... donc ça restreindrait le choix par rapport à actuellement.
Cela dit, ça pose déjà des problèmes pour les titres ayant des mots fréquemment rencontrés (cas de "mirrors" indiqué dans un autre topic) où seule la première page de résultat est analysée ...

Offline

 



Should you have a problem using GCstar, you can open a bug report or request some support on GCstar forums.