2013-11-23 13 views
9

私はウィキメディアのAPIからランダムに記事を引っ張るしようとしているが、私のコードは唯一のユーザートークページをつかむようだが...ランダムな記事APIコールがユーザートークページを返していますか?

$(document).ready(function(){ 
    $.getJSON("http://en.wikipedia.org/w/api.php?action=query&generator=random&prop=extracts&exchars=500&format=json&callback=?", function (data) { 
    console.log(data.query.pages); 
    }); 
}); 

私は「発電機がランダム=」ランダムな記事を引っ張るが、その読みそれは事実ではないようです。意図どおりに動作させるにはどうすればよいですか?

答えて

14

名前空間0のページのみを取得する場合は、rnnamespaceパラメータを指定する必要があります。そして、あなたが発電機としてlist=randomを使用していることから、それはgrnnamespaceとして綴られています:

+0

@Ilmari編集をありがとう。 – svick

+1

これは非常に巧妙です...私はMediaWiki APIリファレンスでそれを見つけられませんでした。私はそれが不可能であり、あなたの答えをリンクしているという私のコメントを削除しました。 – mc10

+0

恐ろしい! APIは名前空間に関する警告を返しましたが、それは問題だとは思わなかった。将来の読者のためにこの答えを受け入れる。 – theintellects

1

APIでは、ランダムページを直接取得することはできません。ランダムジェネレータは現在から任意の名前空間のランダムページを取得します。編集:私は修正されました。明らかに、grnamespaceパラメータをsvick mentions in their answerとして渡すことで可能です。私は元の答えを下に残します。

API呼び出しを2回行うのはどうですか?

まず、ランダムなページのリストをつかむために電話をかける:

https://en.wikipedia.org/w/api.php?action=query&list=random&rnnamespace=0&rnlimit=5&format=json 

は、あなたが望むどのように多くのページに基づいてrnlimitパラメータを調整します。で、次の(置き換えTITLEを使用し、

https://en.wikipedia.org/w/api.php?action=query&titles=TITLE1|TITLE2&prop=revisions&rvprop=content&format=json 

をページのHTMLのコピーの場合:

は、以下の(実際のタイトルでTITLE1、TITLE2、などの交換)を使用し、ウィキソースを取得するにはあなたの実際のタイトル、繰り返しAPIを呼び出す):もちろん

https://en.wikipedia.org/w/api.php?action=parse&page=TITLE&prop=text&format=json 

、それだけで直接Special:Randomを呼び出すことが容易であるかもしれない、とスクリーン・スクレイプ:

https://en.wikipedia.org/wiki/Special:Random 
+0

おかげで、私は試すことをあげます! – theintellects

+3

"APIはあなたが直接ランダムページを取得することを許可していません"それは間違っています、私の答えを参照してください。 – svick

関連する問題