Simple algorithme pour récuperer une chaine de caractere dans une page web

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 688 fois - Téléchargée 23 fois

Contenu du snippet

Je ne contribue pas beaucoup à ce site qui m'aide et je me suis dis que ma petite fonction pourrait etre utile.
Elle consiste a recuperer une chaine, dont on ne sais rien sur elle : Seulement les balises placées avant et après.
Ca est bien pratique pour des recherches à la volée, mais il y a mieux.

Source / Exemple :


<?php
function localise($link,$word,$word2) 
{
		$handle = fopen($link, "rb"); // On ouvre la page web
		$retour = '';
		while (!feof($handle)) {
		  $retour .= fread($handle, 8192); // On la tampone par paquets (obligé quand c'est un flux reseau)
		}
		fclose($handle);
		
 		$retour = strstr($retour, $word); // On supprime tout ce qui est avant $word1
		$retour = substr($retour, strlen($word)); // Y compris $word1
		$retour = strrev($retour); // On inverse tout ! : abcdef = fedcba
		$word2 = strrev($word2); // On inverse aussi la variable $word2
		$retour = strstr($retour, $word2); // On enleve tout ce qui est avant à nouveau
		$retour = substr($retour, strlen($word2)); // Y compris $word2 inversé
		$retour = strrev($retour); // On remets à l'endroit
		return $retour ; // Et le tour est joué !
}

$recup = localise("http://www.phpcs.com/","</span>Derniers Codes</h2>","<div class=\"C SC CO\" id=\"ctl00_Main_Tuto\">");
echo $recup ;
?>

A voir également

Ajouter un commentaire

Commentaires

cs_garfield90
Messages postés
389
Date d'inscription
lundi 7 juillet 2003
Statut
Webmaster
Dernière intervention
10 février 2009
-
Oui, ca s'appele les expressions rationnelles (régulières)
-> preg_*
-> ereg_*

Y a plus qu'a regarder dans le manuel
JoebarGlut
Messages postés
111
Date d'inscription
mercredi 13 août 2003
Statut
Membre
Dernière intervention
17 octobre 2007
-
Ok, c'est pas très explicite comme fonctions et dur à trouver.
Parfois faut se débrouiller comme on peut :)
audayls
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008
-
Salut,
Je suis d'accord avec "Garfield90". Tu utilises beaucoup de fonctions pour pas grand chose ...

"$retour = preg_match('`'.$word.'(.+?)'.$word2.'`sim',$retour);
return $return[0];" devrait donner le même résultat (enfin normalement :-P)
kankrelune
Messages postés
1305
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
function searchAndFind( $link, $word1, $word2 = null, $noCase = true, $findAll = false)
{
if(false ($handle @fopen($link, "rb")))
return false;

$datas = '';

while (!@feof($handle))
$datas .= @fread($handle, 8192);

@fclose($handle);

$word1 = preg_quote($word1,'~');

if(is_null($word2))
$word2 = $word1;
else
$word2 = preg_quote($word2,'~');

$option = '';

if($noCase === true)
$option = 'i';

if($findAll === false)
preg_match('~'.$word1.'(.*?)'.$word2.'~s'.$option,$datas,$matches);
else
preg_match_all('~'.$word1.'(.*?)'.$word2.'~s'.$option,$datas,$matches,PREG_SET_ORDER);

$ret = array();
if(!empty($matches))
{
if($findAll === false)
$ret[] = $matches[1];
else
{
$i = -1;

while(isset($matches[++$i]))
$ret[] = $matches[$i][1];
}
}

return $ret;
}

$find = searchAndFind('http://www.phpcs.com/','Derniers Codes</h2>',''));

if(empty($find))
echo 'String not found';
else
echo $find[0];


@ tchaOo°
cs_dominion
Messages postés
230
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
15 mai 2008
-
Qui n'a jamais réinventé les regexp une fois dans sa vie ? Maintenant que tu sais que ca existe déjà, Joe, je te conseille viviement d'apprendre a t'en servir, c'est d'une puissance et d'une souplesse invraissemblable ^^

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.