Revision: 7446 Author: alexsh Date: 2009-10-13 06:34:21 +0000 (Tue, 13 Oct 2009)
Log Message: ----------- add API support and sysop handle
Modified Paths: -------------- trunk/pywikipedia/watchlist.py
Modified: trunk/pywikipedia/watchlist.py =================================================================== --- trunk/pywikipedia/watchlist.py 2009-10-13 03:44:11 UTC (rev 7445) +++ trunk/pywikipedia/watchlist.py 2009-10-13 06:34:21 UTC (rev 7446) @@ -58,12 +58,58 @@ watchlist = get(site) return pageName in watchlist
-def refresh(site): +def refresh(site, sysop=False): + try: + if wikipedia.config.use_api and site.versionnumber() >= 10: + x = site.api_address() + del x + else: + raise NotImplementedError + except NotImplementedError: + _refreshOld(site) + # get watchlist special page's URL + if not site.loggedInAs(sysop=sysop): + site.forceLogin(sysop=sysop) + + params = { + 'action': 'query', + 'list': 'watchlist', + 'wllimit': wikipedia.config.special_page_limit, + 'wlprop': 'title', + } + + wikipedia.output(u'Retrieving watchlist for %s' % repr(site)) + #wikipedia.put_throttle() # It actually is a get, but a heavy one. + watchlist = [] + while True: + data = wikipedia.query.GetData(params, site, sysop=sysop) + if 'error' in data: + raise RuntimeError('ERROR: %s' % data) + watchlist.extend([w['title'] for w in data['query']['watchlist']]) + + if 'query-continue' in data: + params['wlstart'] = data['query-continue']['watchlist']['wlstart'] + else: + break + + # Save the watchlist to disk + # The file is stored in the watchlists subdir. Create if necessary. + if sysop: + f = open(wikipedia.config.datafilepath('watchlists', + 'watchlist-%s-%s-sysop.dat' % (site.family.name, site.lang)), 'w') + else: + f = open(wikipedia.config.datafilepath('watchlists', + 'watchlist-%s-%s.dat' % (site.family.name, site.lang)), 'w') + pickle.dump(watchlist, f) + f.close() + +def _refreshOld(site, sysop=False): + # get watchlist special page's URL path = site.watchlist_address() wikipedia.output(u'Retrieving watchlist for %s' % repr(site)) #wikipedia.put_throttle() # It actually is a get, but a heavy one. - watchlistHTML = site.getUrl(path) + watchlistHTML = site.getUrl(path, sysop=sysop)
wikipedia.output(u'Parsing watchlist') watchlist = [] @@ -74,21 +120,25 @@
# Save the watchlist to disk # The file is stored in the watchlists subdir. Create if necessary. - f = open(wikipedia.config.datafilepath('watchlists', + if sysop: + f = open(wikipedia.config.datafilepath('watchlists', + 'watchlist-%s-%s-sysop.dat' % (site.family.name, site.lang)), 'w') + else: + f = open(wikipedia.config.datafilepath('watchlists', 'watchlist-%s-%s.dat' % (site.family.name, site.lang)), 'w') pickle.dump(watchlist, f) f.close()
-def refresh_all(new = False): +def refresh_all(new = False, sysop=False): if new: import config wikipedia.output('Downloading All watchlists for your accounts in user-config.py'); for family in config.usernames: for lang in config.usernames[ family ]: - refresh(wikipedia.getSite( code = lang, fam = family ) ) + refresh(wikipedia.getSite( code = lang, fam = family ), sysop=sysop ) for family in config.sysopnames: for lang in config.sysopnames[ family ]: - refresh(wikipedia.getSite( code = lang, fam = family ) ) + refresh(wikipedia.getSite( code = lang, fam = family ), sysop=sysop )
else: import dircache, time @@ -105,17 +155,20 @@ def main(): all = False new = False + sysop = False for arg in wikipedia.handleArgs(): if arg == '-all' or arg == '-update': all = True elif arg == '-new': new = True + elif arg == '-sysop': + sysop = True if all: - refresh_all() + refresh_all(sysop=sysop) elif new: - refresh_all(new) + refresh_all(new, sysop=sysop) else: - refresh(wikipedia.getSite()) + refresh(wikipedia.getSite(), sysop=sysop)
watchlist = get(wikipedia.getSite()) wikipedia.output(u'%i pages in the watchlist.' % len(watchlist))