Skip to content

Commit

Permalink
Merge pull request #57 from AndreiDrang/upd_methods
Browse files Browse the repository at this point in the history
Upd methods and tests
  • Loading branch information
AndreiDrang authored Mar 11, 2020
2 parents 4b3bf0a + 03c40c0 commit 6686eb1
Show file tree
Hide file tree
Showing 16 changed files with 327 additions and 313 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,6 @@ For tests:
1. Clon repo;
2. ```bash
export anticaptcha_key=SERVICE_KEY
pip install pytest pytest-asyncio
pip install pytest pytest-asyncio requests_mock
pytest tests
```
169 changes: 157 additions & 12 deletions python3_anticaptcha/AntiCaptchaControl.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,39 @@
import aiohttp
import requests

from python3_anticaptcha import (
get_balance_url,
get_app_stats_url,
get_queue_status_url,
incorrect_recaptcha_url,
incorrect_imagecaptcha_url,
)
# Адрес для получения баланса
get_balance_url = "https://api.anti-captcha.com/getBalance"
# Адрес для отправки жалобы на неверное решение капчи-изображения
incorrect_imagecaptcha_url = "https://api.anti-captcha.com/reportIncorrectImageCaptcha"
# Адрес для отправки жалобы на неверное решение ReCaptcha
incorrect_recaptcha_url = "https://api.anti-captcha.com/reportIncorrectRecaptcha"
# Адрес для получения информации о очереди
get_queue_status_url = "https://api.anti-captcha.com/getQueueStats"
# С помощью этого метода можно получить статистику трат за последние 24 часа.
get_spend_stats_url = "https://api.anti-captcha.com/getSpendingStats"
# Адрес для получения информации о приложении
get_app_stats_url = "https://api.anti-captcha.com/getAppStats"
# С помощью этого метода можно получить статистику трат за последние 24 часа.
send_funds_url = "https://api.anti-captcha.com/sendFunds"

# available app stats mods
mods = ("errors", "views", "downloads", "users", "money")
# available complaint captcha types
complaint_types = ("image", "recaptcha")
# availalbe queue ID's
queue_ids = (1, 2, 5, 6, 7, 10)
queue_ids = (1, 2, 5, 6, 7, 10, 11, 12, 13, 18, 19, 20)

queues_names = (
"English ImageToText",
"Russian ImageToText",
"Recaptcha Proxy-on",
"Recaptcha Proxyless",
"FunCaptcha",
"Funcaptcha Proxyless",
"Square Net Task",
"GeeTest Proxy-on",
"GeeTest Proxyless",
)


class AntiCaptchaControl:
Expand Down Expand Up @@ -44,6 +63,56 @@ def get_balance(self) -> dict:

return answer.json()

def send_funds(
self, accountLogin: str = None, accountEmail: str = None, amount: float = None
) -> dict:
"""
Отправить средства другому пользователю
В вашем аккаунте должна быть включена опция отправки средств через API.
Включается через службу поддержки, нужно указать причину зачем вам это требуется.
:param accountLogin: Логин целевого аккаунта
:param accountEmail: Адрес почты целевого аккаунта
:param amount: Сумма
"""
payload = {
"clientKey": self.ANTICAPTCHA_KEY,
"accountLogin": accountLogin,
"accountEmail": accountEmail,
"amount": amount,
}
# get response
answer = requests.post(send_funds_url, json=payload, verify=False)
return answer.json()

def get_spend_stats(
self, date: int = None, queue: str = None, softId: int = None, ip: str = None
) -> dict:
f"""
С помощью этого метода можно получить статистику трат за последние 24 часа.
:param date: Unix timestamp начала периода 24-х часового отчета
:param queue: Имя очереди, может быть найдено в статистике Антикапчи.
Если не указано, то возвращается суммированная статистика по всем очередям.
:param softId: ID приложения из Developers Center
:param ip: IP с которого шли запросы к API
:return: Возвращает словарь с данными трат
"""
if queue and queue not in queues_names:
raise ValueError(
f"\nWrong `queue` parameter. Valid params: {queues_names}."
f"\n\tYour param - `{queue}`"
)
payload = {
"clientKey": self.ANTICAPTCHA_KEY,
"date": date,
"queue": queue,
"softId": softId,
"ip": ip,
}
# get response
answer = requests.post(get_spend_stats_url, json=payload, verify=False)
return answer.json()

