维基百科API:按时间范围进行修订

时间:2015-04-06 18:46:29

标签: python api wikipedia

我试图弄清楚如何在指定的时间范围内获取所有页面修订版。我创建了一个python脚本,允许我进行最后100次修订,但是我没有看到任何允许我指定时间范围的内容。我确实看到了以下参数:

rvstart: Timestamp to start listing from. (enum)
rvend:   Timestamp to end listing at. (enum)

但是,我无法让这些工作。如果我将时间戳作为修订时间戳存在,而不是作为封装的任意范围,它们就可以工作。有没有人有任何想法?

如果您有兴趣,请参阅我的剧本:

import json

from wikitools import wiki, api

site = wiki.Wiki("http://en.wikipedia.org/w/api.php")
names = ["Sherrod Brown","Maria Cantwell"]
allMembers = []
for name in names:
    params = {'action':'query',
        'titles': name,
        'prop':'revisions',
        'rvprop':'ids|flags|timestamp|userid|user|size|comment|tags',
        'rvlimit':'100'
    }
    req = api.APIRequest(site, params)
    res = req.query(querycontinue=False)
    allMembers.append(res)

with open('/Applications/MAMP/htdocs/python/wikipedia-1.4.0/data/wiki-leg.json', 'w') as outfile:
    json.dump(allMembers, outfile, indent=2)

1 个答案:

答案 0 :(得分:1)

好的,我想我已经明白了。 OP中突出显示的两个参数:

rvstart: Timestamp to start listing from. (enum)
rvend:   Timestamp to end listing at. (enum)

必须与:

一起使用
rvdir: Direction to list in. (enum)
    older: List newest revisions first (default) NOTE: rvstart/rvstartid has to be higher than rvend/rvendid
    newer: List oldest revisions first NOTE: rvstart/rvstartid has to be lower than rvend/rvendid

所以,将params更新为:

params = {'action':'query',
        'titles': name,
        'prop':'revisions',
        'rvprop':'ids|flags|timestamp|userid|user|size|comment|tags',
        'rvlimit':'100',
        'rvstart':'2009-01-01T12:00:00Z',
        'rvend':'2014-12-31T23:59:00Z',
        'rvdir':'newer'
    }

似乎达到了预期的目的。