2017-08-02 74 views
0

我想了解eicontinue參數是如何工作的,該文件說:如何在wikipedia API上使用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": "-||" 
    }, 

這更加混亂,它看起來像它使用這兩個eicontinuecontinue-||雖然沒有在文檔中列出,我不明白。然後再次,數字2|

回答

1

我的Javascript知識非常有限,我甚至沒有開始計算使用MediaWiki API的細節。但是,瞭解我對它的瞭解有多少,以便我可以使用Python可能會對您有所幫助。

由於您提到的文檔頁面說Embeddedin可以用作生成器,因此您有兩種選擇:所謂的「原始查詢延續」或生成器延續。

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 

督察,只是從以前的結果粘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才能獲得下一批結果。

而且,是的,文檔是頭腦彎曲。

+0

非常感謝,這是真正有用的,有幾個問題的問候: 1.'什麼是0' - 2.爲什麼你使用'inprop =網址'? 3.'generator'和'raw'有什麼區別? –

+0

1.我不確定。它似乎是MediaWiki返回的序列號。在這一點上,我期望如果你發送'&geicontinue = 0 | 324',你將返回'1 | xxx'。但我不知道。 2.這是對我在Python中使用的代碼的一種控制。我認爲它給了你更多的信息。請參考我關於實驗的評論。 :) 3. https://www.mediawiki.org/wiki/API:Raw_query_continue在頁面頂部說了一些關於此事的祕密。請閱讀,你會知道我所知道的一切。 –

+0

它確實是神祕的,現在在那個頁面上它提到'accontinue',我用'eicontinue',並且你建議'geicontinue',我不明白這些差異,我所知道的是我們應該避免,然後再'rawcontinue ' –

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); 
+0

謝謝,但tbh它的工作原理是什麼我和我們在問題中,我不知道什麼是這個參數意味着 –

+0

連續參數是不透明的,不應該手動交互。這只是爲了保持內部狀態而需要進行的一些操作,以便API可以繼續列出停止的結果。 – Tgr