From e342744272607b4af0e9dcedd4c84a631f62d4ae Mon Sep 17 00:00:00 2001 From: Andrei Date: Sat, 14 Oct 2017 01:35:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=84=D0=B0=D0=B9=D0=BB=20=D0=BA=D0=BE=D0=BD=D1=84?= =?UTF-8?q?=D0=B8=D0=B3=D0=B0=20=D0=B8=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B1=D0=B0=D0=BB=D0=B0=D0=BD=D0=B0=D1=81?= =?UTF-8?q?=D0=BE=D0=BC=20=D0=B0=D0=BA=D0=BA=D0=B0=D1=83=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=20=D0=B8=20=D0=B6=D0=B0=D0=BB=D0=BE=D0=B1=D0=B0=D0=BC=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BA=D0=B0=D0=BF=D1=87=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 7 +++ python3_anticaptcha/AntiCaptchaControl.py | 45 +++++++++++++++++ python3_anticaptcha/__init__.py | 0 python3_anticaptcha/config.py | 16 ++++++ python3_anticaptcha/errors.py | 61 +++++++++++++++++++++++ setup.py | 4 +- 6 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 python3_anticaptcha/AntiCaptchaControl.py create mode 100644 python3_anticaptcha/__init__.py create mode 100644 python3_anticaptcha/config.py create mode 100644 python3_anticaptcha/errors.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9194791 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +# Created by .ignore support plugin (hsz.mobi) +.idea/.name +.idea/PythonAntiCaptcha.iml +.idea/inspectionProfiles/ +.idea/misc.xml +.idea/modules.xml +.idea/workspace.xml diff --git a/python3_anticaptcha/AntiCaptchaControl.py b/python3_anticaptcha/AntiCaptchaControl.py new file mode 100644 index 0000000..d8d8937 --- /dev/null +++ b/python3_anticaptcha/AntiCaptchaControl.py @@ -0,0 +1,45 @@ +import requests +import time + +# from .errors import RuCaptchaError +from config import get_balance_url, incorrect_captcha_url + +from config import TEST_KEY + + +class AntiCaptchaControl: + def __init__(self, anticaptcha_key): + self.ANTICAPTCHA_KEY = anticaptcha_key + self.get_balance_url = get_balance_url + + def get_balance(self): + ''' + Получение баланса аккаунта + :return: Возвращает актуальный баланс + ''' + answer = requests.post(get_balance_url, json = {'clientKey': self.ANTICAPTCHA_KEY}) + + if answer.json()['errorId'] == 0: + return answer.json()['balance'] + else: + return answer.json() + + def complaint_on_result(self, reported_id): + ''' + Позволяет отправить жалобуна неправильно решённую капчу. + :param reported_id: Отправляете ID капчи на которую нужно пожаловаться + :return: Возвращает True/False, в зависимости от результата + ''' + payload = {'clientKey': self.ANTICAPTCHA_KEY, + 'taskId': reported_id, + } + + answer = requests.post(incorrect_captcha_url, json = payload) + + if answer.json()['errorId'] == 0: + return True + else: + return False + + +print(AntiCaptchaControl(anticaptcha_key = TEST_KEY).complaint_on_result(reported_id = -5)) diff --git a/python3_anticaptcha/__init__.py b/python3_anticaptcha/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python3_anticaptcha/config.py b/python3_anticaptcha/config.py new file mode 100644 index 0000000..e988144 --- /dev/null +++ b/python3_anticaptcha/config.py @@ -0,0 +1,16 @@ +# Адрес для создания задачи +create_task_url = "https://api.anti-captcha.com/createTask" +# Адрес для получения ответа +get_result_url = "https://api.anti-captcha.com/getTaskResult" +# Адрес для получения баланса +get_balance_url = "https://api.anti-captcha.com/getBalance" +# Адрес для отправки жалобы на неверное решение капчи +incorrect_captcha_url = "https://api.anti-captcha.com/reportIncorrectImageCaptcha" +# Адрес для получения информации об очереди +get_queue_status_url = "https://api.anti-captcha.com/getQueueStats" +# ключ приложения +app_key = "1899" + + + +TEST_KEY = 'ae23fffcfaa29b170e3843e3a486ef19' diff --git a/python3_anticaptcha/errors.py b/python3_anticaptcha/errors.py new file mode 100644 index 0000000..d246d19 --- /dev/null +++ b/python3_anticaptcha/errors.py @@ -0,0 +1,61 @@ +class AntiCaptchaError(Exception): + """Базовый класс для всех исключений в этом модуле.""" + def __init__(self, description): + if description=='ERROR_WRONG_USER_KEY': + print(WrongUserKeyError.__doc__) + + + +class WrongUserKeyError(AntiCaptchaError): + """Исключение порождается при неправильном RuCaptcha KEY. + Вы указали значение параметра key в неверном формате, ключ должен содержать 32 символа. + Прекратите отправку запросов и проверьте ваш ключ API. + + ERROR_WRONG_USER_KEY - исключение из таблицы. + """ + +''' +1 ERROR_KEY_DOES_NOT_EXIST Авторизационный ключ не существует в системе или имеет неверный формат (длина не равняется 32 байтам) +2 ERROR_NO_SLOT_AVAILABLE Нет свободных работников в данный момент, попробуйте позже либо повысьте свою максимальную ставку здесь +3 ERROR_ZERO_CAPTCHA_FILESIZE Размер капчи которую вы загружаете менее 100 байт +4 ERROR_TOO_BIG_CAPTCHA_FILESIZE Размер капчи которую вы загружаете более 500,000 байт +10 ERROR_ZERO_BALANCE Баланс учетной записи ниже нуля или равен нулю +11 ERROR_IP_NOT_ALLOWED Запрос с этого IP адреса с текущим ключом отклонен. Управление доступом по IP находится здесь +12 ERROR_CAPTCHA_UNSOLVABLE 5 разных работников не смогли разгадать капчу, задание остановлено +13 ERROR_BAD_DUPLICATES Не хватило заданного количества дублей капчи для функции 100% распознавания. +14 ERROR_NO_SUCH_METHOD Запрос в API выполнен на несуществующий метод +15 ERROR_IMAGE_TYPE_NOT_SUPPORTED Формат капчи не распознан по EXIF заголовку либо не поддерживается. Допустимые форматы: JPG, GIF, PNG +16 ERROR_NO_SUCH_CAPCHA_ID Капча с таким ID не была найдена в системе. Убедитесь что вы запрашиваете состояние капчи в течение 300 секунд после загрузки. +20 ERROR_EMPTY_COMMENT Отсутствует комментарий в параметрах рекапчи версии API 1 +21 ERROR_IP_BLOCKED Доступ к API с этого IP запрещен из-за большого количества ошибок. Узнать причину можно здесь. +22 ERROR_TASK_ABSENT Отсутствует задача в методе createTask. +23 ERROR_TASK_NOT_SUPPORTED Тип задачи не поддерживается или указан не верно. +24 ERROR_INCORRECT_SESSION_DATA Неполные или некорректные данные об эмулируемом пользователе. Все требуемые поля не должны быть пустыми. +25 ERROR_PROXY_CONNECT_REFUSED Не удалось подключиться к прокси-серверу - отказ в подключении +26 ERROR_PROXY_CONNECT_TIMEOUT Таймаут подключения к прокси-серверу +27 ERROR_PROXY_READ_TIMEOUT Таймаут операции чтения прокси-сервера. +28 ERROR_PROXY_BANNED Прокси забанен на целевом сервисе капчи +29 ERROR_PROXY_TRANSPARENT Ошибка проверки прокси. Прокси должен быть не прозрачным, скрывать адрес конечного пользователя. +В противном случае Google будет фильтровать запросы с IP нашего сервера. +30 ERROR_RECAPTCHA_TIMEOUT Таймаут загрузки скрипта рекапчи, проблема либо в медленном прокси, либо в медленном сервере Google +31 ERROR_RECAPTCHA_INVALID_SITEKEY Ошибка получаемая от сервера рекапчи. Неверный/невалидный sitekey. +32 ERROR_RECAPTCHA_INVALID_DOMAIN Ошибка получаемая от сервера рекапчи. Домен не соответствует sitekey. +33 ERROR_RECAPTCHA_OLD_BROWSER Для задачи используется User-Agent неподдерживаемого рекапчей браузера. +34 ERROR_RECAPTCHA_STOKEN_EXPIRED Параметр stoken устарел. Модифицируйте свое приложение, оно должно использовать stoken как можно быстрее. +35 ERROR_PROXY_HAS_NO_IMAGE_SUPPORT Прокси не поддерживает передачу изображений с серверов Google +36 ERROR_PROXY_INCOMPATIBLE_HTTP_VERSION Прокси не поддерживает длинные (длиной 2000 байт) GET запросы и не поддерживает SSL подключения +37 ERROR_FACTORY_SERVER_API_CONNECTION_FAILED Не смогли подключиться к API сервера фабрики в течени 5 секунд. +38 ERROR_FACTORY_SERVER_BAD_JSON +Неправильный JSON ответ фабрики, что-то сломалось. +39 ERROR_FACTORY_SERVER_ERRORID_MISSING API фабрики не вернул обязательное поле errorId +40 ERROR_FACTORY_SERVER_ERRORID_NOT_ZERO Ожидали errorId = 0 в ответе API фабрики, получили другое значение. +41 ERROR_FACTORY_MISSING_PROPERTY Значения некоторых требуемых полей в запросе к фабрике отсутствуют. Клиент должен прислать все требуемы поля. +42 ERROR_FACTORY_PROPERTY_INCORRECT_FORMAT +Тип значения не соответствует ожидаемому в структуре задачи фабрики. Клиент должен прислать значение с требуемым типом. +43 ERROR_FACTORY_ACCESS_DENIED Доступ к управлению фабрикой принадлежит другой учетной записи. Проверьте свой ключ доступа. +44 ERROR_FACTORY_SERVER_OPERATION_FAILED Общий код ошибки сервера фабрики. +45 ERROR_FACTORY_PLATFORM_OPERATION_FAILED Общий код ошибки платформы. +46 ERROR_FACTORY_PROTOCOL_BROKEN Ошибка в протоколе во время выполнения задачи фабрики. +47 ERROR_FACTORY_TASK_NOT_FOUND Задача не найдена или недоступна для этой операции. +48 ERROR_FACTORY_IS_SANDBOXED Фабрика находится в режиме песочницы, создание задач доступно только для владельца фабрики. Переведите фабрику в боевой режим, чтобы сделать ее доступной для всех клиентов. +''' \ No newline at end of file diff --git a/setup.py b/setup.py index 135fe6b..94656e1 100644 --- a/setup.py +++ b/setup.py @@ -1,11 +1,11 @@ from setuptools import setup setup( - name='python-anticaptcha', + name='python3-anticaptcha', version='0.9.8.b', author='AndreiDrang, redV0ID', - packages=['python_anticaptcha'], + packages=['python3_anticaptcha'], install_requires=[ 'requests>=2.18', ],