Cat

AIOgram3 7. Получение пути до файла по API

В этом посте, мы при помощи библиотеки requests будем отправлять ботом запросы на API.

Все статьи

Icon Link

Дополнительные материалы

Icon Link

Реклама

Icon Link
Telegram-бот на AIOgram3 proDream 10 Август 2023 Просмотров: 1804

В предыдущем посте мы закончили писать API для бота. Вернёмся к боту и напишем функционал обращения к API и отправке файла пользователю.

 

Обращение к API.

Начнём с написания логики обращения к API. 

В пакете botlogic создадим пакет utils. В данном пакете, будем писать логику не связанную с ботом. В пакете создадим файл api_actions.py.

Для отправки запросов и получения данных, нам нужна библиотека requests. Установим её командой pip install requests и добавим в requirements.txt.

 

В начале файла создадим константу API_URL и пропишем туда URL-адрес созданного ранее API. У меня это http://127.0.0.1:8000/bot/.

Создадим функцию get_path, получающую аргумент code.

В теле функции создадим переменную response и получим в неё ответ на запрос. Запрос будет отправлять при помощи метода requests.get(), в параметры которого передадим API_URL + f'get-file/?code={code}'.

В случае, если получим от API данные, тогда возвращаем из функции ответ в виде JSON.
Если же данных не будет(значит, что файла с таким кодом нет), вернём None.

 

Код.

import requests

API_URL = 'http://127.0.0.1:8000/bot/'


def get_path(code):
    response = requests.get(API_URL + f"get-file/?code={code}")
    if response:
        return response.json()
    return None

 

Тестирование.

И для уверенности, что всё работает можно прямо здесь и протестировать. 

После функции напишем print(get_path(0)), запустим Django в отдельном окне IDE и запустим наш скрипт. В выводе терминала должны получить JSON, похожий на питоновский словарь.

{'title': 'Тестовый файл', 'file_path': 'C:\\Users\\proDream\\PycharmProjects\\pressanybutton\\pressanybutton\\media\\post_files\\68.zip'}

 

Отлично. API отрабатывает. Удалим принт, что бы при вызове функции не было лишних вызовов.

 

Подготовка.

Подготовим всё необходимое к следующему посту.

В этом же пакете utils создадим файл statesform.py и commands.py. В файле statesform.py мы будем хранить группы состояний для машины состояний. В файле commands.py будет список команд бота, которые будут отображаться в виде кнопки меню у пользователя.

 

Команды бота, заготовка.

Давайте сразу пропишем будущие команды, пусть их пока и нет. 

Откроем файл commands.py и напишем асинхронную функцию set_commands в аргументы которой будет передаваться экземпляр класса Bot.

В теле функции создадим переменную commands и присвоим ей список. В списке будут находиться объекты класса BotCommand, в параметры которого передаётся команда и описание. 

Ниже запустим метод, присваивающий написанный ранее список команд нашему боту.

 

Код команд:

from aiogram import Bot
from aiogram.types import BotCommand, BotCommandScopeDefault


async def set_commands(bot: Bot):
    commands = [
        BotCommand(
            command='start',
            description='Начало работы'
        ),
        BotCommand(
            command='get_file',
            description='Получить материалы'
        ),
        BotCommand(
            command='about',
            description='Информация о боте'
        )
    ]

    await bot.set_my_commands(commands, BotCommandScopeDefault())

 

Подключаем меню с командами.

Откроем файл events.py в пакете handlers. В функции start_bot перед отправкой сообщения добавим добавление команд в меню:

from botlogic.utils.commands import set_commands


async def start_bot():
    await set_commands(bot)
    await bot.send_message(Secrets.admin_id, start_bot_msg())

Автор

  • 9 июля 2024 г. 10:19

    Добрый день.
    Скажите, как узнать свой URL-адрес?

  • 13 июля 2024 г. 18:15

    Про API_URL? В посте указан путь до локального веб-сервера Django из постов в соседнем разделе "Сайт на Django".

  • Реклама