Revision: 7093 Author: alexsh Date: 2009-07-25 09:39:25 +0000 (Sat, 25 Jul 2009)
Log Message: ----------- site().solveCaptcha():Add API Captcha solution accroding MW ConfirmEdit extension API details.
Modified Paths: -------------- trunk/pywikipedia/wikipedia.py
Modified: trunk/pywikipedia/wikipedia.py =================================================================== --- trunk/pywikipedia/wikipedia.py 2009-07-25 08:38:23 UTC (rev 7092) +++ trunk/pywikipedia/wikipedia.py 2009-07-25 09:39:25 UTC (rev 7093) @@ -4599,24 +4599,38 @@ return '&'.join(l)
def solveCaptcha(self, data): - captchaW = re.compile('<label for="wpCaptchaWord">(?P<question>[^<]*)</label>') - captchaR = re.compile('<input type="hidden" name="wpCaptchaId" id="wpCaptchaId" value="(?P<id>\d+)" />') - match = captchaR.search(data) - if match: - id = match.group('id') - match = captchaW.search(data) + if type(data) == dict: # API Mode result + if data['result'].has_key("captcha"): + type = data['result']['captcha']['type'] + id = data['result']['captcha']['id'] + if type in ['simple', 'math', 'question']: + answer = input('What is the answer to the captcha "%s" ?' % data['result']['captcha']['question']) + elif type == 'image': + url = self.protocol() + '://' + self.hostname() + self.captcha_image_address(id) + answer = ui.askForCaptcha(url) + else: #no captcha id result, maybe ReCaptcha. + raise CaptchaError('We have been prompted for a ReCaptcha, but pywikipedia does not yet support ReCaptchas') + return {'id':id, 'answer':answer} + return None + else: + captchaW = re.compile('<label for="wpCaptchaWord">(?P<question>[^<]*)</label>') + captchaR = re.compile('<input type="hidden" name="wpCaptchaId" id="wpCaptchaId" value="(?P<id>\d+)" />') + match = captchaR.search(data) if match: - answer = input('What is the answer to the captcha "%s" ?' % match.group('question')) - else: - if not config.solve_captcha: - raise CaptchaError(id) - url = self.protocol() + '://' + self.hostname() + self.captcha_image_address(id) - answer = ui.askForCaptcha(url) - return {'id':id, 'answer':answer} - Recaptcha = re.compile('<script type="text/javascript" src="http://api%5C.recaptcha%5C.net/%5B%5E%22%5D*%22%3E</script>') - if Recaptcha.search(data): - raise CaptchaError('We have been prompted for a ReCaptcha, but pywikipedia does not yet support ReCaptchas') - return None + id = match.group('id') + match = captchaW.search(data) + if match: + answer = input('What is the answer to the captcha "%s" ?' % match.group('question')) + else: + if not config.solve_captcha: + raise CaptchaError(id) + url = self.protocol() + '://' + self.hostname() + self.captcha_image_address(id) + answer = ui.askForCaptcha(url) + return {'id':id, 'answer':answer} + Recaptcha = re.compile('<script type="text/javascript" src="http://api%5C.recaptcha%5C.net/%5B%5E%22%5D*%22%3E</script>') + if Recaptcha.search(data): + raise CaptchaError('We have been prompted for a ReCaptcha, but pywikipedia does not yet support ReCaptchas') + return None
def postForm(self, address, predata, sysop=False, cookies = None): """Post http form data to the given address at this site.
pywikipedia-svn@lists.wikimedia.org