Ответы пользователя по тегу Python
  • Почему pony обращается не к той таблице в базе данных?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Судя по вашему коду и SQL-запросу, ваш запрос возвращает записи только из таблицы "all_categories_recommendations", а не из таблицы "Games". Это может быть связано с тем, что вы не определили связь между таблицами "Games" и "All_categories_recommendations" в вашей модели.

    Если вы хотите выполнить запрос, который возвращает записи из таблицы "Games", вам нужно изменить ваш запрос на что-то вроде:

    with db_session:
        db.generate_mapping(create_tables=False)
        print(select(g for g in Games)[:10])

    Если вы все еще получаете данные только из таблицы "all_categories_recommendations", пожалуйста, убедитесь, что в вашей базе данных существует таблица "Games" и что в вашей модели определена правильная схема и связь между таблицами "Games" и "All_categories_recommendations".
    Ответ написан
    Комментировать
  • Как получить и скачать .gif в Telebot Python, отправленное пользователем?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Для того чтобы получить и скачать файл .gif, отправленный пользователем в Telegram, вы можете использовать метод bot.download_file(file_path), где file_path - это путь к файлу, который вы получили из объекта сообщения.

    В вашем коде, вместо message.animation[len(message.animation) - 1].file_id нужно использовать message.animation.file_id (или message.animation[-1].file_id, чтобы получить идентификатор файла .gif). Затем, вы можете использовать метод bot.download_file(file_path) для загрузки файла по его пути. Далее, вы можете сохранить его локально и обработать с помощью библиотеки MyQR.

    Примерно такой код может получить и сохранить файл .gif, отправленный пользователем:

    @bot.message_handler(content_types=['animation'])
    def get_gif2(message):
        file_id = message.animation.file_id
        file_info = bot.get_file(file_id)
        downloaded_file = bot.download_file(file_info.file_path)
        src = str(message.from_user.id) + '.gif'
        with open(src, 'wb') as new_file:
            new_file.write(downloaded_file)
        bot.reply_to(message, "Фото добавлено")
        myqr.run(src)
        with open(src, 'rb') as photo:
            bot.send_animation(message.chat.id, photo)
        get_menu(message)
    Ответ написан
  • Как записать токены в бд через Middleware в fastapi?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Да, можно записать токены в базу данных через middleware в FastAPI. Можно использовать middleware, чтобы выполнить какой-то код перед выполнением основного обработчика запроса, а также после выполнения основного обработчика.

    Например, можно создать middleware, который будет вызываться после аутентификации пользователя и сохранять токен в базу данных. Для этого нужно создать функцию middleware, которая будет принимать объект запроса и функцию, обрабатывающую запрос, и внутри этой функции сохранять токен в базу данных.

    Вот пример кода, который показывает, как можно сделать это:

    from fastapi import FastAPI, Request
    from fastapi.responses import JSONResponse
    from fastapi.routing import APIRoute
    from datetime import datetime, timedelta
    
    def save_token_middleware(request: Request, call_next):
        # Выполнение кода перед обработкой запроса
        response = call_next(request)
        # Выполнение кода после обработки запроса
        if "access_token" in response.body:
            access_token = response.json().get("access_token")
            username = response.json().get("sub")
            expiration_time = datetime.now() + timedelta(minutes=15)
            # Здесь можно сохранить токен в базу данных
            # используя модуль для работы с БД
            # например, SQLAlchemy или Tortoise ORM
        return response
    
    # Создаем экземпляр приложения
    app = FastAPI()
    
    # Регистрируем middleware
    app.router.route_class = APIRoute
    app.middleware("http")(save_token_middleware)
    
    # Обработчик запроса
    @app.post("/users/auth", response_model=schemas.Token, tags=["users"])
    def authenticate_user(user: schemas.UserAuthenticate, db: Session = Depends(get_db)):
        db_user = crud.get_user_username(db, username=user.username)
        if db_user is None:
            raise HTTPException(status_code=403, detail="Username or password is incorrect")
        else:
            is_password_correct = authenti.username_password(db, user)
            if is_password_correct is False:
                raise HTTPException(status_code=403, detail="Username or password is incorrect")
            else:
                access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
                access_token = authenti.encode_jwt(
                    data={"sub": user.username}, expires_delta=access_token_expires)
                return {"access_token": access_token, "token_type": "Bearer"}
    Ответ написан
    Комментировать
  • Не получается подключиться к OpenOPC серверу на python 3.10, почему?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Ошибка "invalid data or unsupported protocol version" может быть вызвана различными причинами, но, как правило, она связана с проблемами в настройке сетевого соединения.

    Возможно, сервер OpenOPC не работает или не настроен должным образом, или возможны проблемы с настройками сетевого протокола или настройками брандмауэра.

    Попробуйте следующее:

    1. Проверьте, работает ли сервер OpenOPC и что он настроен правильно.
    2. Убедитесь, что ваша сеть настроена правильно и что вы можете подключаться к другим устройствам на этой сети.
    3. Проверьте настройки брандмауэра и убедитесь, что они не блокируют соединение.


    Если ни одно из этих решений не помогло, попробуйте связаться с командой поддержки OpenOPC, чтобы получить дополнительную помощь.
    Ответ написан
    Комментировать
  • Как сделать выбор пункта меню через selenium python?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Чтобы выбрать второй пункт меню, можно использовать метод find_elements для поиска всех элементов с классом rowmenu, затем обратиться к нужному элементу по индексу и кликнуть на него. Например, таким образом можно выбрать второй пункт меню:

    # Найти все элементы с классом 'rowmenu'
    menu_items = browser.find_elements(By.CLASS_NAME, 'rowmenu')
    
    # Кликнуть на второй элемент
    menu_items[1].click()


    В этом примере мы находим все элементы с классом rowmenu с помощью метода find_elements, затем обращаемся ко второму элементу списка (menu_items[1]) и кликаем на него с помощью метода click().
    Ответ написан
    Комментировать
  • Как решить ошибку при подключение хром аккаунта?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    К сожалению, без более подробной информации о том, что происходит после входа в аккаунт, сложно точно определить, что вызывает ошибку. Однако, возможно, это связано с тем, что вы пытаетесь использовать уже существующий профиль браузера, который может содержать старые данные, настройки и файлы cookie, которые могут помешать выполнению вашего скрипта.

    Рекомендуется использовать новый профиль для автоматизации действий в браузере, для этого можно воспользоваться опцией --user-data-dir. В вашем коде она уже есть, но укажите путь к пустой директории, которую вы создадите специально для скрипта.

    Например:

    options.add_argument(r"user-data-dir=C:\Users\HOME\AppData\Local\Google\Chrome\New User Data")

    Кроме того, обратите внимание на версии chromedriver и Google Chrome. Убедитесь, что они совместимы между собой. Если версии не совпадают, это может привести к ошибкам.
    Ответ написан
    Комментировать
  • Почему прерывается соеденение mysql посреди скрипта?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Ошибка "MySQL Connection not available" может возникать по нескольким причинам:
    1. Сервер базы данных MySQL не работает или недоступен.
    2. Сервер базы данных MySQL не настроен на принятие соединений.
    3. Превышено максимальное количество соединений к серверу базы данных MySQL.
    4. Сервер базы данных MySQL был неправильно настроен.
    5. Ошибка в коде скрипта Python, вызванная, например, слишком многими одновременными запросами к базе данных.


    Для дальнейшего диагностирования проблемы рекомендуется проверить настройки базы данных MySQL и количество соединений, которые вы используете в своем скрипте. Также можно проверить журналы ошибок MySQL для получения дополнительной информации о возможных причинах проблемы.
    Ответ написан
    Комментировать
  • Как скриптом JS пройти проверку кладуфлейра, зная, что нужно сделать?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    По вашему описанию, скрипт отправляет запросы и возвращает captcha_required через каждые 10 запросов. Если вы знаете, как выполнить это действие вручную, то вы можете попробовать автоматизировать его через Python с помощью библиотеки Selenium.

    Selenium позволяет управлять веб-браузером с помощью Python, воспроизводить взаимодействие пользователя с веб-сайтом, включая заполнение форм, нажатие кнопок и т.д.

    Для начала вам нужно будет установить библиотеку Selenium и веб-драйвер для выбранного вами браузера (например, Chrome). Затем вы можете написать скрипт на Python, который будет запускать браузер, загружать нужный сайт, автоматически заполнять формы и отправлять запросы.

    Чтобы передать параметры, которые нужно указать на сайте, вы можете использовать функции Selenium для поиска и взаимодействия с элементами страницы (например, метод find_element_by_name() для поиска элемента по имени).

    Если вы хотите воспроизводить взаимодействие пользователя с задержкой между запросами, вы можете использовать функцию time.sleep() для задержки выполнения скрипта на определенное количество секунд.

    Например, примерно так может выглядеть скрипт на Python, использующий Selenium:

    from selenium import webdriver
    import time
    
    # Запускаем Chrome в автоматическом режиме
    driver = webdriver.Chrome()
    
    # Загружаем нужный сайт
    driver.get("https://example.com")
    
    # Находим элементы, которые нужно заполнить, и заполняем их
    input1 = driver.find_element_by_name("input1")
    input1.send_keys("значение1")
    
    input2 = driver.find_element_by_name("input2")
    input2.send_keys("значение2")
    
    # Отправляем запрос
    submit_button = driver.find_element_by_name("submit")
    submit_button.click()
    
    # Ждем 10 секунд
    time.sleep(10)
    
    # Закрываем браузер
    driver.quit()


    Но помните, что автоматизация действий на сайте может нарушать правила использования сайта, поэтому перед использованием автоматизации убедитесь, что вы имеете на это право и не нарушаете условия использования сайта.
    Ответ написан
    2 комментария
  • Keras Shapes (None, 3) and (None, 4, 3) are incompatible изза чего?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Ошибка возникает, потому что форма выходных данных (y) не совпадает с формой выходного слоя модели. Выходной слой содержит 3 нейрона, что означает, что форма выходных данных должна быть (None, 3), где None означает, что это количество образцов данных может быть произвольным.

    В данном случае, вы используете функцию to_categorical для преобразования y в категориальный формат, то есть каждое значение y преобразуется в вектор, в котором только один элемент равен 1, а все остальные равны 0. Это приводит к форме выходных данных (None, 3).

    Чтобы решить эту проблему, вам нужно изменить форму y, чтобы она соответствовала форме выходного слоя модели. В данном случае, вам нужно изменить код следующим образом:
    y = np.array(y)
    В этом случае форма y будет (3,), что соответствует форме выходного слоя модели, и ошибка должна исчезнуть.
    Ответ написан
  • В чем ошибка Python - aiogram?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Ошибка указывает, что в коде происходит попытка вызвать функцию logging.INFO с аргументами {user_id=} {user_full_name=}, однако logging.INFO является числовым значением уровня логгирования, а не функцией. Вместо этого нужно использовать функцию logging.info, чтобы вывести сообщение в лог:
    logging.info(f'{user_id=} {user_full_name=} {time.asctime()}')
    Ответ написан
    2 комментария
  • Как запустить асинхронную функцию aiogram?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Вы можете запустить ваши функции в отдельных потоках с помощью модуля threading.

    Пример:

    import threading
    import file1
    import file2
    
    def run_in_thread(func):
        def wrapper(*args, **kwargs):
            thread = threading.Thread(target=func, args=args, kwargs=kwargs)
            thread.start()
        return wrapper
    
    @run_in_thread
    def run_function_1():
        file1.test()
    
    @run_in_thread
    def run_function_2():
        file2.test()
    
    def on_startup():
        run_function_1()
        run_function_2()
    
    executor.start_polling(dp, skip_updates=True, on_startup=on_startup)


    Таким образом, вы можете запустить ваши функции из двух разных файлов в отдельных потоках, а телеграм бот продолжит работу нормально.

    Обратите внимание, что этот код также требует обертку run_in_thread, чтобы запускать функции в отдельных потоках.
    Ответ написан
    Комментировать
  • EOF error при работе с input ()?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Ошибка EOFError обычно возникает, когда программа ожидает ввода с консоли, но не получает его. Возможно, на другом компьютере вы запускаете программу не через консоль, а через файл. В этом случае стандартный ввод не будет работать.

    Чтобы исправить эту ошибку, попробуйте запускать программу через консоль. Если это не помогает, то возможно, что в коде программы есть какая-то ошибка, из-за которой она не может получить данные с консоли. В этом случае нужно искать ошибку в коде и исправлять ее.

    Если у вас есть возможность, советую перейти с Python 3.8 на более новую версию. Это может избавить вас от различных проблем, связанных с несовместимостью кода и библиотек.
    Ответ написан
    Комментировать
  • Как решить проблему NameError: name is not defined?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Ошибка NameError: name is not defined означает, что в коде используется имя (переменная, функция, класс и т.д.), которое не было определено. В данном случае это имя treasure_x.

    Чтобы решить эту проблему, нужно определить treasure_x переменную, например, так:

    treasure_x = 0

    Или же убедиться, что treasure_x уже была определена ранее в коде.
    Ответ написан
    Комментировать
  • Как решить ошибку python. RuntimeWarning: coroutine 'some_name' was never awaited?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Данная ошибка возникает, когда вызывается корутина (асинхронная функция), но не ждется ее завершение. В вашем случае это функция main.

    Чтобы решить эту проблему, нужно дождаться завершения функции main. Для этого вы можете использовать конструкцию await main() или asyncio.run(main()).

    После этого запустите бота снова и проверьте, что ошибка больше не возникает.
    Ответ написан
    Комментировать
  • Как из одного класса добраться в другой?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Чтобы из одного экземпляра класса добраться в другой, вам нужно в первом экземпляре класса хранить ссылку на второй экземпляр. Для этого вы можете в конструкторе класса User добавить аргумент api, который будет ссылкой на экземпляр класса MyApi, и сохранить его в свойстве экземпляра self.api. Затем в методе save вы сможете обратиться к этому свойству и вызвать нужные методы.
    Ответ написан
    Комментировать
  • Как достать user_id из ссылки на профиль?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Чтобы достать user_id из ссылки, содержащейся в переменной mention, нужно спарсить строку с помощью регулярных выражений.

    Вот пример кода, который можете использовать:
    import re
    
    # Используем регулярное выражение, чтобы найти user_id в ссылке
    match = re.search(r'tg://user\?id=(\d+)', mention)
    
    # Если ссылка была найдена
    if match:
        # Извлекаем user_id из ссылки
        user_id = int(match.group(1))
        print(user_id)
    Ответ написан
    Комментировать
  • Telethon выдает ошибку, что не может найти entity, в чем проблема?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Ошибка "Cannot find any entity corresponding to "-12345"" означает, что указанное число (-12345) не соответствует ни одной сущности (entity) в Telegram. Сущность (entity) в Telethon это любой объект, с которым можно взаимодействовать через API, например, пользователь, группа, канал и т.д.

    Чтобы решить эту проблему, нужно убедиться, что вы передаете правильный идентификатор сущности в метод get_participants.
    Ответ написан
    Комментировать
  • Как запускать python файл через прокси?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Да, можно передать параметры прокси через системные аргументы sys.argv.

    Например, в начале скрипта можно добавить следующий код:

    import sys
    
    # Проверяем, есть ли у нас два аргумента - IP адрес и порт прокси
    if len(sys.argv) != 3:
        print("Неправильное количество аргументов")
        sys.exit(1)
    
    # Извлекаем IP адрес и порт из аргументов
    proxy_ip = sys.argv[1]
    proxy_port = sys.argv[2]


    Теперь вы можете использовать полученные данные в своем коде.
    Ответ написан
  • Как првильно написать get запрос?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Ошибка 409 означает, что на сервере произошло конфликт при совершении запроса. Это может быть связано с тем, что вы пытаетесь выполнить действие, которое недопустимо для текущего состояния ресурса. Например, вы можете пытаться создать ресурс, который уже существует.

    Чтобы узнать, почему вы получили ошибку 409, вы можете прочитать ответ сервера, который содержит более подробную информацию об ошибке. Вы можете это сделать, используя свойство response.text. Например:

    import requests
    
    response = requests.get('my_url', auth=('Web', '12345678'))
    
    if response.status_code == 409:
        print(response.text)


    Кроме того, убедитесь, что вы используете правильный URL и параметры аутентификации.
    Ответ написан
    Комментировать
  • Как обработать событие SkypeCallEvent в Python SkPy?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Чтобы обработать событие SkypeCallEvent в Python с помощью SkPy, вам следует добавить обработчик этого события в своей кастомной реализации класса SkypeEventLoop. Обработчик события должен называться onSkypeCallEvent. Например:
    from skpy import SkypeEventLoop, SkypeCallEvent
    
    
    class MySkype(SkypeEventLoop):
    
        def onSkypeCallEvent(self, event: SkypeCallEvent):
            # Обработка события звонка
            if event.type == "INCOMING":
                # Обработка входящего звонка
                pass
            elif event.type == "OUTGOING":
                # Обработка исходящего звонка
                pass
    Ответ написан
    Комментировать