Parsing à distance (2/3)
On va créer une classe chargée de récupérer les informations
que l'on recherche. C'est absolument pas necessaire de créer une classe
pour ça, ici elle est même plutôt gênante car elle va nous obliger à
parcourir le fichier plusieurs fois mais c'est pour montrer comment
fonctionne une classe. On va placer cette classe dans le fichier
parser.php
<?php class parser {
var $filename;
function
parser($filename)
{ $this->filename=$filename; }
function get_date()
{ $file=fopen($this->filename,"r"); if (!$file) { echo "<p>Impossible d'ouvrir le
fichier</p>.\n"; exit; }
$line=fgets($file,1024); while(!strstr($line,"Tirages"))
{ $line=fgets($file,1024); } fclose($file); ereg("<br>([^<]*)</b>",$line,$no); return $no[1]; }
function
get_1er_tirage()
{ $file=fopen($this->filename,"r"); if (!$file) { echo "<p>Impossible d'ouvrir le
fichier</p>.\n"; exit; }
while(!strstr($line,"PREMIER")) { $line=fgets($file,1024); } while (count($result)!=7)
{ if (ereg("/([0-9]*).gif",$line,$no)) $result[]=$no[1]; $line=fgets($file,1024); } fclose($file); return
$result; }
function get_2eme_tirage()
{ $file=fopen($this->filename,"r"); if (!$file) { echo "<p>Impossible d'ouvrir le
fichier</p>.\n"; exit; }
while(!strstr($line,"DEUXIEME")) { $line=fgets($file,1024); } while (count($result)!=7)
{ if (ereg("/([0-9]*).gif",$line,$no)) $result[]=$no[1]; $line=fgets($file,1024); } fclose($file); return
$result; } } ?>
Remarques:
- var $filename déclare ce que l'on appelle un attribut de
classe
- la function parser($filename) est un peu spéciale dans la
mesure où c'est le constructeur de la classe, cette fonction est
appelée quand un objet parser est créé, nous reviendrons dessus.
- On sait que la première occurence du mot Tirage est sur la
même ligne que la date du tirage. Après avoir ouvert le fichier
distant, on le lit ligne par ligne jusqu'à ce que l'on trouve le
mot Tirage dans la ligne. Une fois la ligne obtenue, il faut
utiliser une expression régulière pour trouver la date. On a vu
dans le code source que la date était juste entre <br> et
</b>. On utilise l'expression régulière
suivante:<br>([^<]*)</b> entre parenthèse, on met
le "motif" que l'on veut récupérer. Ici n'importe quels caractères
sauf <. Le résultat est stocké dans $no[1]
- Les deux fonctions suivantes sont identique a un mot clé près.
Le principe ici est d'avancer dans le fichier jusqu'à trouver un
des mots clés puis à "parser" chacune des lignes pour récupérer
les numéros de boules. Un fois que l'on a les 7 numéros on quitte
la boucle et on renvoie le tableau.
|
Voilà la classe est prête, il n'y a plus qu'a
l'utiliser.
|