【问题标题】:Wikipedia API: how to get the number of revisions of a page?Wikipedia API:如何获取页面的修订数?
【发布时间】:2011-08-21 04:24:10
【问题描述】:

有人知道如何使用 mediawiki API 获取维基百科页面的修订数量吗? 我已阅读此 API 文档,但找不到相关 API:
Revision API

【问题讨论】:

    标签: wikipedia wikipedia-api mediawiki-api wikimedia


    【解决方案1】:

    唯一的可能性是检索所有修订并计算它们。为此,您可能需要 continue the query

    Bug 17993 即将包含计数,但仍未解决。

    【讨论】:

      【解决方案2】:

      这是获取页面修订数量的代码(在本例中为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

      (可从相应的维基百科页面侧边栏访问:工具 - 页面信息)

      【讨论】:

      • 我试了这段代码,它一直在运行,永远不会停止执行
      • 那是 2016 年,API 可能从那时起发生了变化 :) 不确定
      【解决方案3】:

      检索修订并实现一种方法来计算它们(这只是 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>
      

      【讨论】:

      • 这是一种获取修订数量的非常昂贵的方法。您请求的大量数据(页面内容、编辑摘要)只是被丢弃了。
      【解决方案4】:

      通过newer MediaWikis 提供的REST API,您可以使用the "Get page history counts" API 获取页面的修订数。

      例如,

      GET https://en.wikipedia.org/w/rest.php/v1/page/Jupiter/history/counts/edits?from=384955912&to=406217369
      

      此请求将返回如下 JSON 响应:

      {
          "count": 110,
          "limit": false
      }
      

      零编码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-03
        相关资源
        最近更新 更多