Help : Tuto netvibes ???

oli
Invité n'ayant pas de compte PHPfrance

16 août 2006, 18:01

Hello,
je suis à la recherche de liens vers des tuto permettant de développer des modules netvibes ? Vous avez ça en magasin ?

En fait j'ai remarqué que pas mal de modules allaient piocher des bouts de pages sur d'autres sites et se limitaient à de la simple remise en forme. Sur cette base, j'aimerai savoir comment ils font pour parser une pages HTML afin de ne récupérer que ce dont ils ont besoin...

a++

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

17 août 2006, 12:59

Bonjour,

En règle générale, la récupération d'informations sur un autre site se fait grace aux flux RSS que le site distant met à disposition.
Ces flux RSS ont un format normalisé qui permet de retrouver la même structure pour tous les flux d'informations.
Une recherche sur RSS sur Google te donnera bcp d'infos à ce sujet
Quand tout le reste a échoué, lisez le mode d'emploi...

oli
Invité n'ayant pas de compte PHPfrance

17 août 2006, 14:39

hello @rthur et merci pour ta réponse mais je reste intimement convaincu que certains modules ne se basent pas sur du RSS mais "aspirent" et "réinterprètent" un partie du code de pages HTML.

Par exemple pour moi, le module Programme TV s'appuie sur cette page >ici< et se charge de filtrer les programmes débutant après 20h30... 'fin c ce que je pense ;)

J'ai essayé de questionner le créateur du module en question par contre, il ne m'a pas répondu... pas très sympa le mec... :roll:

Ceci dit, je continue à mener l'enquête...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 août 2006, 15:03

Pour avoir développé une partie de http://www.tvmag.com, je peut t'assurer qu'il existe un flux RSS contenant les programmes télés. Je ne voit donc pas l'intéret de capturer une page et d'en extraire les infos vu qu'elles sont déjà disponibles dans un flux XML.


De plus, si les liens que tu nous donnes se ressemblent tant, c'est surement que l'un comme l'autre utilisent les mêmes flux ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 441 Messages

17 août 2006, 16:39

Saut ton respect mais as-tu déjà regardé ce qui était déjà proposé sur netvibes?
:)
Futures Stars par ici >> www.apel-doorn.com
fan d'info et du ... PSG !! :D
Apprendre, comprendre et maîtriser telle est ma devise!
Fan inconditionnel de netvibes

oli
Invité n'ayant pas de compte PHPfrance

17 août 2006, 16:57

Ce qui m'étonne quand même c'est que lorsque tu veux le détail d'une émission, tu es redirigé sur le site "www.programme-tv.net". C'est donc ce site qui sert de support au module. J'ai fait le tour du site et je n'ai pas trouvé de lien vers une récupération du programme en RSS...

un des autre module du même auteur permet de récupérer les résultat du Loto. Je suis allé faire un tour sur le site de la FdJ et il n'y a pas de flux RSS de dispo...

Je reste convaincu que la vérité est ailleurs...

Image

Invité
Invité n'ayant pas de compte PHPfrance

17 août 2006, 17:24

@starkeus : of course que je suis déjà allé sur NV (c même ce que j'ai fait en premier =D> ) par contre leur doc est supra light et ne répond pas à mes questions...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

17 août 2006, 17:34

Bah globalement voici le principe:

1) Tu récupères le code source de la page qui contient les informations
par exemple avec la fonction file_get_contents()
http://www.programme-tv.net/programme-t ... -soir.html

2) Ensuite tu regardes le code que tu récupères et tu essaye de repérer les "motifs" qui délimitent le contenu que tu souhaites extraire.
Dans notre cas, voici une ligne de contenu interessante:

Code : Tout sélectionner

<div class="prog"><h2><img src="http://images.programme-tv.net/img/chainesmall/19.gif" alt="Programme de ce jour : TF1"></h2><ul><li><a href="http://www.programme-tv.net/2006-08-17/1/5/340539/hertzien/commissaire-moulin--police-judiciaire.html" onclick="window.open(this.href);return false;">20:50 : Commissaire Moulin, police judiciaire <span class="normal"> (1h45mn) T&eacute;l&eacute;film policier</span></a></li><li><a href="http://www.programme-tv.net/2006-08-17/1/5/340540/hertzien/pas-de-vacances-pour-cauet.html" onclick="window.open(this.href);return false;">22:35 : Pas de vacances pour Cauet... <span class="normal"> (1h30mn) Divertissement</span></a></li></ul></div>
3) Maintenant, il ne reste plus qu'à extraire les infos utiles grace aux expréssions régulières aka regex (et c'est là que ça se complique ;) )
+ d'infos :
http://www.phpfrance.com/tutoriaux/inde ... pcre-ripat
http://www.phpfrance.com/tutoriaux/inde ... regulieres
http://www.expreg.com
Quand tout le reste a échoué, lisez le mode d'emploi...

oli
Invité n'ayant pas de compte PHPfrance

18 août 2006, 10:01

@rthur, je procéde déjà plus ou moins de la sorte (avec plus ou moins de succés :gla: ) mais ce qu'il me semble fou c'est d'avoir à ré-inventer la roue en développant un "pseudo parser" s'appuyant sur des regex...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

18 août 2006, 11:55

Bah ça ne me semble pas plus fou que ça...
Soit le site source utilise une sortie de données formatée style RSS, et alors là il existe des librairies toute faite.

