.-----------[MinDKinD100\#100.12]------- ----------. [M]ind[K]ind #100 | ; | - 29/11/2003 | . "He kids, HTF now on google, hang there" | - wyzeman | aka '------------- ----. | "gnagnagnagnagna gnagnagnagna gna..." | | _____ ; | '--------------------- ----- -[again, again n again.]---- ------------' Vous vous souvenez de l'article de __2 sur les recherches googlelienne basee sur "index of /" whatever ? Et bien, l'article est un exemple appliquer de cmment tirrer profit à l'aide d'un simple script en php de cette possibilité que google offre. Le produit en question demande à google de lui sortir la liste des index/ de site repertorié par celui-ci ou il est possible de downloader les fichier flash de la série happy three friend. Pour ce faire, la simple requète suivante a ete formuler. "index of /" htf Si vous voullez simplement profitez de la série sans vous cassez la tete copier collez le code php distribuez à la fin de cette article et dépècher vous de le ./ épicuriens que vous êtes. Si la méthode vous interresse un peu plus, vous pouvez bien entendu lire le reste de cette article. Comme vous vous en doutez, le gros de la job consiste a trimer du html. La premiere etape consiste a retirer les url offert par google et de garder ceux qui nous interresse. La methode que jai choisi est plutot simple. Nous pouvons en effet tres facilement retrouver des liens dans un source html par leur denominateur commun; ils sont tous designer par un tag html et lurl en question debute toujours par http://. en separant chaque "mots" du code html a laide de la fonction explode(" ",$var) il ne reste plus qua comparer chaque mots a un template a lair de la fonction similar_text(). celle ci retourne en % le niveau de ressemblance entre 2 string. dans le cas present il s'avère qu'une ressemblance a 50% avec la valeur suivante : "href=\"http://www. /htf\"> " elimine tout ce qui n'est pas un url. Notez que je n'ai pas inclus le " " sont discarté. une derniere sélection au niveau des liens s'impose alors, Maintenant que nous n'avons que les liens reliés à notre requète en main, nous devons nous débarrasser des lien sur des textes dans lesquel il y a une référence a index of / (comme cette article par exemple. Pour y arriver il suffit de regarder si le dernier caractère du lien est un /. Ainsi nous auront la certitude que nous avons affaires a un listing de directory. La tache suivante consiste a ressortir le nom de fichier flash (.swf) de chaque index et de les reliers a leur url dorigine (la plus par des serveur web connu nutilise pas le nom de domaine pour creer les index de directory). encore une fois cest tres simple, il suffit de separer la page en un array represenant chaque mots, et verifier si la fin de se mots est l'extention .swf. 2 explode() suffiront a cette tache. pour sassurer encore une plus grande certitude, jai ajouter quelque philtre du genre, verifier si htf fesais parti du nom, si la grosseur des fichier etais entre 500 et 1500 bytes. cest dernieres mesure on suffit a rendre a un niveau acceptable le taux d'erreur possible (200 et + sans les filtres,a +- 20 avec). eliminer les doublons. pour ce faire jai en premier temps enlever les fichier qui portais le meme nom. ensuite jai ete seduit par lidee dutiliser une ressemblance a 90 % avec le nom dorigine, on evite ainsi la plus par des doublons. jaurais pu aussi verifier si les size etais identique, mais jai preferer men abstenir au cas ou 2 episode different aurais aproximativement la meme grosseur. evidament, maintenant qu'on as les fichiers, c'est facile de verifier, mais puisqu'on a les fichiers, as t'on vraiment envie de vérifié ? remplacer la première ligne du code par ledroit ou se trouve votre interpreteur php. fonctionne aussi sous cygwin (ie : /cygdrive/c/php/php.exe). -----------------------------------htfleecher.php------------------------------------- #!/usr/local/bin/php/php.exe read_page($google); fclose($google); } $htf->link_extractor($page); $htf->fetch_htf_page($htf->parse_url()); $htf->fetch_htf_swf(); class htfleecher { var $page; var $ahref; var $ggmatch; var $url; var $mimetype; var $swf; var $htf; function htfleecher() { $this->page=""; $this->ahref="href=\"http://www. /htf\"> "; $this->ggmatch="href=\"www.google.ca\"> "; $this->url=array(); $this->mimetype=".swf"; $this->swf=array(); $this->htf="htf"; } function read_page($google) { while (!feof($google)) { echo "."; $this->page=$this->page.fread($google,1024); } echo "\r\n"; return($this->page); } function link_extractor($page) { $y=0; $z=0; $secondtrim=array(); $firsttrim=explode(" ", $page); for ($x=0;$xahref, $res); if (number_format($res, 0) > 50) { if ($this->is_not_find($firsttrim[$x], $secondtrim)) { $secondtrim[$y]=$firsttrim[$x]; $y++; } //echo $firsttrim[$x]." match at ".$res."\r\n"; } } for ($x=0;$xggmatch, $res); if (number_format($res,0) < 50) { $this->url[$z] = $secondtrim[$x]; $z++; //echo $secondtrim[$x]." match at ".$res."\r\n"; } } } function is_not_find($challenger, $dejala) { $ret=TRUE; for ($x=0;$x 86) { //echo $challenger." match ".$ish." at ".$res."\r\n"; $ret=FALSE; } } return($ret); } function show_url() { for ($x=0;$xurl);$x++) { echo $this->url[$x]."\r\n"; } } function parse_url() { for($x=0;$xurl);$x++) { //echo substr($this->url[$x], 5)."\r\n"; $this->url[$x] = substr($this->url[$x], 5); } for ($x=0;$xurl);$x++) { $shrug=explode(">",$this->url[$x]); //echo $shrug[0]."\r\n"; $this->url[$x] = $shrug[0]; //echo $this->url[$x]."\r\n"; } return($this->url); } function fetch_htf_page($url) { $y=0; for($x=0;$xpage=""; $fetchurl = fopen($url[$x],"r"); $page=$this->read_page($fetchurl); fclose($fetchurl); $y=$this->swf_finder($page, $url[$x], $y); } } //echo $page; } function swf_finder($page, $url, $y) { $page=strip_tags($page); $shrug=explode(" ", $page); for ($x=0;$xmimetype, $res); if (number_format($res, 0) > 40) { similar_text($shrug[$x], $this->htf, $res); if (number_format($res,0) >30) { //echo $shrug[$x]. " = ".$res."\r\n"; if ($this->is_not_find($url.$shrug[$x], $this->swf)) { if ($this->is_not_like($shrug[$x], $this->swf)) { echo "link ".$shrug[$x]." are probably (".number_format($res, 0)."%) an HTF File\r\n"; $this->swf[$y] = $url.$shrug[$x]; //echo $this->swf[$y]." are probably (".number_format($res, 0)."%) an HTF File\r\n"; $y++; } } } } } return($y); //echo $page; } function fetch_htf_swf() { for($x=0;$xswf);$x++) { echo "downloading ".$this->swf[$x]; $shrug=explode("/",$this->swf[$x]); $filename=$shrug[count($shrug) - 1]; //echo $filename."\r\n"; $this->page=""; @$link=fopen($this->swf[$x],"r"); if ($link) { $htf=$this->read_page($link); fclose($link); if ((strlen($htf) / 1024) > 500 && (strlen($htf) / 1024) < 1500) { $file=fopen($filename,"w"); //echo strlen($htf)."\r\n"; echo "saving file\r\n"; fwrite($file,$htf); } else { if ((strlen($htf) / 1024) < 500) { echo "discarding file, size is too small to be an HTF\r\n"; } else { echo "discarding file, size si too big to be an HTF\r\n"; } } fclose($file); } } } } ?> -----------------------------------htfleecher.php------------------------------------- .----- - -----------------------. | /MinDKinD100 .---'----------- ---------- ------- ------. '-------- - -------------- -| wyzeman@mindkind.org | '-------- - ----------- ------------ -----'