我正在开发一个游戏化网络应用程序来帮助维基媒体的社区健康。
我想找出上周编辑与“Jake”相同页面的编辑最多或最近编辑 100 次或类似内容的编辑。
我知道我的查询,但我不知道我需要哪些表,因为维基媒体数据库布局一团糟。
所以,我想获得类似的东西
用户名 | 发生次数 | 页面 |
---|---|---|
麦基 | 13 | 奥巴马,.. |
因此查询将类似于(我正在接受建议):
- 获取用户“Jake”上周编辑过的页面。
- 获取上周该页面的贡献者。
- 对于这些贡献者中的每一个,获取他们在上周编辑过的页面,看看它们是否与“Jake”编辑过的页面匹配并计算它们。
我尝试在 Pywikibot 中做一些更简单的事情,但速度非常非常慢(Jake 的最后 500 次贡献需要 20 秒)。
我只获取编辑过的页面并获取该页面的贡献者,然后计算它们,速度非常慢。
我的 pywikibot 代码是:
site = Site(langcode,'wikipedia')
user = User(site,username)
contributed_pages = set()
for page,oldid,ts,comment in user.contributions(total=100,namespaces=[0]):
contributed_pages.add(page)
return get_contributor_ocurrences(contributed_pages,site,username)
和函数
def get_contributor_ocurrences(contributed_pages,username):
contributors = []
for page in contributed_pages:
for editor in page.contributors():
if APISite.isBot(self= site,username=editor) or editor==username:
continue
contributors.append(editor)
return Counter(contributors)
PS:我可以访问数据库副本,我想这比 Wikimedia API 或 Pywikibot 快得多