Загрузка данных


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("Произошла ошибка при выполнении запроса.")