@VladislavVoziyan
Слоупок, питонист и просто хороший человек

Как загрузить картинку в паблик через vk api?

import vk
#import pic_gen
import requests
#import SizeChecker

session = vk.AuthSession(access_token='ТОКЕН ДОСТУПА', scope=ПРАВА ДОСТУПА)
vk_api = vk.API(session, v='5.92')
filename = 'sample.png'
group_id = 'ID ГРУППЫ'

UplServ = vk_api.photos.getWallUploadServer(group_id=group_id)
upload_url = UplServ['upload_url']
img = {'photo': ('sample.png', open(r'sample.png', 'rb'))}
request = requests.post(upload_url, files=img)

params = {'server': request.json()['server'],
          'photo': request.json()['photo'],
          'hash': request.json()['hash'],
          'group_id': group_id}

photo_id = vk_api.photos.saveWallPhoto(**params)
photo_id = photo_id[0]
photo_id = 'photo'+ '-' + str(photo_id['owner_id']) + '_' + str(photo_id['id'])


params = {'attachments': photo_id,
          'message': 'Просто текст...',
          'owner_id': '-' + group_id,
          'from_group': '1'}
vk_api.wall.post(**params)


Есть вот такой кусок кода. По идее он должен загружать картинку на сервер VK, а затем постить её.
Проблема в том, что пост создаётся без картинки, только текст. Примечательно, что после работы функции getWallUploadServer, переменная UplServ принимает непонятно чей ['album_id'] и ['user_id'] (это не мои id пользователя или группы, и тем более у меня нет такого альбома)
  • Вопрос задан
  • 2588 просмотров
Решения вопроса 1
hello-world00
@hello-world00
Играю с Python,C
К примеру, есть группа
Чтобы узнать доступные альбомы переходим на https://vk.com/albums-178172381
И нажимаем на доступный/создаем новый альбом. После, url поменятся на https://vk.com/album-178172381_XXX, где XXX - album_id
import vk
import requests # or httplib2

album_id = 260909009 # XXX - 260909009
group_id = 178172381
filename = 'simple.png'
token = '7opnd...2nfds'
api = vk.API(vk.Session(access_token=token), v=5.92)
upload_url = api.photos.getWallUploadServer(group_id=group_id)['upload_url'] 
resp = requests.post(upload_url, files = {'file': open(filename, 'rb')}).json() # вот не знаю, можно ли много картинков за раз загружать
s = api.photos.saveWallPhoto(group_id=group_id, server = resp['server'], photo= resp['photo'], hash = resp['hash'])
api.wall.post(owner_id = -group_id, message="Test!", attachments=f"photo{s[0]['owner_id']}_{s[0]['id']}")

Как результат: https://vk.com/club178172381
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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