2017-10-13 22:35:18 +00:00
|
|
|
|
import requests
|
2017-10-30 11:37:39 +00:00
|
|
|
|
import aiohttp
|
2017-10-13 22:35:18 +00:00
|
|
|
|
|
2019-03-15 17:09:12 +00:00
|
|
|
|
from python3_anticaptcha import get_balance_url, incorrect_captcha_url, get_queue_status_url
|
2017-10-13 22:35:18 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AntiCaptchaControl:
|
2018-11-01 15:20:22 +00:00
|
|
|
|
def __init__(self, anticaptcha_key: str):
|
2017-10-30 11:37:39 +00:00
|
|
|
|
"""
|
|
|
|
|
Синхронный метод работы с балансом и жалобами
|
|
|
|
|
:param anticaptcha_key: Ключ антикапчи
|
|
|
|
|
"""
|
2017-10-13 22:35:18 +00:00
|
|
|
|
self.ANTICAPTCHA_KEY = anticaptcha_key
|
2019-02-14 10:33:16 +00:00
|
|
|
|
|
|
|
|
|
def __enter__(self):
|
|
|
|
|
return self
|
|
|
|
|
|
|
|
|
|
def __exit__(self, exc_type, exc_value, traceback):
|
|
|
|
|
if exc_type:
|
|
|
|
|
return False
|
|
|
|
|
return True
|
2017-10-13 22:35:18 +00:00
|
|
|
|
|
|
|
|
|
def get_balance(self):
|
2019-03-15 17:09:12 +00:00
|
|
|
|
"""
|
2017-10-13 22:35:18 +00:00
|
|
|
|
Получение баланса аккаунта
|
|
|
|
|
:return: Возвращает актуальный баланс
|
2019-03-15 17:09:12 +00:00
|
|
|
|
"""
|
|
|
|
|
answer = requests.post(get_balance_url, json={'clientKey': self.ANTICAPTCHA_KEY})
|
2017-10-13 22:35:18 +00:00
|
|
|
|
|
2017-10-29 23:16:13 +00:00
|
|
|
|
return answer.json()
|
2017-10-13 22:35:18 +00:00
|
|
|
|
|
2018-11-01 15:20:22 +00:00
|
|
|
|
def complaint_on_result(self, reported_id: int):
|
2019-03-15 17:09:12 +00:00
|
|
|
|
"""
|
2017-10-14 01:49:49 +00:00
|
|
|
|
Позволяет отправить жалобу на неправильно решённую капчу.
|
2017-10-13 22:35:18 +00:00
|
|
|
|
:param reported_id: Отправляете ID капчи на которую нужно пожаловаться
|
|
|
|
|
:return: Возвращает True/False, в зависимости от результата
|
2019-03-15 17:09:12 +00:00
|
|
|
|
"""
|
2017-10-13 22:35:18 +00:00
|
|
|
|
payload = {'clientKey': self.ANTICAPTCHA_KEY,
|
|
|
|
|
'taskId': reported_id,
|
|
|
|
|
}
|
|
|
|
|
|
2019-03-15 17:09:12 +00:00
|
|
|
|
answer = requests.post(incorrect_captcha_url, json=payload)
|
|
|
|
|
|
|
|
|
|
return answer.json()
|
|
|
|
|
|
|
|
|
|
def get_queue_status(self, queue_id: int):
|
|
|
|
|
"""
|
|
|
|
|
Получение информации о загрузке очереди, в зависимости от ID очереди
|
|
|
|
|
|
|
|
|
|
Метод позволяет определить, нсколько в данный момент целесообразно загружать новое задание в очередь
|
|
|
|
|
Данные в выдаче кешируются на 10 секунд
|
|
|
|
|
|
|
|
|
|
Список ID очередей:
|
|
|
|
|
1 - стандартная ImageToText, язык английский
|
|
|
|
|
2 - стандартная ImageToText, язык русский
|
|
|
|
|
5 - Recaptcha NoCaptcha
|
|
|
|
|
6 - Recaptcha Proxyless
|
|
|
|
|
7 - Funcaptcha
|
|
|
|
|
10 - Funcaptcha Proxyless
|
|
|
|
|
|
|
|
|
|
Пример выдачи ответа:
|
|
|
|
|
{
|
|
|
|
|
"waiting":242,
|
|
|
|
|
"load":60.33,
|
|
|
|
|
"bid":"0.0008600982",
|
|
|
|
|
"speed":10.77,
|
|
|
|
|
"total": 610
|
|
|
|
|
}
|
|
|
|
|
:param queue_id: Номер очереди
|
|
|
|
|
:return: JSON-объект
|
|
|
|
|
"""
|
|
|
|
|
payload = {
|
|
|
|
|
"queueId": queue_id
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
answer = requests.post(get_queue_status_url, json=payload)
|
2017-10-13 22:35:18 +00:00
|
|
|
|
|
2017-10-30 11:37:39 +00:00
|
|
|
|
return answer.json()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class aioAntiCaptchaControl:
|
2018-11-01 15:20:22 +00:00
|
|
|
|
def __init__(self, anticaptcha_key: str):
|
2017-10-30 11:37:39 +00:00
|
|
|
|
"""
|
|
|
|
|
Асинхронный метод работы с балансом и жалобами
|
|
|
|
|
:param anticaptcha_key: Ключ антикапчи
|
|
|
|
|
"""
|
|
|
|
|
self.ANTICAPTCHA_KEY = anticaptcha_key
|
2019-02-14 10:33:16 +00:00
|
|
|
|
|
|
|
|
|
def __enter__(self):
|
|
|
|
|
return self
|
|
|
|
|
|
|
|
|
|
def __exit__(self, exc_type, exc_value, traceback):
|
|
|
|
|
if exc_type:
|
|
|
|
|
return False
|
|
|
|
|
return True
|
2017-10-30 11:37:39 +00:00
|
|
|
|
|
|
|
|
|
async def get_balance(self):
|
2019-03-15 17:09:12 +00:00
|
|
|
|
"""
|
2017-10-30 11:37:39 +00:00
|
|
|
|
Получение баланса аккаунта
|
|
|
|
|
:return: Возвращает актуальный баланс
|
2019-03-15 17:09:12 +00:00
|
|
|
|
"""
|
2017-10-30 11:37:39 +00:00
|
|
|
|
async with aiohttp.ClientSession() as session:
|
|
|
|
|
async with session.post(get_balance_url, json={'clientKey': self.ANTICAPTCHA_KEY}) as resp:
|
|
|
|
|
return await resp.json()
|
|
|
|
|
|
2018-11-01 15:20:22 +00:00
|
|
|
|
async def complaint_on_result(self, reported_id: int):
|
2019-03-15 17:09:12 +00:00
|
|
|
|
"""
|
2017-10-30 11:37:39 +00:00
|
|
|
|
Позволяет отправить жалобу на неправильно решённую капчу.
|
|
|
|
|
:param reported_id: Отправляете ID капчи на которую нужно пожаловаться
|
|
|
|
|
:return: Возвращает True/False, в зависимости от результата
|
2019-03-15 17:09:12 +00:00
|
|
|
|
"""
|
2017-10-30 11:37:39 +00:00
|
|
|
|
payload = {'clientKey': self.ANTICAPTCHA_KEY,
|
|
|
|
|
'taskId': reported_id,
|
|
|
|
|
}
|
|
|
|
|
async with aiohttp.ClientSession() as session:
|
|
|
|
|
async with session.post(incorrect_captcha_url, json=payload) as resp:
|
2019-02-14 10:33:16 +00:00
|
|
|
|
return await resp.json()
|
2019-03-15 17:09:12 +00:00
|
|
|
|
|
|
|
|
|
async def get_queue_status(self, queue_id: int):
|
|
|
|
|
"""
|
|
|
|
|
Получение информации о загрузке очереди, в зависимости от ID очереди
|
|
|
|
|
|
|
|
|
|
Метод позволяет определить, нсколько в данный момент целесообразно загружать новое задание в очередь
|
|
|
|
|
Данные в выдаче кешируются на 10 секунд
|
|
|
|
|
|
|
|
|
|
Список ID очередей:
|
|
|
|
|
1 - стандартная ImageToText, язык английский
|
|
|
|
|
2 - стандартная ImageToText, язык русский
|
|
|
|
|
5 - Recaptcha NoCaptcha
|
|
|
|
|
6 - Recaptcha Proxyless
|
|
|
|
|
7 - Funcaptcha
|
|
|
|
|
10 - Funcaptcha Proxyless
|
|
|
|
|
|
|
|
|
|
Пример выдачи ответа:
|
|
|
|
|
{
|
|
|
|
|
"waiting":242,
|
|
|
|
|
"load":60.33,
|
|
|
|
|
"bid":"0.0008600982",
|
|
|
|
|
"speed":10.77,
|
|
|
|
|
"total": 610
|
|
|
|
|
}
|
|
|
|
|
:param queue_id: Номер очереди
|
|
|
|
|
:return: JSON-объект
|
|
|
|
|
"""
|
|
|
|
|
payload = {
|
|
|
|
|
"queueId": queue_id
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async with aiohttp.ClientSession() as session:
|
|
|
|
|
async with session.post(get_queue_status_url, json=payload) as resp:
|
|
|
|
|
return await resp.json()
|
|
|
|
|
|