@kreyNie

Как прикрепить фотографию к сообщению бота ВК?

Доброго времени суток! На днях озадачился идеей прикрепления фотографии к сообщению. Сама фотография не хранится на компьютере, а берется из URL запроса.
def getSteamItemImageFromUrl(classID: str):
     STEAM_URL = 'https://steamcommunity-a.akamaihd.net/economy/image/class/730/'
     response = get(STEAM_URL + classID + '/330fx250f', stream=True).content
     image = BytesIO(response).getvalue()
     return b64encode(image)

Здесь я получаю изображение в байтовом представлении, далее мне нужно залить его на сервер ВК, но сталкиваюсь с проблемой, что функция тупо не хочет принимать в себя байты и говорит, что в директории нет такого изображения. Сам код с публикацией на сервер ВК
def uploadImageToServer(image) -> str:
    """Загружает изображение на сервер, возвращает строку для attachment"""
    upload = vk_api.VkUpload(vk)
    photo = upload.photo_messages(image)
    return f"photo_{photo['owner_id']}_{photo['id']}"

Метод photo_messages как раз и не принимает параметр image, которое находится в байтовом представлении.
Собственно, сама ошибка: f = open(filename, 'rb')
FileNotFoundError: [Errno 2] No such file or directory
, после нее идет строка байтов
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 1
pro100chel
@pro100chel Куратор тега Python
Python && PHP Developer
Сохрани картинку как файл и уже в upload.photo_messages(image) в переменной image указывай путь до файла.

import secrets


def getSteamItemImageFromUrl(classID: str):
    STEAM_URL = 'https://steamcommunity-a.akamaihd.net/economy/image/class/730/'
    response = get(STEAM_URL + classID + '/330fx250f', stream=True).content
    filename = secrets.token_hex(16) + '.jpg'

    with open(filename, 'wb') as file:
        file.write(response)

    return filename


def uploadImageToServer(image) -> str:
    """Загружает изображение на сервер, возвращает строку для attachment"""
    upload = vk_api.VkUpload(vk)
    photo = upload.photo_messages(image)
    return f"photo_{photo['owner_id']}_{photo['id']}"


Вот что-то такое должно получиться. Можно после отправки фото на сервер удалять его с диска.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы