Python
30 Oct 2009
 

Работа с antigate.com

 
 
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/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