Как найти текстовые различия между ревизиями на страницах Википедии с помощью mwclient? - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь найти текстовые различия между двумя ревизиями данной страницы Википедии с помощью mwclient. У меня есть следующий код:

import mwclient
import difflib

site = mwclient.Site('en.wikipedia.org')
page = site.pages['Bowdoin College']
texts = [rev for rev in page.revisions(prop='content')]
if not (texts[-1][u'*'] == texts[0][u'*']):
      ##show me the differences between the pages

Спасибо!

1 Ответ

0 голосов
/ 12 сентября 2018

Непонятно, хотите ли вы создать difflib сгенерированный diff или mediawiki diff с использованием mwclient.

В первом случае у вас есть две строки (текст двух ревизий) ивы хотите получить diff, используя difflib :

...
t1 = texts[-1][u'*']
t2 = texts[0][u'*']
print('\n'.join(difflib.unified_diff(t1.splitlines(), t2.splitlines())))

(difflib также может генерировать HTML diff, обратитесь к документации для получения дополнительной информации.)

Но есливы хотите сгенерированный MediaWiki HTML diff с использованием mwclient, вам понадобится ревизия ids:

# TODO: Loading all revisions is slow,
# try to load only as many as required.
revisions = list(page.revisions(prop='ids'))  
last_revision_id = revisions[-1]['revid']
first_revision_id = revisions[0]['revid']

Затем используйте действие сравнения для сравнения идентификаторов ревизий:

compare_result = site.get('compare', fromrev=last_revision_id, torev=first_revision_id)
html_diff = compare_result['compare']['*']
...