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

Bibliothèques et frameworks PHP Discussion :

[XML] Importer des flux XML particuliers


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Par défaut [XML] Importer des flux XML particuliers
    Bonjour à tous,

    Je suis entrain de créer un agrégateur de flux XML.
    J'ai déjà importé environ une vingtaine de flux, mais il me reste un problème sur 3 flux. J'ai donc besoin de votre aide.

    Flux 1 :
    En fait mon script ne reconnait le flux N°1 ni comme du RSS, ni comme du XML !
    Je pense que le flux est mal fait, mais je voudrai savoir s'il y a une possibilité de tout de même l'importer.
    Le flux est organisé comme ça :
    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
    <?xml version="1.0" encoding="utf-8"?>
        				<rss version="2.0" 
        						xmlns:media="http://search.yahoo.com/mrss/"
        						 xmlns:atom="http://www.w3.org/2005/Atom" 
        						 xmlns:georss="http://www.georss.org/georss" >
    <title>SITE</title>
    <channel>
      <item>
         <title>Titre</title>
    <description>Description</description>
      </item>
      <item>
         <title>Titre2</title>
    <description>Description2</description>
      </item>
    Si je fais ce test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if($XmlArrays->feed_type=='RSS')
    Le retour est FAUX

    Et si je fais ce test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($XmlArray['channel']['item'])
    Le restour est FAUX

    Quel test dois-je faire pour avoir un retour VRAI et ensuite pouvoir récupérer les infos "title" et "description"

    Flux n° 2 :
    L'architecture de ce 2nd flux est la suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <Main>
      <Produit titre="titreA" description="desc1">
        <url>url</url>
      </produit>
      <Produit titre="titreB" description="desc2">
        <url>url2</url>
      </produit>
    </main>
    Je n'arrive pas à récupérer les informations qui sont à l'intérieur de la balise "Produit" : Les valeurs de "titre" et de "description". Par contre aucun problème pour récupérer l'URL avec la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $absolute_url=$XmlArrayVal['main']['produit']['url'];
    Comment faire ?
    Y a t il une fonction particulière ?

    Flux n°3 :
    C'est encore plus bête, car je n'arrive même pas à récupérer ce flux !
    A vrai dire je débute dans tout ce qui est programmation.
    Ce flux est protégé par une clé pour le récupérer.
    Voilà les infos que l'on m'a donné pour le récupérer :
    C'est une API de type REST, format XML, encodée en UTF-8.
    La clé est à passer en clair dans un header HTTP "X-SITEApiKey"

    Voici celle qui a été générée pour vous : aaaaa888bbbb

    L'adresse de base que vous appellerez est :

    http://www.lesite.fr/api/1.0.0/areas

    Vous recevrez alors l'arbre des zones avec une URI pour chaque zone. A
    noter qu'il n'y a des infos que sur les feuilles de l'arbre.

    En appelant ensuite par exemple l'URI
    http://www.lesite.fr/api/1.0.0/areas/paris, vous recevrez les infos
    Merci pour vos retours.

    Je suis désolé si mes explications ne sont pas exceptionnelles, mais je débute dans l'import de flux.
    A votre dispo.


    Pierrick

    PS : J'ai fait un seul post pour ces 3 problèmes différents, si un modérateur souhaite que je scinde en 3 posts, qu'il me dise.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Par défaut
    Le problème sur le flux n°1 est résolu.
    En fait, dans l'arborescence, je devais ajouter ['rss'] pour être au bon endroit dans le tableau.

    Par contre je n'arrive pas à résoudre les problèmes sur les 2 autres flux.

    Je compte donc sur votre aide.

    Merci

  3. #3
    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
    pour produit c'est des attribut, donc utilise attributes


    pour le REST il faut utiliser libxml_set_streams_context, pour ajouter une valeur en ton entete

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Par défaut
    Merci bien stealth35 pour ces infos.

    Par contre je ne m'en sors pas.
    Je me concentre pour le moment sur la fonction Attributes(), mais je ne m'en sors pas.

    J'ai toujours mon flux qui a cette architecture là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <Main>
      <Produit titre="titreA" description="desc1">
        <url>url</url>
      </produit>
      <Produit titre="titreB" description="desc2">
        <url>url2</url>
      </produit>
    </main>
    A priori, il faut transformer en string pour pouvoir utiliser la fonction attributes, mais je n'y arrive pas. Je n'ai que des tableaux, ou sinon c'est que je ne fais pas bien les choses.

    Pour l'instant je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $XmlArrays=$XmlArray['main'];
    $xmlObject = new SimpleXMLElement($XmllArrays);
                foreach ($xmlObject->children() as $node)
                {
                   $arr = $node->attributes();   // returns an array
                   print ("title=".$arr['title']);     // get the value of this attribute
                }
    Mais ça ne créé que des erreurs.

    Merci pour vos conseils.

    De mon coté, je regarde l'autre point.

    Pierrick

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 176
    Par défaut
    J'avance sur le 2ème point, mais je suis un peu bloqué.

    Voilà où j'en suis:

    J'ai créé ce fichier là pour importer le flux
    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
    <?php
     
    $opts = array(
        'http' => array(
            'user_agent' => 'PHP libxml agent',
            'X-SITEApiKey' => 'aaaaa888bbbb',
        )
    );
     
    $context = stream_context_create($opts);
    libxml_set_streams_context($context);
     
    // lit un fichier via HTTP
    $doc = DOMDocument::load('http://www.letsite.fr/api/1.0.0/areas');
    echo $doc;
    ?>
    et lorsque j'exécute le fichier, j'ai le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Warning: DOMDocument::load(http://www.lesite.fr/api/1.0.0/areas) [domdocument.load]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in script_import.php on line 14
     
    Warning: DOMDocument::load() [domdocument.load]: I/O warning : failed to load external entity "http://www.lesite.fr/api/1.0.0/areas" in script_import.php on line 14
    Peut-être que je ne passe pas la clé au bon endroit ?

    Merci d'avance pour vos conseils

  6. #6
    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 pas
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    print ("title=".$arr['title']);

    mais :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    print ("title=".$arr['titre']);


    pour le point suivant, je sais pas trop déjà load ne dois pas est appelé statiquement, l'exemple est faux, utilise simplexml au lu ide dom document, et pas besoin non plus de mettre un user-agent

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

Discussions similaires

  1. SAGE 1000 TRESO IMPORT DES FLUX D'EXPLOITATION
    Par aerium dans le forum SAGE
    Réponses: 2
    Dernier message: 11/04/2016, 15h33
  2. Importer des données XML
    Par Oberown dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/07/2005, 12h59
  3. Réponses: 3
    Dernier message: 13/12/2004, 13h54
  4. [Ant Eclipse] Import des librairies dans un build.xml
    Par Alwin dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 17/11/2004, 16h35
  5. [DOM] Comment créer des flux XML en java ?
    Par nean_j dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 27/04/2004, 12h00

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