Je me remets au développement après une dizaine d'années d’interruption, et le redémarrage n'est pas évident sur certains points
Je tente d'écrire un programme dont l'une des fonctionnalités de base est de récupérer des informations sur des sites très ciblés, dans le but d'en reformater le contenu.
Pour ce faire, j'ai recours assez souvent à la fonction preg_match().
Si dans la majorité des cas, tout se passe comme attendu, je but bien méchamment sur des récupérations que je qualifierais de récalcitrantes
Avant d'aller plus loin, voici un petit bout qui fonctionne parfaitement :
$sortie = NULL;
$code = NULL;
//balise incluant le nom de l'auteur (donc alétoire) il faut découper la chaine en deux temps
$code = '#<h2 class="user-info__username">(.*)\</h2>#Ui';
preg_match($code, $contenu, $sortie);
$contenu = $sortie[1];
$code = '#rel="author">(.*)\</a>#Ui';
preg_match($code, $contenu, $sortie);
return $sortie[1];
Ici, pas de soucis donc.Mais sur les deux exemples qui suivent, impossible d'obtenir l'information recherchée.
Récupération de la date de création
La ligne que j'essais de récupérer se présente sous cette forme :
<time itemprop="dateCreated" datetime="2016-04-14T16:45:47+10:00">
14 April 16
</time>
J'utilise un code très proche du précédent, que voici : $sortie = NULL;
$code = NULL;
//la balise incluant la date de création (donc alétoire) il faut découper la chaine en deux temps
$code = '#<time itemprop="dateCreated"(.*)\/time>#Ui';
$contenu = preg_match($code, $contenu, $sortie);
$code = '#>(.*)\<#Ui';
preg_match($code, $contenu[1], $sortie);
print_r($sortie);
return $sortie[0];
Lorsque je tente de voir ce que contient la variable de cette manière :
print_r($sortie);
J'ai toujours le même résultat : Array ( ) Récupération d'URLs dans une page
Deuxième exemple où cela ne fonctionne pas du tout, lorsque je tente de récupérer une liste d'URLs contenu dans une autre page.
Voici comment se présente le code dans la dite page :
<a class="js-google-analytics__list-event-trigger t-link -color-inherit -decoration-reversed" href="/item/monitem/123456789?s_rank=1">Item - Titre item</a>
</h3>
La différence ici, avec le code précédent, c'est que cette structure devrait être retrouvée une soixante de fois dans la page. J'utilise donc ce bout de code :$contenu = NULL;
$contenu = $this->contenu_page;
$code = '#decoration-reversed(.*)s_rank>#Ui';
preg_match($code, $contenu, $sortie, PREG_OFFSET_CAPTURE);
Mais le résultat est comme pour l'exemple précédent, un array vide (Array ( ) );J'ai tenté de réécrire plusieurs fois le $code pour le faire le plus simple possible, sans succès. Je n'arrive pas à voir où se trouve mon (mes) erreur(s).
En vous remerciant chaudement par avance