我试图了解eicontinue
参数的工作原理,文档说:
eicontinue: Used to continue a previous request and eicontinue
如果有更多结果,请使用此选项继续。
就是这样。基本上维基百科限制500个电话,或5000个机器人。我希望使用该参数,以便在完成后进行新的调用。为此,我正在检查循环找到的最后一篇文章的last id
:
newQuery();
function newQuery() {
console.log(JSON.stringify(JSON.parse(JSON.stringify(spacetime)), null, 4));
jQuery.getJSON("https://en.wikipedia.org/w/api.php?action=query&list=embeddedin&eicontinue=2|"+myId+"&eilimit=500&noimages=true&mobileformat=true&eititle=Template:Infobox&callback=?", {
disablelimitreport: true,
format: "json"
}, function(data) {
$.each(data.query.embeddedin, function(i, item) {
counter++;
curTitle = item.title;
if (i===data.query.embeddedin.length-1) {
myId = item.pageid;
myTitle = item.title;
}
wikiText();
});
});
}
The documentation非常差,我可以在网上找到我应该做的事情:
eicontinue=2|"+myId+"
哪个好,但我不明白的是:2参数是什么? eicontinue=2|"
如果我删除了,我得到:
Cannot read property 'embeddedin' of undefined
我继续embeddedin parameter page阅读更多信息,但它没有多大帮助。
在文档页面上,有an example,结果是:
{
"batchcomplete": "",
"continue": {
"eicontinue": "2|4571809",
"continue": "-||"
},
"query": {
"embeddedin": [
{
"pageid": 2428176,
"ns": 0,
"title": "Congelation"
},
{
"pageid": 2581310,
"ns": 2,
"title": "User:Rpyle731/sandbox/archive1"
},
{
"pageid": 2621895,
"ns": 0,
"title": "Battledore and shuttlecock"
},
{
"pageid": 2710517,
"ns": 1,
"title": "Talk:Scott Fahlman"
},
{
"pageid": 3954860,
"ns": 3,
"title": "User talk:PBS/Archive 6"
}
]
}
}
从那里我可以看到:
"continue": {
"eicontinue": "2|4571809",
"continue": "-||"
},
哪个更令人困惑,看起来它同时使用了eicontinue
和continue-||
,但未在文档中列出,我无法理解。再次,数字2|
答案 0 :(得分:1)
我对Javascript的了解非常有限,我甚至还没有开始研究使用MediaWiki API的细节。但是,您可能有必要知道我发现了什么,以便我可以使用Python。
由于你提到的那个文档页面说Embeddedin
可以用作生成器,你有两个选择:所谓的原始查询延续'或发电机继续。
在第一个选项(' raw continuation')下对Embeddedin
进行简单的第一次调用将是:
https://en.wikipedia.org/w/api.php?action=query&list=embeddedin&eititle=Template:Infobox&eilimit=5
检查此调用的结果我可以看到eicontinue
的值为"0|324"
。然后第二次调用,对于下一批结果将是,
https://en.wikipedia.org/w/api.php?action=query&list=embeddedin&eititle=Template:Infobox&eilimit=5&eicontinue=0|324
IOW,每次只将结果中的eicontinue
值作为参数粘贴。
然而,MediaWiki建议反对原始延续。
更好的选择:Embeddedin
作为生成器。
在开发这个答案时,我提醒MediaWiki并不像文档所暗示的那样难以理解。如果您可以接近正确的请求,引擎会指出可以帮助您进行更正的错误。
这是第一次调用嵌入式模板。
https://en.wikipedia.org/w/api.php?action=query&geititle=Template:Infobox&format=jsonfm&prop=info&generator=embeddedin&=inprop=url&geilimit=5
我第一次尝试使用gpllimit=5
并且引擎抱怨它无法识别此参数。迟早我会记得发电机参数是(或似乎)与前缀为' g'的相应原始参数相同。
检查输出很简单,因为我使用了jsonfm
格式,我发现必须在原始网址的末尾粘贴&geicontinue=0|324
才能获得下一批结果。
而且,是的,文档是令人费解的。
答案 1 :(得分:0)
做一些像
这样的事情var query = {
action: 'query',
// etc
};
var promise = jQuery.getJSON(url, query);
function processBatch(data) {
process(data); // process next batch of data
if (!data.continue) {
return jQuery.Deferred().resolve();
}
jQuery.extend(query, data.continue); // add/replace continue parameters
return jQuery.getJSON(url, query).then(processBatch); // recurse
});
promise.then(processBatch);