IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

preg_match() sur une page distante [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    c'est du json donc json_decode ...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    "#{\"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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $resultat = preg_match('#\{"isOnline":.+,"isPlaying":.+,"userId":"(.+)"\}\},"capFriends"#', $source);
    Et suffirais que je mette un return $userId[0];

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 " , }

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    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 ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 23/09/2011, 15h50
  2. WebView : charger une page distante pointant sur des ressources locales
    Par props dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 04/05/2011, 17h58
  3. [RegEx] est-il possible d'extraire une date sur une page distante ?
    Par mitmit dans le forum Langage
    Réponses: 1
    Dernier message: 26/04/2007, 11h35
  4. [Débutant] Connexion sur une machine distante protégée
    Par arthix dans le forum Développement
    Réponses: 3
    Dernier message: 28/08/2003, 09h46
  5. [RaveReport] - Bloquer groupe sur une page
    Par muaddib dans le forum Rave
    Réponses: 3
    Dernier message: 25/02/2003, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo