@slavamironoff

Как получить ссылку на скачивание attachments?

Hello world дамы и господа.
У меня стоит задача написать бота для обработки фото.
Возникла проблема, с которой сражаюсь уже около недели, как получить src из attachments
История такая:
Юзер отправляет боту картинку в ЛС (бот группа), он распознаёт вложение, если это картинка, он должен её скачать, обработать и вернуть пользователю обработанный вариант.
Вот код:
import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType
import json

TOKEN = 'тут токен'

token = vk_api.VkApi(token=TOKEN, scope=['message', 'groups', 'wall'])
longpoll = VkLongPoll(token)
vk_sess = token.get_api()

''' Авторизация по токену, назначение прав доступа к сообщениям, группе, стене. Запуск longpoll '''

for event in longpoll.listen():
    ''' Прослушка longpoll '''
    if event: # Если есть сообщение
        if event.type == VkEventType.MESSAGE_NEW and event.to_me:
            ''' Если есть новое сообщение, адресованное в ЛС группы '''
            if event.from_user: # Если пишет пользователь
                vk_sess.messages.send( 
                    user_id=event.user_id,
                    message="Обработка сообщения..."
                )
                if event.attachments:
                    print("Получено медиа вложение\n Тип => " + event.attachments['attach1_type'])
                    if event.attachments['attach1_type'] == 'photo':
                        vk_sess.messages.send( 
                            user_id=event.user_id,
                            message="Фотография обрабатывается"
                        )
                        vk_sess.messages.send( 
                            user_id=event.user_id,
                            message="Секундочку...."
                        )
                        vk_sess.messages.send( 
                            user_id=event.user_id,
                            message="Фотография обработана.",
                            attachments=event.attachments
                        )
  • Вопрос задан
  • 395 просмотров
Решения вопроса 1
@Taus
Поскольку документация противоречит сама себе в пункте 3.1 и пункт 6. Если предположить, что верен пункт 6, как вы его используете в
print("Получено медиа вложение\n Тип => " + event.attachments['attach1_type'])

то в объекте event.attachments есть поле attach1, которое можно использовать в методе photos.getById:
photo_id = event.attachments['attach1']
photo_info = vk_sess.photos.get_by_id(photos=photo_id)
photo_urls = {size['type']: size['url'] for size in photo_info['sizes']}

В photo_urls ссылки в соответствии с размерами photo_sizes.

# update
Выше способ не позволяет получить photo_id с приватным access_key, без которого не получится вызвать photos.getById. Поэтому:
Тогда по event.message_id получаете информацию с помощью метода message.getById, в котором должно быть поле attachments. Описание структуры поля https://vk.com/dev/objects/attachments_m и для photo https://vk.com/dev/objects/photo.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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