@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
                        )
  • Вопрос задан
  • 162 просмотра
Решения вопроса 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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Delta Волгоград
от 60 000 до 100 000 руб.
от 120 000 до 170 000 руб.
m7 Москва
от 50 000 руб.
22 авг. 2019, в 09:56
1000 руб./за проект
22 авг. 2019, в 09:33
400 руб./в час