I Has A Bug (le blog de jye)
Retour au blog <<

TV Shows : Mon module Netvibes (3ème partie)

Lundi 14 janvier 2008 à 14 h 25
Précédemment sur ce blog:

Nous avons donc deux types de données à récupérer :

- La liste des séries actuelles qui est disponible sur cette page : http://epguides.com/menu/current.shtml.
- La liste des épisodes pour une série : http://epguides.com/Lost/.

Le traitement des données se fera donc en PHP. J’expliquerai sur mon prochain billet comment je récupère ces données (terminé) et on se penchera sur le design du widget (en cours).




Nous allons d'abord nous pencher sur la récupération des séries actuelles. J'ai décidé (ce n'est pas forcement le meilleur choix, à vrai dire, il serait plus logique de récupérer cette liste avec un fichier XML, mais je voulais tester le getFeed de l'UWA) de récupérer la liste des séries en cours via un fichier RSS. Tout d'abord pour récupérer une page distante via mon serveur, je dois passer par un proxy. J'ai donc choisit de récupérer sur le net une classe PHP gérant déjà ça : Class_Http et Proxy de Troy Wolf.

La première étape est d'ouvrir la page distante en lecture :

$dataFile = fopen("http://domain.com/proxy.php?proxy_url=http://epguides.com/menu/current.shtml", "r");

Etant donné que je souhaite produire un fichier RSS au final, j'indique les informations nécessaires afin que mon navigateur comprenne bien qu'il lit un fichier RSS :

header('Content-type: application/rss+xml');

echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>
<rss version=\"2.0\" xmlns:atom=\"http://www.w3.org/2005/Atom\">
<channel>
<title>epguides.com - Current US TV Shows</title>
<description>Current US TV Shows from epguides.com RSS feed</description>
<language>en-us</language>
<ttl>60</ttl>
<link>http://domain.com</link>
<atom:link href=\"http://domain.com/getShows.php\" rel=\"self\" type=\"application/rss+xml\" />";

Une fois le début de fichier déclaré, on passe au listing d'items en soi. Je vais donc parcourir ma page html et récupérer les informations qui m'intéressent afin de les injecter dans mon flux RSS.

/** On vérifie l'ouverture du fichier **/
if ( $dataFile )
{
/** On indique que le parsing ne doit pas encore commencer **/
$parsing = false;

/** On lit le fichier jusqu'au bout **/
while (!feof($dataFile))
{
/** On récupère ligne par ligne **/
/** Exemple : <li><b><a href="../Lost/">Lost</a></b> [on hiatus] <span class='red'>returns Jan 31</span></li> **/
$buffer = fgets($dataFile, 4096);

/** Si le parsing est enclenché **/
if($parsing) {
/** On check la présence de "<li><b>" présentes avant chaque titre de série **/
if(stripos($buffer, '<li><b>')!== false) {

/** On récupère dans la ligne $buffer le contenu de <li><b> à la fin de la ligne **/
/** $tvshow = <li><b><a href="../Lost/">Lost</a></b> [on hiatus] <span class='red'>returns Jan 31</span></li> **/
$tvshow = strstr($buffer, '<li><b>');

/** Tableau des string à supprimer **/
$delete = array("<li><b><a href=\"../", "/\">");

/** On supprime <li><b><a href=\"../ de la ligne **/
$toprint = str_replace($delete[0], "", $tvshow);
/** On supprime /\"> de la ligne **/
$toprint = str_replace($delete[1], " - ", $toprint);

/** $toprint = Lost - Lost</a></b> [on hiatus] <span class='red'>returns Jan 31</span></li> **/

/** On récupère la position de </a></b> afin de récupérer seulement ce qui se trouve avant **/
/** Après exécution du substr $toprint = Lost - Lost **/
$pos = stripos($toprint, "</a></b>");
$toprint = substr($toprint, 0, $pos);

/** On génère l'item RSS avec : **/
/** - pour lien http://jeremyselier.com/apis/getEpisodes.php?show=Lost (id série pour epguides.com) qui me permet de récupérer la liste des épisodes **/
/** - pour titre Lost (ce qui se situe après " - ") **/
/** - pour lien guid (id unique) domain.com-Lost **/
/** - pour description l'id série d'epguides.com : Lost **/
echo "\n<item>\n\t<link>http://jeremyselier.com/apis/getEpisodes.php?show=".substr($toprint, 0, strpos($toprint, " - "))."</link>\n\t<title>".substr($toprint, strpos($toprint, " - ")+3)."</title>\n\t<guid>domain.com-".substr($toprint, 0, strpos($toprint, " - "))."</guid>\n\t<description>".substr($toprint, 0, strpos($toprint, " - "))."</description>\n</item>";
}
}

/** Lorsqu'on trouve la phrase 'Shortcuts to sections of this page:' on indique que le parsing peut commencer **/
if(stripos($buffer, 'Shortcuts to sections of this page:')!== false) $parsing = true;

}

echo "\n";

/** On ferme le fichier **/
fclose($dataFile);
}
else
{
die( "fopen failed" ) ;
}


