Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/01/2012, 00h24   #1
Invité de passage
 
Brice
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations personnelles :
Nom : Brice

Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 0
Points : 0
Par défaut preg_match() sur une page distante

Bonjour,

Je fais actuellement un script afin de récupérer des informations d'une page web d'un site externe.
J'ai lu préalablement le tutoriel des expressions régulières, j'ai assimilé mais j'arrive pas à mettre à 100% en pratique.

Le site que je scrute possède des centaines de ligne de se type là :
Code :
1
2
 
username":"Zariell","avatar":"4fea4e210efebab49604c3d65d6220c8","userId":"2832660339215456238","createdAt":1321551255,

Je souhaite donc récupérer userId dans toutes ces lignes. J'utilise donc un preg_match() comme ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
function recup_userid($url) {
 
 global $erreur;
 $source = file_get_contents($url);
 $resultat = preg_match('#"userId":"(.+)"\}\}#', $source, $userid);
 if($resultat) {
  $erreur = 0;
  return $userid;
 } else {
  $erreur = 1;
 }
}
Ceci me retourne rien... Enfin, il me retourne $erreur = 1 ce qui m'affiche un message d'erreur personnalisé.
Le fait qu'il trouve plusieurs résultats identique peut poser problème ? Sur ma page il doit avoir 24 résultats identiques à ce code.

J'ai pourtant déjà utilisé cette même fonction pour chercher un lien et cela m'avait posé aucun problème. Un problème avec les "" peut être ? J'ai déjà essayer de mettre des \ devant, mais ceci ne change absolument rien.

Cordialement Zariell.
Zariell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 00h51   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
c'est du json donc json_decode ...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 11h17   #3
Invité de passage
 
Brice
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations personnelles :
Nom : Brice

Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 0
Points : 0
Bonjour,

Ceci ne fonctionne pas plus avec json_encode();
Il ne trouve pas ce que je cherche, de plus il correspond pas à ma regex car il \ pas les {} qui sont à différencier justement.

Voici ce que ça me resort avec la fonction json :

Code :
"#{\"isOnline\":(.+),\"isPlaying\":(.+),\"userId\":\"(.+)\"}},\"capFriends\"#"
De plus même si je le fais manuellement la recherche aboutie pas.

En gros ce que je souhaite faire.
Le site externe que je check est une page web, avec plein d'informations html et javascript. A l'intérieur, des données dont l'userId m’intéresse pour l'utilisation d'un outil sur mon site. Le but est d'enregistrer cet userId dans ma bado.

Exemple de javascript de ce site (J'ai trouvé une ligne ou il est unique d'ailleur, pour éviter les erreurs:
Code :
1
2
3
4
5
6
7
8
9
 
{"username":"Faramir76620","gravatarMd5":"4c8c9dd1921a3e4efe7c80dcce2dda1e","userId":"2832658801550161170","createdAt":1319677753,"presence":
{"isOnline":false,"isPlaying":false,"userId":"2832658801550161170"}},"capFriends":true,"friends":
[{"userId":"2832660699887680635","user":
{"username":"IIDalton76II","gravatarMd5":"0b8be2b183a8cb8c35623a9ceb29445c","userId":"2832660699887680635","createdAt":1319561323,"presence":
{"isOnline":false,"isPlaying":false,"userId":"2832660699887680635"}}},{"userId":"2832660143718391001","user":
{"username":"Xenlight05","gravatarMd5":"bcc1f934262788c1d2359af028ec7937","userId":"2832660143718391001","createdAt":1319568316,"presence":
{"isOnline":false,"isPlaying":false,"userId":"2832660143718391001"}}},{"userId":"2832658994826865569","user":{"username":"Mentoss76","gravatarMd5":"30cc7a6c980f11c4c4df681f0b51543d","userId":"2832658994826865569","createdAt":1319711692,"presence":{"isOnline":false,"isPlaying":false,"userId":"2832658994826865569"}}}
,{"userId":"2832659368493060784","user":
Ce qui m’intéresse est juste userId de Faramir76620 son code. Je souhaite uniquement sa valeur et la récupérer dans ma fonction. De plus, toutes les valeurs entre :"" sont variable selon le cas. Enfin, je vais pas vous embrouiller. Ce qu'il faut juste faire, c'est récupérer userId (qui varie) selon les personnes que je check avec mon script.

Donc ici, je vais prendre la seconde ligne, qui est la seule à posséder "capFriends".
Code :
1
2
 
{"isOnline":false,"isPlaying":false,"userId":"2832658801550161170"}},"capFriends"
Pour récupérer l'userId cette commande fonctionnerais ? Sauf que cela ne fonctionne pas
Code :
1
2
 
$resultat = preg_match('#\{"isOnline":.+,"isPlaying":.+,"userId":"(.+)"\}\},"capFriends"#', $source);
Et suffirais que je mette un return $userId[0];
Zariell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 15h41   #4
Invité de passage
 
Brice
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations personnelles :
Nom : Brice

Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 0
Points : 0
Code :
1
2
3
4
5
6
7
8
9
10
11
12
function recup_article($url)
	{
		global $erreur;
		$source = file_get_contents($url);
			$resultat = preg_match('#\{\"isOnline\":.+\,\"isPlaying\":.+\,\"userId\":\"(.+)\"\}\}\,\"capFriends\"#i', $source, $userId);
		if($resultat) {
			$erreur = 0;
			return $userId[1];
		} else {
			$erreur = 1;
		}
	}
Fallait mettre des \ devant ces caractères spéciaux " , }
Zariell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 16h20   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
Citation:
Envoyé par Zariell Voir le message
Ceci ne fonctionne pas plus avec json_encode();

Citation:
Envoyé par stealth35 Voir le message
c'est du json donc json_decode ...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h02.


 
 
 
 
Partenaires

Hébergement Web