Preg_match_all array

Fermé
lanzari Messages postés 107 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 12 novembre 2017 - Modifié par lanzari le 6/03/2017 à 19:56
lanzari Messages postés 107 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 12 novembre 2017 - 6 mars 2017 à 21:39
Bonsoir à tous, cela fait un moment que je bloque la dessus, je n'ai pas trouvé réponse à ma question alors je me tourne vers vous :)

Je voudrais pouvoir récupérer automatique des infos d'un site pour les retranscrires sur un autre, je m'explique :
Je récupère un agenda d'un site internet "http://sortir.besancon.fr/events/liste" pour les afficher sur un autre site dans un autre format.

Pour faire cela j'utilise l'expression preg_mach_all pour récupérer des informations sur le web, c'est une méthode que je connais peu.
Cela fonctionne , et me donne un array

Array
(
[0] => http://sortir.besancon.fr/event/expo-gerard-collin-thiebaut-grammaire-sentimentale/
[1] => http://sortir.besancon.fr/event/exposition-le-monde-de-demain/
[2] => http://sortir.besancon.fr/event/exposition-francois-petit/
[3] => http://sortir.besancon.fr/event/journee-internationale-des-droits-des-femmes/
[4] => http://sortir.besancon.fr/event/nous-partons-pour-ne-plus-vous-donner-de-soucis/
[5] => http://sortir.besancon.fr/event/spectacle-le-poete-aveugle/
[6] => http://sortir.besancon.fr/event/cinekino/
[7] => http://sortir.besancon.fr/event/cinema-zoom/
[8] => http://sortir.besancon.fr/event/conference-la-radicalisation-des-jeunes-le-defi-de-la-prevention/
[9] => http://sortir.besancon.fr/event/atelier-eco-citoyen-on-met-la-main-a-la-pate/
)


Mon début de code est le suivant :
<?php
$url = "http://sortir.besancon.fr/events/liste"; // adresse de la page à exploiter
$source = file_get_contents($url);
$resultat = preg_match_all('#<span class="tribe-event-date-start">\s*(.*)\s*</span> -#', $source, $eventstart);
$resultat = preg_match_all('#<span class="tribe-event-date-end">\s*(.*)\s*</span>#', $source, $eventend);
$resultat = preg_match_all('#<a class="tribe-event-url" href="(.*)" rel="nofollow noopener noreferrer" target="_blank" title="(.*)">\s*(.*)\s*</a>#', $source, $event);
$resultat = preg_match_all('#<span class="tribe-street-address">\s*(.*)\s*</span>#', $source, $rue);
$resultat = preg_match_all('#<span class="tribe-locality">\s*(.*)\s*</span>#', $source, $ville);
$r = $event[1];
echo "<pre>";print_r($r);echo "</pre>";
?>

mais je n'arrive pas à tout faire rentrer dans un tableau de la manière suivante :

Evenement |Date debut | Date fin | Lieu
evenement1 date_event_1 fin_event_1 rue_event_1
evenement2 date_event_2 fin_event_2 rue_event_2
evenement3 date_event_3 fin_event_3 rue_event_3

En espérant avoir été clair dans mes explications :)

merci

1 réponse

jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
6 mars 2017 à 20:14
Bonjour,

Un truc dans ce genre ?
<?php
$url = "http://sortir.besancon.fr/events/liste"; // adresse de la page à exploiter
$source = file_get_contents($url);

function debug($datas,$title=""){
echo "<br><b>$title</b><pre>";
print_r($datas);
echo "</pre>";

}

function getDataRow($varname,$index,$item=0){
 $result = "";
 if(!empty($varname) && isset($varname[$item])){
   $result = isset($varname[$item][$index]) ? $varname[$item][$index] : '';
 }
 return $result;
}

$resultat = preg_match_all('#<span class="tribe-event-date-start">\s*(.*)\s*</span> -#', $source, $eventstart);
debug($eventstart,"eventstart");

$resultat = preg_match_all('#<span class="tribe-event-date-end">\s*(.*)\s*</span>#', $source, $eventend);
debug($eventend,"eventend");

$resultat = preg_match_all('#<a class="tribe-event-url" href="(.*)" rel="nofollow noopener noreferrer" target="_blank" title="(.*)">\s*(.*)\s*</a>#', $source, $event);
debug($event,"event");

$resultat = preg_match_all('#<span class="tribe-street-address">\s*(.*)\s*</span>#', $source, $rue);
debug($rue,"rue");

$resultat = preg_match_all('#<span class="tribe-locality">\s*(.*)\s*</span>#', $source, $ville);
debug($ville,"ville");

echo " ----------TABLEAU -------------";
echo "<table style='border: 1px solid black'>";
for($i=0;$i<count($eventstart);$i++){
 echo "<tr>";
 echo "<td>". getDataRow($eventstart,$i,1) ."</td>";
 echo "<td>". getDataRow($eventend,$i) ."</td>";
 echo "<td>". getDataRow($event,$i) ."</td>";
 echo "<td>". getDataRow($rue,$i) ."</td>";
 echo "<td>". getDataRow($ville,$i) ."</td>";
 echo "</tr>"; 
}
echo "</table>";

?>

1
lanzari Messages postés 107 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 12 novembre 2017 13
6 mars 2017 à 21:29
C'est juste parfait ! Milles merci
0
lanzari Messages postés 107 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 12 novembre 2017 13
6 mars 2017 à 21:39
Simple question, pourquoi seulement 4 affichages sont présents sur les 10 que l'on trouves dans l'array ?
0