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 :

Parser du xml


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Par défaut Parser du xml
    Bonjour, je cherche a récuperer des informations d'un site. En l'occurence, www.wowarmory.com

    Voici la classe que j'utilise pour récuperer les données :

    Je préviens tout de suite que je ne connais pas grand chose au XML, c'est surement le pourquoi je ne comprend pas comment faire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    <?php
    class armory {
     
     const BROWSER="Mozilla/5.0 (X11; U; Linux i686; fr-fr; rv:1.8.1.2) Gecko/20070319 Firefox/2.0.0.3";
     
     public $query;
     public $server;
     public $guild;
     public $guildie;
     public $page;
     
    public function __construct ( $query, $server, $guild, $guildie, $page ) 
    {
    	$this->query = $query;
        $this->server = $server;
        $this->guild = $guild;
        $this->guildie = $guildie;
        $this->page = $page;
    } // end of __construct()
     
    public function pull_xml() 
    {
     
        // change the first part of the $url to the armory link that you need
        if( $this->query === 'roster' ){
            $url = 'http://eu.wowarmory.com/guild-info.xml?r=' . urlencode($this->server) . '&n=' . urlencode($this->guild) . '&p=' . $this->page;
     
          }elseif( $this->query === 'character' ){
            $url = 'http://eu.wowarmory.com/character-sheet.xml?locale=fr_fr&r=' . urlencode($this->server) . '&n=' . $this->guildie;
          } 
    	  elseif( $this->query === 'achievements' )
    	  {
    		  $url = 'http://eu.wowarmory.com/character-achievements.xml?r=' . urlencode($this -> server) . '&n=' . $this -> guildie.'&c=168';
    	  }
    /*
        $ch = curl_init();
        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 15);
        curl_setopt ($ch, CURLOPT_USERAGENT,  self::BROWSER);
        
        $url_string = curl_exec($ch); 
    	curl_close($ch); 
    
    	return simplexml_load_string($url_string);  
        */
    	$opts = array(
        'http'=>array(
            'method'=>"GET",
            'header'=>"User-Agent: ".self::BROWSER." Accept-Language: fr-fr\r\n"
        )
    );
    $url_string = file_get_contents($url,false,stream_context_create($opts));
    return simplexml_load_string($url_string); 
     
     } // end of pull_xml()
     
    } // end class  
     
     
    $armory = new armory(achievements, Arathi, NULL, Folten, NULL);
    $xml = $armory->pull_xml(); 
     
     
    var_dump($xml);
     
    /*
    foreach ($xml->category->achievement as $achiev)
    {
    	
    		echo $achiev['title'].'<br>';
    	
    }
    */
    //echo $xml->characterInfo->character['name'];
    ?>
    donc le var_dump($xml); me permet de récupérer toutes les informations contenue sur la page?

    Mais quand je veux les récupérer, je n'en obtiens que 20... Je parle ici de récupérer le "title".

    comment faire pour récuperer l'intégralité des résultats???

    Pour exemple, la page affichant var_dump($xml); => http://www.mmo-advance.com/armory2.php

    et la page affichant les title => http://www.mmo-advance.com/armory.php

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 350
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 350
    Billets dans le blog
    17
    Par défaut
    Salut !

    donc le var_dump($xml); me permet de récupérer toutes les informations contenue sur la page?
    var_dump($xml) permet d'afficher le contenu de $xml, rien d'autre.

    comment faire pour récuperer l'intégralité des résultats???
    Quels résultats ?

    Que veux-tu faire précisément ??

    PS : il te manque des ' autour de tes chaînes dans le new armory( )

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Par défaut
    en fait je veux récuperer un 'title' et un 'desc' qui correspondent respectivement a un titre et une description.

    En gros, je veux récuperer tout les 'title' de la page, mais je ne parviens a en récuperer que 20...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach ($xml->category->achievement as $achiev)
    {
           echo $achiev['title'].'<br>';
    }
    comment parcourir tout le fichier et récuperer les title?

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 350
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 350
    Billets dans le blog
    17
    Par défaut
    Tu récupères les 20 title de la category racine, il y a ensuite d'autres category.

    comment parcourir tout le fichier et récuperer les title?
    Tu peux faire soit du récursif, soit un XPath.
    Pour le XPath :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ( $xml->xpath('//achievement[@title]') as $achiev ) {
        echo $achiev['title'] . '<br>' ;
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Par défaut
    Ca fonctionne deja beaucoup mieux, par contre il me manque quand meme des résultats.

    Je suis censé en obtenir 366 et il n'y en a que 334.

    J'ai tenté avec un xpath('//achievement') au cas ou le probleme viendrais du fait qu'il n'y a pas de 'title'. Ca ne viens pas de la.

    J'ai remarqué qu'il n'affichais pas le 1er title.

    Dans ce cas : ["title"]=> string(19) "50 Emblems of Valor", mais il y en a d'autre qui ne s'affichent pas. si j'ai bien compris, c'est la 'category' principale qui ne s'affiche pas?

    comment résoudre le probleme?

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 350
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 350
    Billets dans le blog
    17
    Par défaut
    En ce qui me concerne j'obtiens 339 résultats dont "50 Emblems of Valor"

    si j'ai bien compris, c'est la 'category' principale qui ne s'affiche pas?
    Avec mon script nous récupérons TOUS les <achievement> possédant un attribut title. D'autres éléments peuvent-ils en contenir ?
    J'ai testé le XPath //*[@title] mais j'ai toujours 339 résultats/title.

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

Discussions similaires

  1. [C#] Parser du XML
    Par karl3i dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/02/2009, 09h46
  2. [DOM] Parser un XML
    Par Zapan dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 02/12/2005, 11h41
  3. [DOM XML] Comment parser du XML avec une version 4.3 ?
    Par ouioui2000 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 18/10/2005, 15h52
  4. [FLASH MX2004] Parser un XML en action script
    Par jejeman dans le forum Flash
    Réponses: 6
    Dernier message: 20/09/2005, 17h25
  5. [XSL] Parser fichier xml : erreurs + incompréhensions
    Par totobouchon dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/07/2005, 15h47

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