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

JavaScript Discussion :

Accès a des données XML


Sujet :

JavaScript

  1. #1
    Membre à l'essai Avatar de clemissile
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 10
    Points
    10
    Par défaut Accès a des données XML
    Bonjour à tous !

    J'essaye de récupérer des articles de presse sur une équipe de football depuis du XML. Lorsque j'utilise les flux RSS de L'Équipe et de Le Monde, aucun soucis, les articles s'affichent bien comme je veux, avec les données que je veux.

    Seulement quand j'essaye d'ajouter plus de flux provenant d'autres sites, par exemple Le Parisien ou Le 10 Sport, et bien la ça coince et j'ai une erreur :
    Failed to load https://le10sport.com/fr/rss/football/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

    J'ai donc fait des recherches sur cette erreur, et si j'ai bien compris le domaine questionné n'est pas autorisé à me répondre, donc je dois modifier l'en-tête de ce dernier pour autoriser la réponse. Seulement, vous vous en doutez, je ne pense pas pouvoir modifier cela.

    Comme je trouve ça bizarre que des sites mettent à disposition des données XML mais qu'on ne peut y accéder, n'y a-t-il pas un moyen d'y accéder ? Ou alors je dois oublier l'idée d'utiliser les données de ces sites ?

    Voici mon code JavaScript
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    class Article {
            constructor(title, link, description, pubDate, enclosureURL, guid){
                    Object.assign(this, {title, link, description, pubDate, enclosureURL});
            }
            toString(){ //Redéfinition de la méthode toString()
                    let str = "";
     
                    str += "Titre : " + this.title + "\n";
                    str += "Description : " + this.description + "\n";
                    str += "Url : " + this.link;
     
                    return str;
            }
            toHTML(){ //Définition d'une méthode toHTML() qui permet d'afficher l'article dans le HTML
                    let str = "";
     
                    //Titre et lien de l'article
                    str += "<a href =" + this.link + " target = _blank>" + this.title + "</a>";
                    //Description et date de publication de l'article
                    str += "<p class = date>Publié le " + days[this.pubDate.substring(0,3)] + " " 
                    + this.pubDate.substring(4,7) + " " + months[this.pubDate.substring(8,11)] + ", à " + this.pubDate.substring(17,19) + "h"
                    + this.pubDate.substring(20,22) + "</p>";
                    //Image de l'article
                    str += "<img src =" + this.enclosureURL + " class = img_art>";
     
                    return str;
            }
    }
     
    //Array qui contiendra les articles récupérés.
    let arArticles = [];
     
    //Array contenant les url des données XML à lire.
    let arURL = ['https://www.lequipe.fr/rss/actu_rss_Football.xml', 'http://www.lemonde.fr/football/rss_full.xml', 'http://le10sport.com/fr/rss/football/'];
     
    var init = function() {
            document.getElementById("art").innerHTML = ""; //On rends la section vide.
     
            //document.getElementById("b").onclick = alert('1');
            for (var i = 0; i < arURL.length; i++) {
                getArticleInfos(arURL[i]);
            };
     
    }
     
    //Fonction qui parcours le XML et récupère les bonnes informations sur les articles.
    function getArticleInfos(url) {
            const xhr = new XMLHttpRequest();
     
            xhr.open("GET", url, true);
     
            xhr.onload = function() {
                    const
                            doc = xhr.responseXML,
                            items = Array.from(doc.querySelectorAll("item"));
                            magImg = doc.querySelector("image").querySelector("url").textContent; //On récupère le logo du magazine.
     
                    for (const item of items){
                            if ((item.querySelector("title").textContent.indexOf("PSG") != -1)) { //Séléction d'articles comportant 'PSG' dans le titre
                              let
                                    ObjArticle = new Article(
                                            item.querySelector("title").textContent,
                                            item.querySelector("link").textContent,
                                            item.querySelector("description").textContent,
                                            item.querySelector("pubDate").textContent,
                                            ((item.querySelector("enclosure") != null) ? item.querySelector("enclosure").getAttribute("url") : "#"),
                                    );
     
                            arArticles.push(ObjArticle);
                            };
     
                    }
     
                    const
                            elemMain = document.getElementById("art"),
                            elemArticle = document.createElement("article");
     
                    for (const obj of arArticles){
                            let article = elemArticle.cloneNode();
                            article.innerHTML = "<img src = " + magImg + " width = 119 height = 28> <br>" //On affiche le logo du magazine.
                            article.innerHTML += obj.toHTML(); //On affiche l'article.
                            elemMain.appendChild(article);
                    }
                    arArticles = [];
            };
     
            xhr.send(null);
    }             
     
    window.onload = init;
    Merci d'avance !

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Pour récupérer ces données, vous pouvez faire un script côté serveur (en PHP par exemple) et ensuite votre code JavaScript interrogera ce script.

  3. #3
    Membre à l'essai Avatar de clemissile
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 33
    Points : 10
    Points
    10
    Par défaut
    Bonjour mathieu,

    Avec quelque chose comme ça pour le script côté serveur en PHP ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Access-Control-Allow-Origin: http://mondomaine.com');
    Comment mon script JS peut interroger le script PHP ? Je suis plutôt novice en ce qui concerne PHP...

Discussions similaires

  1. [SimpleXML] [débutant] Accès à des données XML
    Par pouktoro dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 24/04/2009, 19h51
  2. Problèmes d'accès à des données XML chargées
    Par netphenix dans le forum ActionScript 3
    Réponses: 7
    Dernier message: 03/09/2008, 09h27
  3. [xml] comment extraire des donnés xml
    Par Lodos dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 20/04/2006, 21h47
  4. Importer des données XML
    Par Oberown dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/07/2005, 12h59
  5. [xml]manipuler des données xml sous Oracle9i
    Par crazy dans le forum SQL
    Réponses: 7
    Dernier message: 28/02/2004, 11h40

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