Постинг в Vk через Vk.Api - Python
📁 Циклы, python
Появилась надобность в разработке скрипта для постинга в сообщества(группы) сайта vk.com картинок. Реализовал отправку простых сообщение (текстовых) а как быть с attacment'ми не могу понять помогите люди добрые.
И да картинка будут представлена в виде
#/dev/usr/env python3# -*- coding: utf-8 -*-import vkmy_app_id = 5484091user_login = 'email@mail.ru' user_password = 'password' session = vk.AuthSession(scope='wall', app_id=my_app_id, user_login=user_login, user_password=user_password)vk.api.access_token=""40d8beaebfdbb3815ef279032bbb6c8b3a13774e0d6ce0fbac6704882064f8fa6996866cb3b1b3bac7440""api = vk.API(session)api.wall.post(owner_id='-122263284',message=""Просто текст..."") Попробуйте скрипт сначала на своей странице (укажите OWNER_ID = None). Потом на странице другого пользователя. Насколько я помню, у групп вк OWNER_ID отличаются от пользовательских – их id с минусом пишется:
import vk_apiimport sysimport random# Скрипт помещает картинки на стену пользователя vk.comdef vk_auth(login, password): vk = vk_api.VkApi(login, password) try: vk.authorization() # Авторизируемся except vk_api.AuthorizationError as error_msg: print(error_msg) # В случае ошибки выведем сообщение sys.exit() retu vk# Логин, пароль к аккаунту и id человека, на стену которого будем постить сообщенияLOGIN = ''PASSWORD = ''OWNER_ID = ''if __name__ == '__main__': # Авторизируемся vk = vk_auth(LOGIN, PASSWORD) # Список с ссылками на картинки hrefs = [ 'https://danbooru.donmai.us/data/sample/--saber-and-saber-alter-fate-stay-night-and-fate-series-drawn-by-goldengear870--sample-5c66a91632c80384fd9a1e8c43bb5fd7.jpg' ] # ""Перемешаем"" элементы списка random.shuffle(hrefs) # Добавление сообщения на стену пользователя # Если не указывать owner_id, сообщения себе на стену поместится for href in hrefs: rs = vk.method('wall.post', { 'owner_id': OWNER_ID, 'message': 'Хей!', 'attachments': href, }) print(rs)Если сервер вк не подхватил картинку и не стал ее отображать в посте, тогда нужно будет сначала залить на их сервер. Тут нужно использовать методы: photos.getWallUploadServer и photos.saveWallPhoto.
Пример:
def send_method(method, data=None): import logger import time logger.debug('Запуск %s с данными: %s.', method, data) rs = vk.method(method, data) logger.debug('Response: ""%s""', str(rs).encode()) time.sleep(0.5) retu rs# Путь к картинкеfile_name = ...rs = send_method('photos.getWallUploadServer')upload_url = rs['upload_url']rs = requests.post(upload_url, files={'photo': open(file_name, 'rb')})rs = json.loads(rs.text)rs = send_method('photos.saveWallPhoto', {'photo': rs['photo'], 'server': rs['server'], 'hash': rs['hash']})# attachments поместить в `vk.method('wall.post'`attachments = 'photo{}_{}'.format(OWNER_ID, rs[0]['id']) Войдите чтобы оставить ответ