从标题获取维基百科 pageid
Get Wikipedia pageid from title
我正在尝试从维基百科文章中获取图像。我有文章的标题,但似乎我需要知道 pageid 才能访问缩略图。如何从标题中获取 pageid?
我的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;
});
这是我正在解析的内容(文章示例 = "Car"):
{"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"}}}}
^ 看来我首先需要知道它是 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
对象也只有 运行 到 Object.keys
:
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).*/,".");
doSomethingWith(imgURL);
});
(注意文件扩展名 regexp,我们这样做是因为谁说所有图像都是 jpg?最好选择 jpg 和 png,因为这是网络上两种流行的图像格式)
OP 询问如何 "access the thumbnail",即 returned 数据中的 URL。他没有问如何访问缩略图后面的完整图像......这是其他答案所解决的问题。
OP 的问题是数据与页面 ID 相关联。事实上,查询可以 return 不止一篇文章,在这种情况下会有多个页面 ID 和缩略图。
以下查询 returns 代码段中使用的数据:
并且 OP 可以使用此代码提取页面 ID:
var pageid = [];
for( var id in data.query.pages ) {
pageid.push( id );
}
运行下面的代码片段进行测试。
<html>
<body>
<img id="thumbnail"/>
<script type="text/javascript">
var data = {
"query":
{
"normalized": [
{
"from": "Stack_Overflow",
"to": "Stack Overflow"
}],
"pages":
{
"21721040":
{
"pageid": 21721040,
"ns": 0,
"title": "Stack Overflow",
"thumbnail":
{
"source": "http://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Stack_Overflow_homepage.png/350px-Stack_Overflow_homepage.png",
"width": 350,
"height": 185
},
"pageimage": "Stack_Overflow_homepage.png"
}
}
}
};
// get the page IDs
var pageid = [];
for( var id in data.query.pages ) {
pageid.push( id );
}
// display the thumbnail using a page ID
document.getElementById('thumbnail').src = data.query.pages[ pageid[0] ].thumbnail.source;
</script>
</body>
</html>
我正在尝试从维基百科文章中获取图像。我有文章的标题,但似乎我需要知道 pageid 才能访问缩略图。如何从标题中获取 pageid?
我的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;
});
这是我正在解析的内容(文章示例 = "Car"):
{"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"}}}}
^ 看来我首先需要知道它是 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
对象也只有 运行 到 Object.keys
:
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).*/,".");
doSomethingWith(imgURL);
});
(注意文件扩展名 regexp,我们这样做是因为谁说所有图像都是 jpg?最好选择 jpg 和 png,因为这是网络上两种流行的图像格式)
OP 询问如何 "access the thumbnail",即 returned 数据中的 URL。他没有问如何访问缩略图后面的完整图像......这是其他答案所解决的问题。
OP 的问题是数据与页面 ID 相关联。事实上,查询可以 return 不止一篇文章,在这种情况下会有多个页面 ID 和缩略图。
以下查询 returns 代码段中使用的数据:
并且 OP 可以使用此代码提取页面 ID:
var pageid = [];
for( var id in data.query.pages ) {
pageid.push( id );
}
运行下面的代码片段进行测试。
<html>
<body>
<img id="thumbnail"/>
<script type="text/javascript">
var data = {
"query":
{
"normalized": [
{
"from": "Stack_Overflow",
"to": "Stack Overflow"
}],
"pages":
{
"21721040":
{
"pageid": 21721040,
"ns": 0,
"title": "Stack Overflow",
"thumbnail":
{
"source": "http://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Stack_Overflow_homepage.png/350px-Stack_Overflow_homepage.png",
"width": 350,
"height": 185
},
"pageimage": "Stack_Overflow_homepage.png"
}
}
}
};
// get the page IDs
var pageid = [];
for( var id in data.query.pages ) {
pageid.push( id );
}
// display the thumbnail using a page ID
document.getElementById('thumbnail').src = data.query.pages[ pageid[0] ].thumbnail.source;
</script>
</body>
</html>