Не могу загрузить фото телеграм-ботом на сервис ImgBB

Рейтинг: 1Ответов: 1Опубликовано: 27.04.2023

Бота делаю с помощью библиотеки aiogram. Основная задача от бота - это получить фото от пользователя и загрузить его на сервис (желательно в выбранный альбом на сервисе). Этот сервис (imgbb) предоставляет API-токен и по идее все должно работать

ссылка сайта https://imgbb.com

ALBUM_ID = 'Hf3CPd'
#----------------------------------------------------------------------------------
@dp.callback_query_handler(lambda c: c.data == 'send_photo', state= UserState)
async def send_photo(callback_query: types.CallbackQuery):
    user_id = callback_query.from_user.id
    await bot.send_message(user_id, "Скиньте фотографию")

    await UserState.photo_process.set()

@dp.message_handler(content_types=types.ContentType.PHOTO, state= UserState.photo_process)
async def handle_photo(message: types.Message):
    user_id = message.from_user.id

    photo_file = await message.photo[-1]

    url = "https://api.imgbb.com/1/upload"
    data = {
        "key": STORAGE_API_KEY,
        "image": photo_file,
        "album": ALBUM_ID,
    }
    requests.post(url, data)

    await bot.send_message(user_id, "Вы загрузили фотографию")

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

Мне кажется я многое упускаю либо это нереально реализовать

Ответы

▲ 0Принят

Возможные пути к решению вашей проблемы:

  1. Заходим в документацию api imgbb (https://api.imgbb.com)

    Проходимся по пунктам и видим, что параметр image должен быть в формате бинарного файла, кодировке base64 или ссылкой URL на изображение.

    Самый простой вариант - кодировка base64.

    Как пример:

    import base64
    
    with open("file.png", "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read())
    

Открываем изображение с помощью open и кодируем его в необходимый формат. После данных манипуляций можем отправлять параметр image.

  1. Что касается альбома, такого параметра в api нет, в данном вопросе помогут только эксперименты при загрузке.

  2. Использование библиотеки.

    Не зачем заново изобретать велосипед, попробуйте использовать уже созданный.

    Библиотека imgbbpy (https://pypi.org/project/imgbbpy) может помочь в вашем вопросе. Есть все необходимые функции и параметры для загрузки (альбом отсутствует, но можно попробовать расширить функционал)

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