Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从标题获取Wikipedia页面ID_Javascript_Json_Parsing_Wikipedia Api - Fatal编程技术网

Javascript 从标题获取Wikipedia页面ID

Javascript 从标题获取Wikipedia页面ID,javascript,json,parsing,wikipedia-api,Javascript,Json,Parsing,Wikipedia Api,我想从维基百科的一篇文章中得到一张图片。我有文章的标题,但似乎我需要知道页面ID才能访问缩略图。如何从标题中获取页面ID 我的JavaScript代码: $.getJSON("http://en.wikipedia.org/w/api.php?action=query&titles=" + article + "&prop=pageimages&format=json&pithumbsize=350", function (data) { imageURL

我想从维基百科的一篇文章中得到一张图片。我有文章的标题,但似乎我需要知道页面ID才能访问缩略图。如何从标题中获取页面ID

我的JavaScript代码:

$.getJSON("http://en.wikipedia.org/w/api.php?action=query&titles=" + article + "&prop=pageimages&format=json&pithumbsize=350", function (data) {
    imageURL = data.query.pages[/* pageid */].thumbnail.source;
});
下面是我正在解析的内容(例如article=“Car”):


^似乎我首先需要知道它是13673345索引。

只需使用JSON.parse构建JSON对象,就可以得到一个如下所示的对象:

var response = {
  query: {
    pages: {
      "13673345":{
        pageid: 13673345,
        ns: 0,
        title: "Car",
        thumbnail: {
          source: "http://upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Benz-velo.jpg/100px-Benz-velo.jpg",
          width: 100,
          height: 80
        },
        pageimage: "Benz-velo.jpg"
      }
    }
  }
};
然后你可以清楚地看到你根本不需要pageid,你只需要处理正确的“pages”对象

在本例中只有一个,但即使有多个,也只需运行
response.query.pages
对象:

var pages = response.query.pages;
var propertyNames = Object.keys(pages);
propertyNames.forEach(function(propertyName) {
  var page = pages[propertyName];
  var thumbnail = page.thumbnail.src;
  var imgURL = thumbnail.replace("/thumb/",'').replace(/\.(jpg|png).*/,".$1");
  doSomethingWith(imgURL);
});
(注意文件扩展名regexp,我们这样做是因为谁说所有图像都是jpg?最好选择jpg和png,因为这是web上两种流行的图像格式)

OP询问如何“访问缩略图”,即返回数据中的URL。他没有问如何访问缩略图后面的完整图像。。。这是另一个答案

OP的问题是数据被键入到页面ID。事实上,查询可能返回多篇文章,在这种情况下会有多个页面ID和缩略图

以下查询返回代码段中使用的数据:

OP可以使用以下代码提取页面ID:

var pageid = [];
for( var id in data.query.pages ) {
    pageid.push( id );
}
运行下面的代码段进行测试



图像不就在那里吗?删除“thumb”和真实文件名后的部分,这就是您的图像:但是,如果不这样做,如何获取源代码:
data.query.pages[/*pageid*/].thumbnail.source
?只需枚举对象,直到找到具有预期标题的条目(实际上,应该只有一个)我得到imgURL行的TypeError:
[Error]TypeError:undefined不是一个对象(评估'thumbnail.replace')
。问题出在哪里?这是有道理的。不要只是复制粘贴我的cope,确保我没有拼写错误。与其说有错误,不如说“嘿,JSON使用
源代码,而不是
src
”.SO对于获得答案非常有用,但始终确保人们建议的代码没有键入错误;)@Benck-上述代码中有一个小错误导致了错误。请将“page.thumbnail.src;”更改为“page.thumbnail.source;”除此之外,Mike K为您的问题提供了可靠的答案。不过,for-in被认为是一种相当危险的模式(因为您不能保证“安全”的属性名)。相反,ES5使用
Object.keys()
安全地获取任何对象的属性名集。
var pageid = [];
for( var id in data.query.pages ) {
    pageid.push( id );
}