#!/usr/bin/env python # -*- coding: utf-8 -*- """ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . @author: mkaay """ try: from json import loads except ImportError: from simplejson import loads from urllib2 import build_opener from MultipartPostHandler import MultipartPostHandler PYLOAD_KEY = "9f65e7f381c3af2b076ea680ae96b0b7" opener = build_opener(MultipartPostHandler) class CaptchaTraderException(Exception): def __init__(self, err): self.err = err def getCode(self): return self.err def __str__(self): return "" % self.err def __repr__(self): return "" % self.err class CaptchaTrader(): SUBMIT_URL = "http://captchatrader.com/api/submit" RESPOND_URL = "http://captchatrader.com/api/respond" GETCREDITS_URL = "http://captchatrader.com/api/get_credits/username:%(user)s/password:%(password)s/" def __init__(self, user, password, api_key=PYLOAD_KEY): self.api_key = api_key self.user = user self.password = password def getCredits(self): json = opener.open(CaptchaTrader.GETCREDITS_URL % {"user":self.user, "password":self.password}).read() response = loads(json) if response[0] < 0: raise CaptchaTraderException(response[1]) else: return response[1] def submit(self, captcha, captchaType="file", match=None): if not self.api_key: raise CaptchaTraderException("No API Key Specified!") if type(captcha) == str and captchaType == "file": raise CaptchaTraderException("Invalid Type") assert captchaType in ("file", "url-jpg", "url-jpeg", "url-png", "url-bmp") json = opener.open(CaptchaTrader.SUBMIT_URL, data={"api_key":self.api_key, "username":self.user, "password":self.password, "value":captcha, "type":captchaType}).read() response = loads(json) if response[0] < 0: raise CaptchaTraderException(response[1]) class Result(): def __init__(self, api, ticket, result): self.api = api self.ticket = ticket self.result = result def getTicketID(self): return self.ticket def getResult(self): return self.result def success(self): self.sendResponse(True) def fail(self): self.sendResponse(False) def sendResponse(self, success): self.api.respond(self.ticket, success) return Result(self, response[0], response[1]) def respond(self, ticket, success): json = opener.open(CaptchaTrader.RESPOND_URL, data={"is_correct":1 if success else 0, "username":self.user, "password":self.password, "ticket":ticket}).read() response = loads(json) if response[0] < 0: raise CaptchaTraderException(response[1]) if __name__ == "__main__": ct = CaptchaTrader("", "") print "credits", ct.getCredits() print "testing..." result = ct.submit(open("test_captcha.jpg", "rb")) print "result", result.getResult() if result.getResult() == "bettand trifting": result.success() print "captcha recognized" else: result.fail() print "captcha not recognized"