#python #вконтакте #vkontakte_api
Подключил 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. Поделитесь опытом, советом, замечанием. Если что-то в коде непонятно - пишите; отвечу.
Ответы
Ответ 1
Вот мой вариант размещения фотографии на стене сообщества от имени сообщества. Реализован алгоритм, описанный в официальной документации: # Импортируем необходимые модули 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)Ответ 2
Есть библиотека vk_api, у нее есть вспомогательный класс для загрузки файлов VkUpload, а у него есть нужный метод photo_wall. Добавляю пример использования (ссылка на полный скрипт с картинками): import vk_api from vk_api import VkUpload login, password = '', ' ' # Авторизация vk_session = vk_api.VkApi(login, password) vk_session.auth() upload = VkUpload(vk_session) # Для загрузки изображений # Загрузка картинок на сервера вк и получение их id photos = ['1.jpg', '2.jpg'] photo_list = upload.photo_wall(photos) attachment = ','.join('photo{owner_id}_{id}'.format(**item) for item in photo_list) # Добавление записи на стену vk_session.method("wall.post", { 'owner_id': None, # Посылаем себе на стену 'message': 'Test!', 'attachment': attachment, }) Вот так будет выглядеть запись на стене: Ответ 3
Как-то разобрался :D import vk from time import sleep import sys import urllib.request import urllib.parse import base64 import requests import json vkapi = vk.API(access_token='token', app_id='app_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'] r = requests.post(DATA_UPLOAD_URL, files={'photo': open('1.jpg',"rb")}) r.status_code == requests.codes.ok params = {'server': r.json()['server'], 'photo': r.json()['photo'], 'hash': r.json()['hash']} wallphoto = vkapi.photos.saveWallPhoto(**params) #attachments.append(wallphoto[0]['id']) photoID = wallphoto[0]['id'] params = {'attachments': 'photo' + '72374405_' + str(photoID), 'message': 'Test'} params['owner_id'] = '72374405' print(params) vkapi.wall.post(**params) Позже уже буду разбираться во всем этом коде и делать его более читаемым. Главное что он сейчас работает :)
Комментариев нет:
Отправить комментарий