Et voilà le résultat : getShows.php. Cela va me permettre, dans mon widget, de remplir un select qui contiendra toutes les séries actuelles. Le site étant fiable, si une série vient à être créée ou supprimée, il en sera de même automatiquement dans ma liste.

Penchons-nous maintenant sur le design du widget : Celui est assez basique, voici une liste de screenshots :



La fonction "Vu/Non vu" n'est pas encore mise en place car je ne sais pas encore comment l'implémenter (des idées ?). La prochaine fois, j'expliquerais comment je récupère la liste des épisodes qui m'intéresse et le fonctionnement de mon widget en UWA. Et vous pourrez normalement commencer à beta-tester le widget pour m'aider à le debugger. Si vous avez des choses à me dire afin d'améliorer ce widget, n'hésitez pas !
Lundi 14 janvier 2008 à 15 h 04
question bete mais ... ca t'indiquera sur quelle chaine est telle série ?

J'ai récupéré pas mal de modules netvibes mais aucun ne le fait (donc quand je vois qu'il y a les experts, je suis obligé de regarder sur laquelle des 32 chaines il est diffusé ...)
par jye
Lundi 14 janvier 2008 à 15 h 12
Alors attention on parle bien de diffusion US, donc de chaines US, ça ne liste pas les séries qui passent en France, Suisse ou n'importe quel autre pays. Et non ça n'affiche pas la chaîne. Si tu cliques sur "Fiche TV.com" tu pourras voir la chaîne mais j'avoue que ce n'est pas direct. Je peux trés bien rajouter la chaîne (les horaires c'est BEAUCOUP plus compliqué par contre) mais j'ai peur de charger le module enfin pourquoi pas le caller après le titre de l'épisode.
Lundi 14 janvier 2008 à 15 h 19
Ok, non c'est juste que je cherche un module qui me prévienne à l'avance quand une série que je suis va etre diffusée, et qu'il précise la chaine.
J'avais pas compris que ton but était différent (chaines US toussa) !
par Wraxou
Lundi 14 janvier 2008 à 15 h 20
Putain c'est génial comme module ! J'imagine même pas la perte de temps à la recherche des derniers épisodes que cela va m'enlever. Je suis chaud à fond pour t'aider à bêta tester ton module franchement;
par jye
Lundi 14 janvier 2008 à 15 h 23
Désolé je n'ai peut être pas été assez clair. Le widget est en effet destiné aux gens qui suivent les séries US et savoir leur date de diffusion aux US et accessoirement pourvoir acceder à un moteur de recherche (bt au hasard) avec les mots clefs "titre série sXXeXX".

Si tu souhaites un widget qui t'affiche les séries en France et leur date de diffusion + chaînes en France (ou un autre pays). Je pourrais très bien adapter ce widget une fois terminé. Par contre il me faut un site de qualité permettant de récuperer toutes les infos (comme le fait epguides.com pour les séries US). Si tu as ça, et bien je pourrais te faire ça.
par Per
Lundi 14 janvier 2008 à 15 h 29
Vraiment très bien ce "tutoriel", et ton widget est intéressant. Vivement qu'il soit dispo !
Juste une question : ça se fait de pomper le contenu d'un site, comme ça, à l'insu du créateur ?
Lundi 14 janvier 2008 à 16 h 57
hmm, pour l'instant j'ai ZguideTv qui utilise un guide EPG à base de fichiers xml mis à jour régulièrement ... je peux te filer ca en rentrant chez moi demain.
Lundi 14 janvier 2008 à 22 h 08
Pour les utilisateurs mac il existe un programme nommé TV Shows qui est un daemon qui vérifie tout les X temps si une série est sortie aux us, si vous êtes inscrits à cette série, le téléchargement se lance de lui même avec votre client torrent par défaut. Il me semble que se programme se base également sur les flux RSS essaie de voir sur leur sites si le logiciel est open source.
Lundi 14 janvier 2008 à 23 h 21
merci.

un complément avec les liens .str vers subway ou ssub serait le top du top..
pr l'instant le seul widget de série que j'utilise c'est celui de subway, alors un mixe serait parfait

pr le vu/pas vu, pourquoi pas la couleur ? sélèctionné a l'avance dans une liste 2x01, 2x02, 2x03 les épisodes, et enfin lors de la diffusion, si "déjà vu" en bleu ou autre..
par un Anonyme
Mardi 15 janvier 2008 à 11 h 55
J'ai pas tout lu mais est-ce qu'il y aura une option pour tout afficher par défaut, et enlever ce qu'on veut pas ? Plutot que d'ajouter une par une tout ce qu'on veut ... moi j'en mate plein des séries, pas 7 ou 8 :/
par jye
Mercredi 16 janvier 2008 à 00 h 31
@Per : j'ai mailé les types avant et ils s'en branlent.

@Caroline : Le soucis c'est que tu utilises un programme TV classique, pour mon widget j'ai besoin d'une liste de série (il me faudrait donc une liste de série qui passe en françe/suisse/whatever ainsi que le programme, là j'ai que le programme).