def get_app_stats(self, softId: int, mode: str = "errors") -> dict:
"""
Получение статистики приложения
Expand Down Expand Up @@ -98,6 +167,12 @@ def get_queue_status(queue_id: int) -> dict:
6 - Recaptcha Proxyless
7 - Funcaptcha
10 - Funcaptcha Proxyless
11 - Square Net Task
12 - GeeTest Proxy-On
13 - GeeTest Proxyless
18 - Recaptcha V3 s0.3
19 - Recaptcha V3 s0.7
20 - Recaptcha V3 s0.9
Пример выдачи ответа:
{
Expand Down Expand Up @@ -148,7 +223,68 @@ async def get_balance(self) -> dict:
async with session.post(
get_balance_url, json={"clientKey": self.ANTICAPTCHA_KEY}
) as resp:
return await resp.json()
if await resp.text():
return await resp.json()
else:
return {"errorId": 1}

async def send_funds(
self, accountLogin: str = None, accountEmail: str = None, amount: float = None
) -> dict:
"""
Отправить средства другому пользователю
В вашем аккаунте должна быть включена опция отправки средств через API.
Включается через службу поддержки, нужно указать причину зачем вам это требуется.
:param accountLogin: Логин целевого аккаунта
:param accountEmail: Адрес почты целевого аккаунта
:param amount: Сумма
"""
payload = {
"clientKey": self.ANTICAPTCHA_KEY,
"accountLogin": accountLogin,
"accountEmail": accountEmail,
"amount": amount,
}
# get response
async with aiohttp.ClientSession() as session:
async with session.post(send_funds_url, json=payload) as resp:
if await resp.text():
return await resp.json()
else:
return {"errorId": 1}

async def get_spend_stats(
self, date: int = None, queue: str = None, softId: int = None, ip: str = None
) -> dict:
f"""
С помощью этого метода можно получить статистику трат за последние 24 часа.
:param date: Unix timestamp начала периода 24-х часового отчета
:param queue: Имя очереди, может быть найдено в статистике Антикапчи.
Если не указано, то возвращается суммированная статистика по всем очередям.
:param softId: ID приложения из Developers Center
:param ip: IP с которого шли запросы к API
:return: Возвращает словарь с данными трат
"""
if queue and queue not in queues_names:
raise ValueError(
f"\nWrong `queue` parameter. Valid params: {queues_names}."
f"\n\tYour param - `{queue}`"
)
payload = {
"clientKey": self.ANTICAPTCHA_KEY,
"date": date,
"queue": queue,
"softId": softId,
"ip": ip,
}
# get response
async with aiohttp.ClientSession() as session:
async with session.post(get_spend_stats_url, json=payload) as resp:
if await resp.text():
return await resp.json()
else:
return {"errorId": 1}

async def get_app_stats(self, softId: int, mode: str = "errors") -> dict:
"""
Expand Down Expand Up @@ -185,12 +321,18 @@ async def complaint_on_result(self, reported_id: int, captcha_type: str = "image
if captcha_type == "image":
async with aiohttp.ClientSession() as session:
async with session.post(incorrect_imagecaptcha_url, json=payload) as resp:
return await resp.json()
if await resp.text():
return await resp.json()
else:
return {"errorId": 1}
# complaint on re-captcha
elif captcha_type == "recaptcha":
async with aiohttp.ClientSession() as session:
async with session.post(incorrect_recaptcha_url, json=payload) as resp:
return await resp.json()
if await resp.text():
return await resp.json()
else:
return {"errorId": 1}

@staticmethod
async def get_queue_status(queue_id: int) -> dict:
Expand Down Expand Up @@ -228,4 +370,7 @@ async def get_queue_status(queue_id: int) -> dict:

async with aiohttp.ClientSession() as session:
async with session.post(get_queue_status_url, json=payload) as resp:
return await resp.json()
if await resp.text():
return await resp.json()
else:
return {"errorId": 1}
2 changes: 1 addition & 1 deletion python3_anticaptcha/CallbackClient.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import json
import time

import pika
import requests

import pika
from python3_anticaptcha import (
HOST,
PORT,
Expand Down
10 changes: 6 additions & 4 deletions python3_anticaptcha/FunCaptchaTaskProxyless.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,16 @@ def __exit__(self, exc_type, exc_value, traceback):
return True

# Работа с капчёй
def captcha_handler(self, websiteURL: str, websitePublicKey: str, **kwargs) -> dict:
def captcha_handler(self, websiteURL: str, data: str, websitePublicKey: str, **kwargs) -> dict:
"""
Метод получает ссылку на страницу на которпой расположена капча и ключ капчи
:param websiteURL: Ссылка на страницу с капчёй
:param data: Дополнительный параметр, который может требоваться для некоторых решений фанкапчи.
:param websitePublicKey: Ключ капчи(как его получить - описано в документаии на сайте антикапчи)
:return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи)
"""
self.task_payload["task"].update(
{"websiteURL": websiteURL, "websitePublicKey": websitePublicKey}
{"websiteURL": websiteURL, "data": data, "websitePublicKey": websitePublicKey}
)
# Отправляем на антикапча параметры фанкапич,
# в результате получаем JSON ответ содержащий номер решаемой капчи
Expand Down Expand Up @@ -102,15 +103,16 @@ def __init__(self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str =
self.result_payload = {"clientKey": anticaptcha_key}

# Работа с капчёй
async def captcha_handler(self, websiteURL: str, websitePublicKey: str) -> dict:
async def captcha_handler(self, websiteURL: str, data: str, websitePublicKey: str) -> dict:
"""
Метод получает ссылку на страницу на которпой расположена капча и ключ капчи
:param websiteURL: Ссылка на страницу с капчёй
:param data: Дополнительный параметр, который может требоваться для некоторых решений фанкапчи.
:param websitePublicKey: Ключ капчи(как его получить - описано в документаии на сайте антикапчи)
:return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи)
"""
self.task_payload["task"].update(
{"websiteURL": websiteURL, "websitePublicKey": websitePublicKey}
{"websiteURL": websiteURL, "data": data, "websitePublicKey": websitePublicKey}
)
# Отправляем на антикапча параметры фанкапич,
# в результате получаем JSON ответ содержащий номер решаемой капчи
Expand Down
4 changes: 2 additions & 2 deletions python3_anticaptcha/ReCaptchaV3TaskProxyless.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def __exit__(self, exc_type, exc_value, traceback):

# Работа с капчёй
def captcha_handler(
self, websiteURL: str, websiteKey: str, minScore: float, pageAction: str, **kwargs
self, websiteURL: str, websiteKey: str, minScore: float, pageAction: str = None, **kwargs
) -> dict:
"""
Метод решения ReCaptcha V3
Expand Down Expand Up @@ -144,7 +144,7 @@ def __exit__(self, exc_type, exc_value, traceback):

# Работа с капчёй
async def captcha_handler(
self, websiteURL: str, websiteKey: str, minScore: float, pageAction: str
self, websiteURL: str, websiteKey: str, minScore: float, pageAction: str = None
) -> dict:
"""
Метод решения ReCaptcha V3
Expand Down
5 changes: 0 additions & 5 deletions python3_anticaptcha/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,6 @@
app_key,
get_result_url,
create_task_url,
get_balance_url,
get_app_stats_url,
get_queue_status_url,
incorrect_recaptcha_url,
incorrect_imagecaptcha_url,
)
from .errors import ReadError, IdGetError, ParamError
from .get_answer import get_sync_result, get_async_result
10 changes: 0 additions & 10 deletions python3_anticaptcha/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,6 @@
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_imagecaptcha_url = "https://api.anti-captcha.com/reportIncorrectImageCaptcha"
# Адрес для отправки жалобы на неверное решение ReCaptcha
incorrect_recaptcha_url = "https://api.anti-captcha.com/reportIncorrectRecaptcha"
# Адрес для получения информации о очереди
get_queue_status_url = "https://api.anti-captcha.com/getQueueStats"
# Адрес для получения информации о приложении
get_app_stats_url = "https://api.anti-captcha.com/getAppStats"
# ключ приложения
app_key = "867"

Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
EMAIL = "[email protected]"
AUTHOR = "AndreiDrang, redV0ID"
REQUIRES_PYTHON = ">=3.6.0"
VERSION = "1.5.6"
VERSION = "1.6"
REQUIRED = ["requests==2.23.0", "aiohttp==3.6.2", "pika==1.1.0"]

here = os.path.abspath(os.path.dirname(__file__))
Expand Down
Loading

0 comments on commit 6686eb1

Please sign in to comment.