Подключил VK API. Необходимо сделать отправку файлов на сервер как о этом рассказано на этой странице - http://vk.com/dev/upload_files
P.S. Загрузка файлов на стену пользователя
import vk
from time import sleep
import sys
import urllib.request
import urllib.parse
import base64
import requests
vkapi = vk.API(access_token='token', app_id='id')
sleep(0.5)
data = vkapi.photos.getWallUploadServer(user_id="72374405")
DATA_USER_ID = data['user_id']
DATA_ALBUM_ID = data['album_id']
DATA_UPLOAD_URL = data['upload_url']
#with open("1.jpg", "rb") as image_file:
#fileD = base64.b64encode(image_file.read())
#files = {'1.jpg': open('1.jpg', 'rb')}
#r = requests.post(DATA_UPLOAD_URL, files=files)
#r.status_code == requests.codes.ok
#print(r)
#html = r.read().decode("utf-8")
#dataP = '1.jpg'
dataP = "photo=" + dataP#.encode("ASCII")
response = urllib.request.urlopen(DATA_UPLOAD_URL,dataP)
html = response.read().decode("utf-8")
print (html)
решеткой помечено то, что пробовал но не сработало, либо не подошло.
Вроде как корректно отработался вариант с
files = {'1.jpg': open('1.jpg', 'rb')}
r = requests.post(DATA_UPLOAD_URL, files=files)
r.status_code == requests.codes.ok
print(r)
#html = r.read().decode("utf-8")
Однако в таком случае не работает вывод и тем самым я не могу понять, отработался ли должным образом запрос.
В случае успешного завершения кода выхлоп таков:
{"server":622624,"photo":"[]","hash":"8112ae8847b27fb1cdf678d3d168e6ae"}
То есть загрузка изображения провальная.
Может кто-либо смог или и так знает как загрузить файл на сервер ВК через POST на Python3. Поделитесь опытом, советом, замечанием. Если что-то в коде непонятно - пишите; отвечу.
Ответ
Вот мой вариант размещения фотографии на стене сообщества от имени сообщества. Реализован алгоритм, описанный в официальной документации
# Импортируем необходимые модули
import vk
import requests
# Задаём идентификатор группы, токен доступа, картинку и её описание
group_id = 'my_group_id'
access_token = 'my_access_token'
filename = 'image.jpg'
caption = 'Some text'
# Авторизуемся в VK
session = vk.Session(access_token=access_token)
vk_api = vk.API(session)
# Получаем адрес сервера для загрузки картинки
upload_url = vk_api.photos.getWallUploadServer(group_id=group_id)['upload_url']
# Формируем данные параметров для сохранения картинки на сервере
request = requests.post(upload_url, files={'photo': open(filename, "rb")})
params = {'server': request.json()['server'],
'photo': request.json()['photo'],
'hash': request.json()['hash'],
'group_id': group_id}
# Сохраняем картинку на сервере и получаем её идентификатор
photo_id = vk_api.photos.saveWallPhoto(**params)[0]['id']
# Формируем параметры для размещения картинки в группе и публикуем её
params = {'attachments': photo_id,
'message': caption,
'owner_id': '-' + group_id,
'from_group': '1'}
vk_api.wall.post(**params)
Комментариев нет:
Отправить комментарий