@Gonzague : Super interessant, je vais du coup surement me pencher pour en faire une version Windows. J'ai récuperer le code source et ça n'a pas l'air trés complexe. Ils se basent entierement sur les flux rss des teams qui release (selon eux) toutes les séries. Mon widget se base sur TOUTES les séries sans exception, qu'elles soient ripper par des teams ou non.

@GiovanniPanzani : Ca peut etre sympa en effet de rajouter un truc pour les sous-titres, j'y reflechirais. Peux tu me linker le widget subway ? En ce qui concerne le vu/pas vu. J'expliquerai comment je vois les choses dans le prochain poste.

@Anon : Vu le nombre de série en tout, non tu ne pourras pas TOUT afficher, tu devras surement te taper les 20 séries à ajouter. Mais une fois que ca sera fait tu n'auras rien à refaire.
par un Anonyme
Mercredi 16 janvier 2008 à 10 h 35
En fait c'est juste un flux rss pour sub-way...: http://www.sub-way.fr/rss.xml
par un Anonyme
Jeudi 17 janvier 2008 à 09 h 27
ouai non mais c'est pas 20 séries que je mate ... je dois en avoir 130 différentes sur mon hd :p
Et j'aime bien voir tout ce qui passe pour repérer les nouveaux trucs et les choper :)
par jye
Mercredi 30 janvier 2008 à 15 h 07
Tu mates 130 séries qui passent actuellement à la television US ? Chapeau... Ce widget est pas vraiment fait pour ça alors, je t'avouerai que j'ai jamais imaginé qu'on pouvait suivre autant de séries...
Tout le monde peut publier un commentaire, vous n'avez pas besoin de compte (dans ce cas votre commentaire ne sera publié qu'une fois validé par le propriétaire du blog)

Commenter

Tags autorisés : [b] [/b], [i] [/i], [u] [/u], [code] [/code], [img]Adresse d'une image[/img], [url=Adresse d'un site web] [/url]
Vous pouvez aligner vos images à droite ou à gauche en modifiant le tag [img] comme ceci : [img right] ou [img left].

Pour vos vidéos/animations flash : [video]Adresse d'une animation[/video], pour préciser la largeur et hauteur : [video width=100 height=200]...[/video]