Wyświetlanie wiersz po wierszu autora odpowiedzialnego za wkład na stronie MediaWiki

11

Czy istnieje sposób pokazania „kto przyczynił się do tego wiersza” każdej linii strony Wikipedii lub strony MediaWiki?

Wyświetli się na stronie i będzie podobny do narzędzia do obwiniania subversion.

rogerdpack
źródło
Czy chcesz znaleźć pierwsze wystąpienie określonego słowa lub frazy w historii zmian na stronie, czy może to pytanie dotyczy czegoś innego? Musi być jakiś sposób na pobranie pełnej historii zmian dla określonej strony, ale jeszcze jej nie znalazłem.
Anderson Green,
Tak, to prawda.
rogerdpack,
1
Bardzo łatwo to zrobić za pomocą WikiBlame, jak wyjaśniono tutaj: webapps.stackexchange.com/a/35914/20087
Anderson Green
Wow, to całkiem blisko. Wygląda na to, że ktoś się wtrąca, by znaleźć
osobę zapisującą
Pokazuje już wersję, w której tekst został dodany, więc możesz po prostu kliknąć ten link, aby zobaczyć, jak wyglądała cała strona po dodaniu tekstu.
Anderson Green,

Odpowiedzi:

3

Często też czegoś takiego potrzebuję, ale wygląda na to, że nie ma gotowego rozwiązania.

To, co zrobiłem, to napisanie skryptu, który pomaga mi pobierać wersje za pomocą API MediaWiki i importować je do systemu kontroli wersji Bazaar. bzr qblame article.wiki, a następnie daje ładny widok, kto co zmienił. Skrypt nie jest tak naprawdę gotowy do wydania, ale można go znaleźć poniżej lub na Pastebin . Skrypt dodaje się do repozytorium rtęciowego, które można następnie przekształcić w Bazar.

# I hereby place this script into the Public Domain!
import os, sys
import time

import mwclient

import mercurial.ui
from mercurial import localrepo
from mercurial import commands

article = 'Love'
#start_time = None
start_time = '2011-01-01T00:00:00Z'

# set up mercurial repo
ui = mercurial.ui.ui()
repo_dir = article
repo = localrepo.localrepository(ui, path=repo_dir, create = not os.path.isdir(repo_dir))
#if not os.path.isdir(article):
#   os.mkdir(article)
#os.chdir(article)
print "rep in", repo.root
content_path = os.path.join(repo.root, article + '.wiki')

site = mwclient.Site('en.wikipedia.org')
page = site.Pages[article]

for rev in page.revisions(start=start_time, limit=50,dir='newer', prop='ids|timestamp|flags|comment|user|content'):
    content = rev['*']
    timestamp = time.asctime(rev['timestamp'])
    comment = rev['comment'].encode('utf8')
    if len(comment) == 0: comment = "blank"
    print "writing revision from", timestamp

    f = open(content_path, 'wb')
    f.write(content.encode('utf8'))
    f.close()

    commands.addremove(ui, repo)
    commands.commit(ui, repo, message=comment, user=rev['user'].encode('utf8'), date=timestamp)
eug
źródło
0

Innym niezbyt przyjaznym dla użytkownika rozwiązaniem byłoby rozszerzenie mw-to-git dla git, które prawdopodobnie pozwoliłoby ci działać git blamena stronie.

scribu
źródło