2017-10-08 6 views
-1

J'ai besoin d'extraire l'URL d'une image à partir d'une réponse JSON (peut-être que je pourrais le mettre dans une variable).extraire une URL d'une réponse JSON de wikipedia api

Je lis this page on the MediaWiki API help

Je suis cet exemple pour obtenir les informations sur les images sur une page:

https://commons.wikimedia.org/w/api.php?action=query&prop=pageimages&titles=Albert%20Einstein&pithumbsize=100 

qui retournent cette JSON:

{ 
"batchcomplete": "", 
"query": { 
    "pages": { 
     "2061": { 
      "pageid": 2061, 
      "ns": 0, 
      "title": "Albert Einstein", 
      "thumbnail": { 
       "source": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Albert_Einstein_Head.jpg/75px-Albert_Einstein_Head.jpg", 
       "width": 75, 
       "height": 100 
      }, 
      "pageimage": "Albert_Einstein_Head.jpg" 
     } 
    } 
} 

De quelle manière puis-je extraire l'URL de l'image?

J'ai essayé ceci:

$.ajax({ 
    type:"get", 
    url:"https://commons.wikimedia.org/w/api.php?action=query&prop=pageimages&titles=Albert%20Einstein&pithumbsize=100&format=json", 
    dataType:"jsonp", 
    contentType:"application/json; charset=utf-8", 
    success: function(data) { 
     var urlImage = data.query.pages.2061.thumbnail.source; 
     var stgurl = JSON.stringify(urlImage); 
     alert(stg); 
    } 
}) 

mais ne fonctionne pas.

+0

Que se passe-t-il? Avez-vous remarqué que vous avez mal orthographié la variable 'urlImage' dans la ligne' JSON.stringify (urlimage); '? – louisfischer

+0

Merci, je le corrige mais ne fonctionne toujours pas. – Jeek

Répondre

-1

Oui, cela ne fonctionne pas car cet url: https://commons.wikimedia.org/w/api.php?action=query&prop=pageimages&titles=Albert%20Einstein&pithumbsize=100 ne renvoie pas JSON mais HTML. Si vous voulez la représentation JSON, vous devez ajouter &format=json à votre URL.

+0

Merci, j'ajoute '& format = json' mais dans la variable semble qu'il n'y a rien. – Jeek

-1

Remplacez data.query.pages.2061.thumbnail.source par data.query.pages["2061"].thumbnail.source car vous ne pouvez pas utiliser les nombres dans une notation par points.

Et aussi l'alerte; changer stg à stgurl

$.ajax({ 
 
    type:"get", 
 
    url:"https://commons.wikimedia.org/w/api.php?action=query&prop=pageimages&titles=Albert%20Einstein&pithumbsize=100&format=json", 
 
    dataType:"jsonp", 
 
    contentType:"application/json; charset=utf-8", 
 
    success: function(data) { 
 
     var urlImage = data.query.pages["2061"].thumbnail.source; 
 
     //var stgurl = JSON.stringify(urlImage); - unnecessary JSON.stringify 
 
     var stgurl = urlImage; 
 
     alert(stgurl); 
 
    } 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Merci pour votre réponse, mais mon code ne peut pas afficher l'alerte. Je pense que les pages ne sont pas un tableau, mais je ne sais pas de quelle façon je peux y accéder. – Jeek

+0

Wow! J'aime les votes négatifs, n'est-ce pas? : penser – lshettyl

+0

pardonnez-moi, mais je ne sais pas comment cela pourrait arriver, je ne le fais pas. – Jeek

-1

J'ai essayé d'utiliser la solution dans ce post:

iterating through json object javascript

Utilisez le récursivité de cette façon:

function walk(obj) { 
    for (var key in obj) { 
    if (obj.hasOwnProperty(key)) { 
     var val = obj[key]; 
     console.log(val); 
     walk(val); 
    } 
    } 
} 
walk(obj); 

il semble fonctionner. Que voulez-vous dire par «ne fonctionne pas»?