Revision: 7512
Author: alexsh
Date: 2009-10-19 16:06:13 +0000 (Mon, 19 Oct 2009)
Log Message:
-----------
fix _load() ver 1.11 query bug, newpages dict and combine randompage and randomredirectpage
Modified Paths:
--------------
trunk/pywikipedia/wikipedia.py
Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py 2009-10-19 15:36:45 UTC (rev 7511)
+++ trunk/pywikipedia/wikipedia.py 2009-10-19 16:06:13 UTC (rev 7512)
@@ -5823,8 +5823,7 @@
if (not self._mediawiki_messages) or forceReload:
api = False
if verbose:
- output(
- u"Retrieving mediawiki messages from Special:Allmessages")
+ output(u"Retrieving mediawiki messages from Special:Allmessages")
# Only MediaWiki r27393/1.12 and higher support XML output for Special:Allmessages
if self.versionnumber() < 12:
usePHP = True
@@ -5860,7 +5859,7 @@
retry_idle_time = 1
while True:
- if api and self.versionnumber() >= 12 or self.versionnumber() >= 16:
+ if api and self.versionnumber() >= 12:
params = {
'action': 'query',
'meta': 'allmessages',
@@ -5964,17 +5963,22 @@
# Get data
# API Userinfo is available from version 1.11
# preferencetoken available from 1.14
- if config.use_api and self.versionnumber() >= 12:
+ if config.use_api and self.versionnumber() >= 11:
#Query userinfo
params = {
'action': 'query',
'meta': 'userinfo',
- 'uiprop': ['blockinfo','groups','rights','hasmsg','ratelimits'],
+ 'uiprop': ['blockinfo','groups','rights','hasmsg'],
}
+ if self.versionnumber() >= 12:
+ params['uiprop'].append('ratelimits')
if self.versionnumber() >= 14:
params['uiprop'].append('preferencestoken')
- text = query.GetData(params, self, sysop=sysop)['query']['userinfo']
+ if self.versionnumber() == 11:
+ text = query.GetData(params, self, sysop=sysop)['userinfo']
+ else:
+ text = query.GetData(params, self, sysop=sysop)['query']['userinfo']
self._getUserData(text, sysop = sysop, force = force)
else:
url = self.edit_address('Non-existing_page')
@@ -6058,18 +6062,16 @@
if np['pageid'] not in seen:
seen.add(np['pageid'])
page = Page(self, np['title'], defaultNamespace=np['ns'])
- yield page, np['timestamp'], np['timestamp'], u'', np['user'], np['comment']
+ yield page, np['timestamp'], np['newlen'], u'', np['user'], np['comment']
else:
path = self.newpages_address(n=number, namespace=namespace)
# The throttling is important here, so always enabled.
get_throttle()
html = self.getUrl(path)
- entryR = re.compile(
-'<li[^>]*>(?P<date>.+?) \S*?<a href=".+?"'
-' title="(?P<title>.+?)">.+?</a>.+?[\(\[](?P<length>[\d,.]+)[^\)\]]*[\)\]]'
-' .?<a href=".+?" title=".+?:(?P<username>.+?)">'
- )
+ entryR = re.compile('<li[^>]*>(?P<date>.+?) \S*?<a href=".+?"'
+ ' title="(?P<title>.+?)">.+?</a>.+?[\(\[](?P<length>[\d,.]+)[^\)\]]*[\)\]]'
+ ' .?<a href=".+?" title=".+?:(?P<username>.+?)">')
for m in entryR.finditer(html):
date = m.group('date')
title = m.group('title')
@@ -6179,8 +6181,7 @@
path = self.ancientpages_address(n=number)
get_throttle()
html = self.getUrl(path)
- entryR = re.compile(
-'<li><a href=".+?" title="(?P<title>.+?)">.+?</a> (?P<date>.+?)</li>')
+ entryR = re.compile('<li><a href=".+?" title="(?P<title>.+?)">.+?</a> (?P<date>.+?)</li>')
for m in entryR.finditer(html):
title = m.group('title')
date = m.group('date')
@@ -6468,7 +6469,7 @@
if not repeat:
break
- def randompage(self):
+ def randompage(self, redirect = False):
if config.use_api and self.versionnumber() >= 12:
params = {
'action': 'query',
@@ -6477,32 +6478,24 @@
'rnlimit': '1',
#'': '',
}
+ if redirect:
+ params['rnredirect'] = 1
+
data = query.GetData(params, self)
return Page(self, data['query']['random'][0]['title'])
else:
- """Yield random page via Special:Random"""
- html = self.getUrl(self.random_address())
+ if redirect:
+ """Yield random redirect page via Special:RandomRedirect."""
+ html = self.getUrl(self.randomredirect_address())
+ else:
+ """Yield random page via Special:Random"""
+ html = self.getUrl(self.random_address())
m = re.search('var wgPageName = "(?P<title>.+?)";', html)
if m is not None:
return Page(self, m.group('title'))
def randomredirectpage(self):
- if config.use_api and self.versionnumber() >= 12:
- params = {
- 'action': 'query',
- 'list': 'random',
- #'rnnamespace': '0',
- 'rnlimit': '1',
- 'rnredirect': '1',
- }
- data = query.GetData(params, self)
- return Page(self, data['query']['random'][0]['title'])
- else:
- """Yield random redirect page via Special:RandomRedirect."""
- html = self.getUrl(self.randomredirect_address())
- m = re.search('var wgPageName = "(?P<title>.+?)";', html)
- if m is not None:
- return Page(self, m.group('title'))
+ return self.randompage(redirect = True)
def allpages(self, start='!', namespace=None, includeredirects=True,
throttle=True):
@@ -6615,8 +6608,7 @@
iend = returned_html.index(end_s,ibegin + 3)
except ValueError:
if monobook_error:
- raise ServerError(
-"Couldn't extract allpages special page. Make sure you're using MonoBook skin.")
+ raise ServerError("Couldn't extract allpages special page. Make sure you're using MonoBook skin.")
else:
# No list of wikilinks
break