Occurence dans chaine de caractères
Résolu
dugenou
Messages postés
6087
Date d'inscription
Statut
Contributeur
Dernière intervention
-
dugenou Messages postés 6087 Date d'inscription Statut Contributeur Dernière intervention -
dugenou Messages postés 6087 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
Je cherche à extraire et à afficher, une partie d'un site dans une page d'un autre site.
J'utilise la fonction PHP file_get_contents() pour désigner la page concernée et les fonctions PHP substr(), strpos() et strrpos() pour préciser la partie concernée.
Voici le code que j'utilise :
Ce code fonctionne très bien pour extraire et afficher ce que je veux, mais il extrait et affiche aussi le reste de la page qui suit ce qui m'intéresse.
Je souhaiterais pouvoir limiter la capture au contenu de la <div> en question. Il y a malheureusement de nombreuses <div> imbriquées et le script semble retenir la dernière </div> de la page.
J'ai essayé de limiter la sélection avec un offset négatif, sans aucun résultat. Si je mets -18108, tout s'affiche et si je mets -18109, il n'y a plus rien qui s'affiche. Je ne dois pas faire comme il faut.
Merci par avance pour vos réponses et solutions éventuelles.
Je cherche à extraire et à afficher, une partie d'un site dans une page d'un autre site.
J'utilise la fonction PHP file_get_contents() pour désigner la page concernée et les fonctions PHP substr(), strpos() et strrpos() pour préciser la partie concernée.
Voici le code que j'utilise :
$annonces = file_get_contents('http://www.xxxxxx.fr'); $annonces = substr($annonces, strpos($annonces, '<div class="module mod_wistr3_annonces">'), strrpos($annonces, '</div>')); echo $annonces;
Ce code fonctionne très bien pour extraire et afficher ce que je veux, mais il extrait et affiche aussi le reste de la page qui suit ce qui m'intéresse.
Je souhaiterais pouvoir limiter la capture au contenu de la <div> en question. Il y a malheureusement de nombreuses <div> imbriquées et le script semble retenir la dernière </div> de la page.
J'ai essayé de limiter la sélection avec un offset négatif, sans aucun résultat. Si je mets -18108, tout s'affiche et si je mets -18109, il n'y a plus rien qui s'affiche. Je ne dois pas faire comme il faut.
$annonces = file_get_contents('http://www.xxxxxx.fr'); $annonces = substr($annonces, strpos($annonces, '<div class="module mod_wistr3_annonces">'), strrpos($annonces, '</div>', -18108)); echo $annonces;
Merci par avance pour vos réponses et solutions éventuelles.
A voir également:
- Occurence dans chaine de caractères
- Caractères ascii - Guide
- Caractères spéciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Plus de chaine tv - Guide
- Chaine radio - Télécharger - Médias et Actualité
2 réponses
J'ai trouvé une solution qui semble fonctionner. Ce qui est étonnant c'est que la solution n'est pas tout à fait la même pour les deux sites concernés. Reste à voir si ça fonctionnera encore, après une mise à jour des sites.
Voici les solutions :
Merci encore à Whismerll, même si ce n'est pas sa solution que j'utilise.
Voici les solutions :
$site = file_get_contents('http://www.xxxxxxx.fr'); $annonces = substr($site, strpos($site, '<div class="module mod_wistr3_annonces">'), -1922); echo $annonces;
$site = file_get_contents('http://www.xxxxxx.com'); $annonces = substr($site, strpos($site, '<div class="module mod_wistr3_annonces">'), 2495); echo $annonces;
Merci encore à Whismerll, même si ce n'est pas sa solution que j'utilise.
Utilisateur anonyme
De rien du coup!
dugenou
Messages postés
6087
Date d'inscription
Statut
Contributeur
Dernière intervention
1 452
J'ai quand même trouvé le moyen d'avoir le même code pour les deux sites :
dugenou
Messages postés
6087
Date d'inscription
Statut
Contributeur
Dernière intervention
1 452
>
dugenou
Messages postés
6087
Date d'inscription
Statut
Contributeur
Dernière intervention
Pour ceux qui seraient intéressés, comme je le redoutais, la mise à jour de la partie de page à capturer a poser un problème, la chaîne est devenue plus longue. Pour régler ce problème, j'ai déterminé la fin de la chaîne en comptant les caractères en partant de la fin et non du début, la fin ne devant pas être modifiée lors des mises à jour (pour compter les caractères, j'ai utilisé une fonction de l'éditeur Geany). Pour décompter de la fin, il faut utiliser un chiffre négatif :
Merci pour ta réponse.
Je regarde en quoi ça consiste.
Je ne sais pas s'il faut l'utiliser pour sélectionner ce que je veux extraire ou si je dois l'utiliser pour exclure ce que je ne veux pas extraire, mais dans les deux cas, ça me semble assez complexe, car il y a beaucoup de caractères à définir.
Mais, je n'ai pas encore compris comment ça fonctionne vraiment.
Je regarde en quoi ça consiste.
Je ne sais pas s'il faut l'utiliser pour sélectionner ce que je veux extraire ou si je dois l'utiliser pour exclure ce que je ne veux pas extraire, mais dans les deux cas, ça me semble assez complexe, car il y a beaucoup de caractères à définir.
Mais, je n'ai pas encore compris comment ça fonctionne vraiment.
J'avais commencé avec preg_match sans savoir qu'il s'agissait de regex, mais je n'avais pas réussi à faire ce que je voulais, probablement parce que je ne maîtrise pas cette technique.
Je vais essayer d'utiliser mon script, qui fonctionne en partie, en utilisant en complément preg_replace pour supprimer ce qui s'affiche en trop.
Je vais essayer d'utiliser mon script, qui fonctionne en partie, en utilisant en complément preg_replace pour supprimer ce qui s'affiche en trop.