Soit il n'y a rien de standard et alors il faut utiliser un regex pour extraire les infos utiles dans le code source.
Mais pour ce 2ème cas je vois mal comment une librairie pourrait être créée vu que le code HTML des pages sources est différents suivant chaque site...

Et il ne s'agit pas de réinventer la roue mais "simplement" d'écrire les bonnes regex suivant le code HTML du site source.
Quand tout le reste a échoué, lisez le mode d'emploi...

oli
Invité n'ayant pas de compte PHPfrance

18 août 2006, 12:12

bon ben si il faut mettre les mains dans le camboui, en avant !

:ordi:

crazymickey
Invité n'ayant pas de compte PHPfrance

21 août 2006, 10:17

Salut,

Je suis aussi en train de faire un module netvibes.
J'ai regardé la doc fourni sur netvibes, mais il est clair que ça manque d'explication sur le parse d'une page html pour extraire du contenu.

Le parse avec les regexp me semblent bien chaud.

Donc, j'essaie avec le domDocument de PHP pour extraire un div précis:
ob_start();
echo file_get_contents("http://www.yahoo.fr"); // par exemple
$display_episode = ob_get_contents();
ob_end_clean();

$domDoc = new DomDocument('1.0');
$domDoc->loadHTML($display_episode);
$domDoc->getElementById("mastheadbd");
echo $domDoc->saveHTML();
J'ai le droit à l'erreur suivante :
Fatal error: Call to undefined function: loadhtml()

alors que la librairie est installé :
domxml
DOM/XML enabled
DOM/XML API Version 20020815
libxml Version 20611
HTML Support enabled
XPath Support enabled
XPointer Support enabled
DOM/XSLT enabled
libxslt Version 1.1.7
libxslt compiled against libxml Version 2.6.11

@rthur, je serai interessé par qques extraits de tes sources sur le parse avec les regexp.

Merci à tous.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 août 2006, 12:03

Pour ton message d'erreur, es-tu bien en PHP5?


Sinon voici un exemple sur la page du programme TV qui a été donné ci dessus.
<?php

$contenu=file_get_contents("http://www.programme-tv.net/programme-tv-de-ce-soir.html");


preg_match_all("` alt=\"Programme de ce jour : (.*)\"></h2><ul><li><a href=\"(.*)\" onclick=\"window.open\(this.href\);return false;\">(.*)<span class=\"normal\"> \((.*)\) (.*)</span></a></li>`Ui", $contenu, $extract, PREG_PATTERN_ORDER);

print "<pre>";
print_r($extract);
print "</pre>";
?>
$extract[0] contient l'extrait complet qui correspond à l'ensemble du masque (inutile dans notre cas)
$extract[1] contient le nom de la chaîne
$extract[2] contient l'url vers la description du programme
$extract[3] contient l'heure de début et le nom du programme
$extract[4] contient la durée
$extract[5] contient le type d'émission

Bon c'est juste un regex basique, je n'ai demandé à récupérer que le 1er programme de chaque chaîne mais ça te donne le principe :)

Code : Tout sélectionner

[1] => Array ( [0] => TF1 [1] => France 2 [2] => France 3 [3] => Canal+ [4] => France 5 [5] => Arte [6] => M6 ) [2] => Array ( [0] => http://www.programme-tv.net/2006-08-21/1/5/343868/hertzien/femmes-de-loi.html [1] => http://www.programme-tv.net/2006-08-21/1/5/343383/hertzien/jeux-d-enfants.html [2] => http://www.programme-tv.net/2006-08-21/1/5/343423/hertzien/consomag.html [3] => http://www.programme-tv.net/2006-08-21/1/5/343202/hertzien/best-of-la-boite-a-questions.html [4] => http://www.programme-tv.net/2006-08-21/1/5/343472/hertzien/cia--guerres-secretes.html [5] => http://www.programme-tv.net/2006-08-21/1/5/343162/hertzien/le-journal-de-la-culture.html [6] => http://www.programme-tv.net/2006-08-21/1/5/343683/hertzien/kaamelott.html ) [3] => Array ( [0] => 20:50 : Femmes de loi [1] => 20:50 : Jeux d'enfants [2] => 20:18 : Consomag [3] => 20:05 : Best of «La Boîte à questions» [4] => 20:40 : CIA : guerres secrètes [5] => 20:00 : Le journal de la culture [6] => 20:40 : Kaamelott ) [4] => Array ( [0] => 1h45mn [1] => 1h35mn [2] => 2 mn [3] => 5 mn [4] => 55 mn [5] => 10 mn [6] => 10 mn ) [5] => Array ( [0] => Téléfilm policier [1] => Comédie sentimentale [2] => Magazine du consommateur [3] => Magazine de société [4] => Société [5] => Magazine culturel [6] => Série humoristique )
:arrow: Je rappelle toutefois que pour réutiliser un contenu ainsi récupéré, il est obligatoire légalement de demander l'autorisation au site sur lequel on récupère les données ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

crazymickey
Invité n'ayant pas de compte PHPfrance

21 août 2006, 12:25

Merci @rthur !

Ah il faut PHP5 ! cela n'était pas indiqué dans la doc de php.net

Merci pour ton code. Je vais voir comment appliquer les regexp sur ce site.

Merci.

oli
Invité n'ayant pas de compte PHPfrance

22 août 2006, 13:01

Image