аватар question@mail.ru · 01.01.1970 03:00

Постинг в Vk через Vk.Api - 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=""Просто текст..."")
аватар answer@mail.ru · 01.01.1970 03:00

Попробуйте скрипт сначала на своей странице (укажите 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'])

Последние

Похожие