kosyachniy
@kosyachniy
Python BackEnd, Web FullStack

Python VK_API Как загрузить изображение в альбом группы?

Авторизуюсь как группа, и в неё же пытаюсь загружать
Выдаёт ошибку: vk_api.exceptions.ApiError: [121] Invalid hash

import vk_api, json
vk=vk_api.VkApi(token='blablabla')
vk.auth()

a=vk.method('photos.getMessagesUploadServer')
print(a) #{'album_id': -64, 'group_id': 151313066, 'upload_url': 'https://pu.vk.com/c836728/upload.php?act=do_add&mid=140420515&aid=-64&gid=151313066&hash=9882bffc4752d5a87a37a35bccf6517f&rhash=3385661e41a2933caaad0fe88fcc9a40&swfupload=1&api=1&mailphoto=1'}

b=json.loads(requests.get(a['upload_url']).text)
print(b) #{'photo': '[]', 'hash': 'd6d59d2bad3bc5ea497f82b4867cfc82', 'server': 836728}

vk.method('photos.saveMessagesPhoto', {'photo': {'photo': open('1.jpg', 'rb')}, 'server': b['server'], 'hash': b['hash']})


Что не так? И как исправить?

И как изменить альбом группы, потому что параметры в photos.getMessagesUploadServer ничего не меняют
  • Вопрос задан
  • 4763 просмотра
Решения вопроса 1
kosyachniy
@kosyachniy Автор вопроса
Python BackEnd, Web FullStack
Загрузка в сообщения:

import requests, vk_api

vk = vk_api.VkApi(token='blablabla')
vk.auth()

a = vk.method('photos.getMessagesUploadServer')
b = requests.post(a['upload_url'], files={'photo': open('blabla', 'rb')}).json()
c = vk.method('photos.saveMessagesPhoto', {'photo': b['photo'], 'server': b['server'], 'hash': b['hash']})[0]
d = 'photo{}_{}'.format(c['owner_id'], c['id'])

vk.method('messages.send', {'user_id': 'bla', 'attachment': d})


Загрузка в альбом группы с правами доступа группы не разрешена.
Только с правами доступа пользователя.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Из документации:
Передайте файлы на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем photo. Это поле должно содержать изображения в формате multipart/form-data.

У вас получается так:
- вызвали photos.getMessagesUploadServer, получили адрес куда загружать фото
- далее GET-ом просто дернули этот адрес
- пытаетесь вложить фото в метод, который просто подтверждает сохранение после загрузки.

В общем перед вызовом photos.saveMessagesPhoto отправьте фото POST запросом на upload_url, и только потом вызывайте метод photos.saveMessagesPhoto.

Еще можете посмотреть Пример из вашего модуля

И еще только что обратил внимание, вы хотите загрузить изображение в альбом группы: посмотрите метод photos.getUploadServer , там и сможете указать альбом группы
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы