Загрузка данных
import aiohttp
from utils.config_utils import ConfigManager
from utils.errors.link_errors import *
config = ConfigManager()
class LinkManager:
def __init__(self):
self.headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
'content-type': 'application/json',
'language': 'ru',
'referer': 'https://1w.run/panel/links',
'cache-control': 'no-cache',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
}
self.cookies = {
'accessToken': config.get_config_value_sync('bot2', '1win', 'accessToken'),
'refreshToken': config.get_config_value_sync('bot2', '1win', 'refreshToken'),
}
async def create_link(self, name):
"""
Создание ссылки и возврат её ID
"""
json_data = {
'direct_id': 1,
'name': name,
'source_id': 754613,
'domain_id': 203583,
'country': 'ru',
}
try:
print(f"Попытка создания ссылки с данными: {json_data}")
connector = aiohttp.TCPConnector(ssl=False)
async with aiohttp.ClientSession(
headers=self.headers,
cookies=self.cookies,
connector=connector
) as session:
async with session.post('https://1w.run/api/v2/links/add', json=json_data) as response:
print(f"Получен ответ от сервера: {response.status}")
if response.status == 201:
response_data = await response.json()
print("=" * 50)
print(response_data)
print("=" * 50)
return response_data.get("id")
print(f"Ошибка создания: Существующая ссылка. Ответ сервера: {error_message}")
raise ExistingLinkException("Существующая ссылка. Проверьте корректность данных.")
elif response.status == 401:
print("Ошибка авторизации: Неверные токены.")
raise UnauthorizedAccessException("Unauthorized access. Check your credentials.")
else:
error_message = await response.text()
print(f"Неожиданный ответ сервера: Код {response.status}, Ответ: {error_message}")
raise UnexpectedResponseException(f"Неожиданный ответ сервера. Код: {response.status}, Ответ: {error_message}")
except aiohttp.ClientError as e:
print(f"Ошибка сети при создании ссылки: {e}")
raise LinkManagerException("Произошла ошибка при выполнении запроса.")
async def get_all_link_info(self):
print(f"link_id = {link_id}")
"""
Получение информации о ссылке по её ID
"""
try:
params = {'p': '1'}
connector = aiohttp.TCPConnector(ssl=False)
async with aiohttp.ClientSession(
headers=self.headers,
cookies=self.cookies,
connector=connector
) as session:
async with session.get('https://1w.run/api/v2/links/list', params=params) as response:
if response.status == 200:
links_data = await response.json()
#for link in links_data['links']:
#print(f"Обнаружена ссылка: ID = {link['id']}, source_id = {link.get('source_id')}")
link_info = next((link for link in links_data['links'] if link['id'] == 1111), None)
return link_info
elif response.status == 401:
links_data = await response.json()
print(links_data)
raise UnauthorizedAccessException("Unauthorized access. Check your credentials.")
else:
raise UnexpectedResponseException(f"Неожиданный ответ сервера. Код: {response.status}")
except aiohttp.ClientError as e:
print(f"Ошибка при получении информации о ссылке: {e}")
raise LinkManagerException("Произошла ошибка при выполнении запроса.")
async def get_link_info(self, link_id):
"""
Получение информации о ссылке по её ID
"""
try:
params = {'p': '1'}
connector = aiohttp.TCPConnector(ssl=False)
async with aiohttp.ClientSession(
headers=self.headers,
cookies=self.cookies,
connector=connector
) as session:
async with session.get('https://1w.run/api/v2/links/list', params=params) as response:
if response.status == 200:
links_data = await response.json()
link_info = next((link for link in links_data['links'] if link['id'] == link_id), None)
return link_info
elif response.status == 401:
raise UnauthorizedAccessException("Unauthorized access. Check your credentials.")
else:
raise UnexpectedResponseException(f"Неожиданный ответ сервера. Код: {response.status}")
except aiohttp.ClientError as e:
print(f"Ошибка при получении информации о ссылке: {e}")
raise LinkManagerException("Произошла ошибка при выполнении запроса.")
async def get_link_id_by_name(self, link_name):
"""
Получение ID ссылки по её имени
"""
try:
params = {'p': '1'}
connector = aiohttp.TCPConnector(ssl=False)
async with aiohttp.ClientSession(
headers=self.headers,
cookies=self.cookies,
connector=connector
) as session:
async with session.get('https://1w.run/api/v2/links/list', params=params) as response:
if response.status == 200:
links_data = await response.json()
link_info = next((link for link in links_data['links'] if link['link_name'] == link_name), None)
if link_info:
return link_info['id']
else:
return None
elif response.status == 401:
raise UnauthorizedAccessException("Unauthorized access. Check your credentials.")
else:
print(f"Ошибка получения id ссылки {response.text}")
raise UnexpectedResponseException(f"Неожиданный ответ сервера. Код: {response.status}")
except aiohttp.ClientError as e:
print(f"Ошибка при получении ID ссылки по имени: {e}")
raise LinkManagerException("Произошла ошибка при выполнении запроса.")
async def get_loss_total_sum(self, link_id):
"""
Получение значения lossTotalSum по ID ссылки
"""
try:
payload = {
"hashIds": [link_id]
}
connector = aiohttp.TCPConnector(ssl=False)
async with aiohttp.ClientSession(
headers=self.headers,
cookies=self.cookies,
connector=connector
) as session:
async with session.post(
"https://1w.run/api/v5/stats/all",
json=payload
) as response:
print("Статус:", response.status)
data = await response.json()
print(data)
if response.status == 200:
return data["stats"].get("lossTotalSum", 0)
elif response.status == 401:
raise UnauthorizedAccessException(
"Unauthorized access. Check your credentials."
)
else:
raise UnexpectedResponseException(
f"Неожиданный ответ сервера. Код: {response.status}"
)
except aiohttp.ClientError as e:
print(f"Ошибка при получении loss_total_sum: {e}")
raise LinkManagerException("Произошла ошибка при выполнении запроса.")
async def delete_link(self, link_id):
"""
Удаление ссылки по ID.
"""
try:
json_data = {
'id': link_id,
}
print(link_id)
connector = aiohttp.TCPConnector(ssl=False)
async with aiohttp.ClientSession(
headers=self.headers,
cookies=self.cookies,
connector=connector
) as session:
async with session.post('https://1w.run/api/v2/links/delete', json=json_data) as response:
if response.status == 201:
result = await response.json()
if result.get("error") is False:
return {"success": True, "message": "Ссылка успешно удалена."}
else:
return {"success": False, "message": result.get("message", "Неизвестная ошибка.")}
elif response.status == 401:
raise UnauthorizedAccessException("Unauthorized access. Проверьте свои токены.")
elif response.status == 404:
return {"success": False, "message": "Ссылка не найдена."}
else:
error_message = await response.text()
print(error_message)
raise UnexpectedResponseException(f"Неожиданный ответ сервера. Код: {response.status}, Ответ: {error_message}")
except aiohttp.ClientError as e:
print(f"Ошибка при удалении ссылки: {e}")
raise LinkManagerException("Произошла ошибка при выполнении запроса.")