Revision: 6514 Author: jayvdb Date: 2009-03-17 15:25:21 +0000 (Tue, 17 Mar 2009)
Log Message: ----------- Add user contributions browser
Modified Paths: -------------- trunk/pywikipedia/userlib.py
Modified: trunk/pywikipedia/userlib.py =================================================================== --- trunk/pywikipedia/userlib.py 2009-03-17 13:39:49 UTC (rev 6513) +++ trunk/pywikipedia/userlib.py 2009-03-17 15:25:21 UTC (rev 6514) @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +# -*- coding: utf-8 -*- """ Library to work with users, their pages and talk pages. """ @@ -33,9 +33,6 @@ as well as methods for blocking and unblocking. """
- #TODO list: - #- browse contributions - def __init__(self, site, name): """ Initializer for a User object. @@ -69,6 +66,13 @@ return wikipedia.Page(self.site,fullpagename)
def editedPages(self, limit=500): + """ Deprecated function that wraps 'contributions' + for backwards compatibility + """ + for page in self.contributions(limit): + yield page[0] + + def contributions(self, limit=500): """ Yields pages that the user has edited, with an upper bound of ``limit''. Pages returned are not guaranteed to be unique (straight Special:Contributions parsing, in chunks of 500 items).""" @@ -92,11 +96,23 @@ older_str = older_str.replace('$1',str(step))
address = self.site.contribs_address(self.name,limit=step) - contribRX = re.compile('<li[^>]*>.*>diff</a>) *(<span class="[^"]+">[A-Za-z]</span>)* *<a href="[^"]+" (class="[^"]+" )?title="[^"]+">(?P<title>[^<]+)</a>') + contribRX = re.compile('<li[^>]*> *<a href="(?P<url>[^"]*?)" title="[^"]+">(?P<date>[^<]+)</a>.*>diff</a>) *(<span class="[^"]+">[A-Za-z]</span>)* *<a href="[^"]+" (class="[^"]+" )?title="[^"]+">(?P<title>[^<]+)</a> *(?P<comment>.*?)(?P<top><strong> *(top) *</strong>)? *(<span class="mw-rollback-link">[<a href="[^"]+token=(?P<rollbackToken>[^"]+)%2B%5C".*rollback</a>]</span>)? *</li>') + while offset < limit: data = self.site.getUrl(address) for pg in contribRX.finditer(data): - yield wikipedia.Page(self.site,pg.group('title')) + url = pg.group('url') + oldid = url[url.find('&oldid=')+11:] + date = pg.group('date') + comment = pg.group('comment') + rollbackToken = pg.group('rollbackToken') + top = None + if pg.group('top'): + top = True + + # top, new, minor, should all go in a flags field + yield wikipedia.Page(self.site,pg.group('title')), oldid, date, comment, rollbackToken + offset += 1 if offset == limit: break