#!/usr/bin/env python
#-*- encoding: UTF-8 -*-
class ACSERVICE:
def __init__(self):
u"""Класс для роботи з антикапчею/Класс для работы с антикапчей"""
import random
import httplib
import string
import time
self.__Httplib = httplib
self.__Random = random
self.__String = string
self.__Sleep = time.sleep
self.RESPONSES_UA = {"ERROR_WRONG_USER_KEY": u"Ви використали невірний captcha ключ у запиті",
"ERROR_NO_SLOT_AVAILABLE": u"Усі працівники на даний момент зайняті, спробуйте пізніше",
"ERROR_ZERO_CAPTCHA_FILESIZE": u"Розмір капчі, яку ви відправили дорівнює нулю",
"ERROR_TOO_BIG_CAPTCHA_FILESIZE": u"Ваша капча перевищує ліміт у 30 кб",
"ERROR_WRONG_FILE_EXTENSION": u"Файловий формат вашої капчі невірний, дозволяються лише формати gif,jpg,png",
"ERROR_WRONG_ID_FORMAT": u"ID капчі, який ви передаєте не є числовим значенням",
"ERROR_NO_SUCH_CAPCHA_ID": u"Капчі з таким ID не існує у базі",
"ERROR_URL_METHOD_FORBIDDEN": u"URL метод забронено через періодичні перенавантаження системи",
"CAPCHA_NOT_READY": u"Капча ещ не розгадана",
"OK_REPORT_RECORDED": u"Ваша скарга на капчу записана"}
self.RESPONSES_RU = {"ERROR_WRONG_USER_KEY": u"Вы использовали неверный captcha ключ в запросе",
"ERROR_NO_SLOT_AVAILABLE": u"Все работники в данный момент заняты, попробуйте позже",
"ERROR_ZERO_CAPTCHA_FILESIZE": u"Размер капчи которую вы закачиваете равен нулю",
"ERROR_TOO_BIG_CAPTCHA_FILESIZE": u"Ваша капча превышает лимит в 30 кб",
"ERROR_WRONG_FILE_EXTENSION": u"Рсширение вашей капчи неверное, разрешены только форматы gif,jpg,png",
"ERROR_WRONG_ID_FORMAT": u"ID капчи, который вы передаете не является числом",
"ERROR_NO_SUCH_CAPCHA_ID": u"Капчи с таким ID не существует в базе",
"ERROR_URL_METHOD_FORBIDDEN": u"URL метод убран из-за периодических перегрузок системы",
"CAPCHA_NOT_READY": u"Капча еще не разгадана",
"OK_REPORT_RECORDED": u"Ваша жалоба на капчу записана"}
self.KEY = ""
self.DOMAIN = "http://www.antigate.com"
self.PROXY = None
self.SLEEPTIME = 1
def get_balance(self):
u"Атрибут отримання балансу/Атрибут получения баланса"
request = "{domain}/res.php?key={key}&action=getbalance".format(domain=self.DOMAIN, key=self.KEY)
if self.PROXY:
connection = self.__Httplib.HTTPConnection(self.PROXY.split(":")[0], self.PROXY.split(":")[1])
else:
connection = self.__Httplib.HTTPConnection("{0}:80".format(self.DOMAIN).replace("http://", ""))
try:
connection.request("GET", request)
data = connection.getresponse().read()
except:
data = "ERROR"
return data.strip("\r\n")
def report_bad(self, captcha_id):
u"Атрибут скарги на капчу (за ID)/Атрибут жалобы на капчу(по ID)"
request = "{domain}/res.php?key={key}&action=reportbad&id={captcha_id}".format(domain=self.DOMAIN, key=self.KEY, captcha_id=captcha_id)
if self.PROXY:
connection = self.__Httplib.HTTPConnection(self.PROXY.split(":")[0], self.PROXY.split(":")[1])
else:
connection = self.__Httplib.HTTPConnection("{0}:80".format(self.DOMAIN).replace("http://", ""))
try:
connection.request("GET", request)
data = connection.getresponse().read()
except:
data = "ERROR"
return data.strip("\r\n")
def get(self, captcha_id, maxtries=40):
u"Атрибут отримання тексту капчі за її ID/Атрибут получения капчи по её ID"
request = "{domain}/res.php?key={key}&action=get&id={captcha_id}".format(domain=self.DOMAIN, key=self.KEY, captcha_id=captcha_id)
if self.PROXY:
connection = self.__Httplib.HTTPConnection(self.PROXY.split(":")[0], self.PROXY.split(":")[1])
else:
connection = self.__Httplib.HTTPConnection("{0}:80".format(self.DOMAIN).replace("http://", ""))
counter = 0
while counter != maxtries:
try:
connection.request("GET", request)
data = connection.getresponse().read()
except:
counter += 1
self.__Sleep(self.SLEEPTIME)
else:
data = data.strip("\r\n")
if data.startswith("OK|"):
data = data.split("|")[1]
break
counter += 1
self.__Sleep(self.SLEEPTIME)
return data
def send(self, captcha_body, maxtries=40):
u"Атрибут для відправлення тіла капчі на розгадування/Атрибут для отправки тела капчи на расшифровку"
boundary = ""
for _ in xrange(14):
boundary = boundary+self.__Random.choice(self.__String.hexdigits)
request = "{domain}/in.php".format(domain=self.DOMAIN)
headers = {"Content-Type":"multipart/form-data; boundary={boundary}".format(boundary=boundary)}
request_body = '''--{boundary}\r\n\
Content-Disposition: form-data; name="method"\r\n\r\n\
post\r\n\
--{boundary}\r\n\
Content-Disposition: form-data; name="key"\r\n\r\n\
{key}\r\n\
--{boundary}\r\n\
Content-Disposition: form-data; name="file"; filename="capcha.jpg"\r\n\
Content-Type: image/pjpeg\r\n\r\n\
{content}\r\n\
--{boundary}\r\n\r\n'''.format(boundary=boundary, key=self.KEY, domain=self.DOMAIN, content=captcha_body, content_length=len(captcha_body))
if self.PROXY:
connection = self.__Httplib.HTTPConnection(self.PROXY.split(":")[0], self.PROXY.split(":")[1])
else:
connection = self.__Httplib.HTTPConnection("{0}:80".format(self.DOMAIN).replace("http://", ""))
counter = 0
while counter != maxtries:
try:
connection.request("POST", request, request_body, headers=headers)
data = connection.getresponse().read()
except:
counter += 1
self.__Sleep(self.SLEEPTIME)
else:
data = data.strip("\r\n")
if data.startswith("OK|"):
data = data.split("|")[1]
break
elif data == "ERROR_WRONG_USER_KEY":
break
elif data == "ERROR_WRONG_FILE_EXTENSION":
break
elif data == "ERROR_TOO_BIG_CAPTCHA_FILESIZE":
break
else:
counter += 1
self.__Sleep(self.SLEEPTIME)
return data
Работа с antigate.com