2011-08-21 13 views

答えて

7

唯一の可能性は、すべてのリビジョンを取得し、それらを数えることです。そのためにはcontinue the queryが必要な場合があります。

Bug 17993はまだカウントされていますが、未解決です。

1

リビジョンを取得し、カウントする方法を実装します(単なるXMLです)。

MediaWiki Revisions: Example

api.php ? action=query & prop=revisions & titles=API|Main%20Page & rvprop=timestamp|user|comment|content 

。ここで

<api> 
<query> 
<pages> 
    <page pageid="1191" ns="0" title="API"> 
    <revisions> 
     <rev user="Harryboyles" timestamp="2006-10-31T05:39:01Z" comment="revert unexplained change: see talk ..."> 
     ...content... 
     </rev> 
    </revisions> 
    </page> 
    <page pageid="11105676" ns="0" title="Main Page"> 
    <revisions> 
     <rev user="Ryan Postlethwaite" timestamp="2007-06-26T19:05:06Z" comment="rv - what was that for?"> 
     ...content... 
     </rev> 
    </revisions> 
    </page> 
</pages> 

+0

これは、リビジョンの数を取得するための非常に高価な方法です。あなたは放棄している多くのデータ(ページの内容、要約を編集する)をリクエストしています。 – Mark

1

(この場合は、JSON wiki page)ページのリビジョンの数を取得するためのコードです:

import requests 

BASE_URL = "http://en.wikipedia.org/w/api.php" 
TITLE = 'JSON' 

parameters = { 'action': 'query', 
      'format': 'json', 
      'continue': '', 
      'titles': TITLE, 
      'prop': 'revisions', 
      'rvprop': 'ids|userid', 
      'rvlimit': 'max'} 

wp_call = requests.get(BASE_URL, params=parameters) 
response = wp_call.json() 

total_revisions = 0 

while True: 
    wp_call = requests.get(BASE_URL, params=parameters) 
    response = wp_call.json() 

    for page_id in response['query']['pages']: 
    total_revisions += len(response['query']['pages'][page_id]['revisions']) 

    if 'continue' in response: 
    parameters['continue'] = response['continue']['continue'] 
    parameters['rvcontinue'] = response['continue']['rvcontinue'] 

    else: 
    break 

print parameters['titles'], total_revisions 

あなたがここに結果を確認することができます。https://en.wikipedia.org/w/index.php?title=JSON&action=info#Edit_history

(対応するウィキペディアのページのサイドバーからアクセスできます:ツール - ページ情報)

関連する問題