Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/11/2012, 17h01   #1
TakingCTRL
Invité de passage
 
Homme Nguyen
Étudiant
Inscription : octobre 2012
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Nguyen
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2012
Messages : 13
Points : 0
Points : 0
Par défaut Utilisation de preg_match_all

Bonjour, alors je ne sais pas si je suis dans la bonne section mais ma requête concerne les expressions régulières.

Alors voilà mon problème.
Soit l'url suivante: http://www.developpez.com/actu/46946...al-et-MongoDB/

Tout en bas de la page il y a une section réservée aux commentaires, j'aimerais récupérer ces commentaires, en fait seul le texte m'intéresse mais si ça récupère les liens et les images aussi, ce sont des détails Alors déjà je pense que dans mon code, je me fais gêner par les "/", mais même en utilisant un str_replace(), je n'ai pas réussi à résoudre mon problème. Je pense qu'il y a également d'autres problèmes que je n'ai pas relevé :/

Voici le code en question:
Code PHP :
1
2
3
4
5
6
7
8
9
10
11
12
function recup_avis()
{
	$url = "http://www.developpez.com/actu/46946/La-Maison-Blanche-fait-de-l-open-source-et-publie-sa-premiere-application-sur-GitHub-We-The-People-est-sous-Drupal-et-MongoDB/";
	$source = file_get_contents($url);
	$source = str_replace(CHR(13),"",$source); //ici je vire les retours chariot
	$source = str_replace(CHR(10),"",$source); // pareil
	$expression = '/<span class="comment" style="width:10px;"></span> Retrouver la discussion sur le forum</a>(.+?)<a class="forumLink" href="http://www.developpez.net/forums/showthread.php?t=1256287"><span class="comment" style="width:10px;"></span>Retrouvez la suite de la discussion</a>/';
	$resultat = preg_match_all($expression, $source, $res);		
	if( $resultat ){
           echo '<strong>'."Avis: " . '</strong>'.$res[1][0].'</br></br>'; 
	}else echo '<strong>'."Avis: " . 'Pas de resultat.'.'</br></br>';
}
TakingCTRL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2012, 17h28   #2
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 581
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 581
Points : 6 013
Points : 6 013
Envoyer un message via Skype™ à rawsrc
Pour ce genre de pompage data mining, il faut directement aller consulter le bon Dieu : Anomaly
Gaffe à l'enfer quand même
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2012, 01h43   #3
CosmoKnacki
Membre habitué
 
Avatar de CosmoKnacki
 
Homme
Inscription : mars 2009
Messages : 106
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2009
Messages : 106
Points : 129
Points : 129
Bonjour,

moi je ferais comme ça:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
// on récupère les éléments intéressants
$pattern="/<div\sclass=\"postUser\">\s*
		       <img\sclass=\"posterAvatar\"\ssrc=\"
		           ([^\"]*)\" # lien de l'avatar
		               [^>]*>\s*
		       ([^<]*) # pseudo
		       <br\/>\s*
		       ([^<]*) # qualité
		       <br\/>\s*le\s
		       ([^<]*) # date du post
		       <br\/>\s*
		   <\/div>\s*
		   <div\sclass=\"postMessage\">
		       (.*?) # code html du post
        \s*<\/div>\s*
       <\/div>\s*
       (?:<div\sclass=\"postComment\">|<!--) # chaque post se termine par le suivant, sauf le dernier
		           /sx";
 
$resultat=preg_match_all($pattern, $page,$res);
 
array_shift($res); // on enlève le match de toute la pattern 
 
// un peu de nettoyage (à creuser)
$patternClean=array("/<img\ssrc=\"http:\/\/www\.developpez\.net\/forums\/images\/smilies.*?title=\"([^\"]*)\"[^>]*>/s", // smilies
				    "/<a\shref=\"http:\/\/www\.developpez\.net\/forums\/showthread.*?<\/a>/s", // liens entre posts des citations
				    "/\sclass=\".*?\"/s", // classes inutiles
				    "/\s*\/>/", // maniaquerie de fermeture de balise
				    "/(\w)\s([.,?!])/s" // faute de typographie
					); 
$replaceClean=array("$1",">>","","/>","$1$2");				  
 
$res[4]=preg_replace($patternClean,$replaceClean,$res[4]);
 
// affichage top design!
for ($i=0;$i<count($res[0]);$i++)
{
	echo <<<LOD
		  lien avatar: {$res[0][$i]}<br/>
		  auteur: {$res[1][$i]}<br/>
		  qualité: {$res[2][$i]}<br/>
		  date: {$res[3][$i]}<br/>
		  <div>{$res[4][$i]}</div><br/>
LOD;
}
 
?>
CosmoKnacki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2012, 09h12   #4
TakingCTRL
Invité de passage
 
Homme Nguyen
Étudiant
Inscription : octobre 2012
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Nguyen
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2012
Messages : 13
Points : 0
Points : 0
Wow solution super clean ! Merci comme je suis débutant en PHP je suis en train d'essayer de comprendre mais globalement c'est ce que je cherche! Merci bien
TakingCTRL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2012, 17h35   #5
CosmoKnacki
Membre habitué
 
Avatar de CosmoKnacki
 
Homme
Inscription : mars 2009
Messages : 106
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2009
Messages : 106
Points : 129
Points : 129
À la bonne heure!

Attention néanmoins à ne pas mettre ton résultat en ligne sur une autre url ou à submerger un serveur qui ne t'appartient pas de requêtes.
CosmoKnacki est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h55.


 
 
 
 
Partenaires

Hébergement Web