Как отправить фото с ПК в беседу VK_API
Всем привет! Мне надо, чтобы бот отправлял фотку C ПК в беседу ВКонтакте. Вот моя часть кода:
import vk_api from bs4 import BeautifulSoup import time import requests vk_session = vk_api.VkApi(token=TOKEN1) # Вход по токену. vk = vk_session.get_api() slovo = 'изменения' or 'изменение' or 'расписание' url = 'https://vk.com/' + doc if slovo in text: if ts > old_ts: print('-----------------') print('отправил сообщение') print('-----------------\n') arg = 'wall-'+new_owner+'_'+ts_id # получаем данный на последний пост webbrowser.open_new_tab(url) time.sleep(1) screen = pyautogui.screenshot('screenshot.png') pyautogui.screenshot('screenshot.png', region=(814, 300, 100, 200)) template = pyautogui.locateOnScreen('screenshot.png') #vk.messages.send(chat_id='2',random_id = '',attachment = arg,message = '.') # отправляем от лица группы в ЛС time.sleep(8) os.remove('C:\\Users\\weil\\Desktop\\vk\\screenshot.png') print('successful')
Отслеживать
3,149 2 2 золотых знака 11 11 серебряных знаков 36 36 бронзовых знаков
Как отправить фото в Вк ботом с помощью Python?
Я новичок и только начал разбираться в pythone. Посмотрел много решений не помогло. Я хочу отправить фото с компьютера в личное сообщение с пользователем от имени сообщества. Помогите пожалуйста и пожалуйста можно очень подробно.
Заранее спасибо.
- Вопрос задан более трёх лет назад
- 16221 просмотр
Комментировать
Решения вопроса 0
Ответы на вопрос 3

EvgenyCherny @EvgenyCherny
I’m don’t want you say I love you.
Привет, ты можешь воспользоваться комментариями выше, но я отвечу на твой вопрос
«Я хочу отправить фото с компьютера»
так вот чтобы отправить фото с компьютера нужно его загрузить и отправить методом messages.send
Ниже приведен код:
a = vk.method("photos.getMessagesUploadServer") b = requests.post(a['upload_url'], files=).json() c = vk.method('photos.saveMessagesPhoto', )[0] d = "photo<>_<>".format(c["owner_id"], c["id"]) vk.method("messages.send", )
Также не забудьте прописать import requests
Ответ написан более трёх лет назад
Нравится 1 1 комментарий
Знаю, что поздно пишу, но у меня ошибка
File "E:\Projects\Bots\Telegram Bot to Vk posting\vk2.py", line 10, in b = requests.post(vk.method("photos.getMessagesUploadServer")['upload_url'], files=).json() TypeError: VkApiMethod.__call__() takes 1 positional argument but 2 were given

Роман @Bloodie_lie
В vk_api встроена нужная вам функция VkUpload
Пример:
upload = vk_api.VkUpload(vk) photo = upload.photo_messages('вашфайл') owner_id = photo[0]['owner_id'] photo_id = photo[0]['id'] access_key = photo[0]['access_key'] attachment = f'photo__' vk.messages.send(peer_id=event.object.peer_id, random_id=0, attachment=attachment)
Ответ написан более трёх лет назад
Нравится 1 2 комментария
wenzeslaus @wenzeslaus
знаю поздно пишу , но у меня он жалуется на последнюю строчку vk.messages.send(peer_id=event.object.peer_id, random_id=0, attachment=attachment)
Traceback (most recent call last):
File «C:/Users/slava/PycharmProjects/pythonProject1/venv/test.py», line 24, in
vk.messages.send(peer_id=event.object.peer_id, random_id=0, attachment=attachment)
NameError: name ‘event’ is not defined
Я в этом деле новичок, но хотелось бы узнать почему это могло произойти. В качестве фотографии я использую скриншот
pg.screenshot("screenshotacran.png") upload = vk_api.VkUpload(vk) photo = upload.photo_messages('screenshotacran.png') owner_id = photo[0]['owner_id'] photo_id = photo[0]['id'] access_key = photo[0]['access_key'] attachment = f'photo__' vk.messages.send(peer_id=event.object.peer_id, random_id=0, attachment=attachment)
VK API. Как отправить в сообщении картинку(аунтификация через сообщество)?
У меня есть код который отправляет сообщения, но нужно чтобы он вместе с этим сообщением отправлял картинку(одну)
Помогите загрузить картинку с компьтера на сервер вк и отправить её в сообщении, пожалуйста.
Или приложите свой пример кода
- Вопрос задан более трёх лет назад
- 8056 просмотров
1 комментарий
Простой 1 комментарий
Исходник Гайд Как отправить фото в VK
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.
Yondime
кавайчик
Автор темы
Проверенный
Всем привет, был заказ с отправкой фотки в ВК, поискал инфу на бластхаке и не нашел, решил заставить сделать @th3egdvach
Первым делом нам нужно подключить необходимые либы и ввести токен с айди юзера + рандомное число для ВК АПИ
Вводим константы + либы:
local requests = require("requests") -- самая крутая либа local USER_ID = 010101010110 -- айди пользователя local GROUP_TOKEN = "ПРИВАТКА" -- токен группы
Нужная функция для ВК АПИ, получаем рандомное число:
function randomInt() -- выдает рандомное число, чтобы сообщение отправилось ( требует вк апи ) math.randomseed(os.time() + os.clock()) return math.random(-2147483648, 2147483648) end
Чтобы отправить фото, мы сделаем функцию для простого использования
Вызываем функцию отправления фотографии:
sendPhoto(getGameDirectory()..'/1.png') function sendPhoto(path) -- содержимое функции распишу ниже end
Для отправки фотки, следуя методам по апи вк, нужно залить ее на сервер
Загрузка фотки на сервер:
local upResponse = requests.post(("https://api.vk.com/method/photos.getMessagesUploadServer?user_id=%d&access_token=%s&v=5.131"):format(USER_ID, GROUP_TOKEN)).json() -- отправляем запрос на метод вк, в котором получаем ссылочку для загрузки local uploadedResponse = uploadPhoto(path, upResponse.response.upload_url) -- загружаем фото на ссылку
Функция загрузки фотки по ссылке:
Загружаем фотографию по полученной ссылке:
function uploadPhoto(filename, uploadUrl) local fileHandle = io.open(filename,"rb") if (fileHandle) then local fileContent = fileHandle:read( "*a" ) fileHandle:close() local boundary = 'abcd' local header_b = 'Content-Disposition: form-data; name="file"; filename="' .. filename .. '"\r\nContent-Type: image/png\r\n' local fileContent = '--' ..boundary .. '\r\n' ..header_b ..'\r\n'.. fileContent .. '\r\n--' .. boundary ..'--\r\n' local resp = requests.post(uploadUrl, < headers = < ["Content-Length"] = fileContent:len(), ['Content-Type'] = 'multipart/form-data; boundary=' .. boundary >, data = fileContent >) return resp.json() end end
Дальше мы сохраняем нашу фоточку по методу в вк апи чтобы получить нужные нам данные для прикрепления ее к сообщению
Получаем данные для прикрепления фотографии к сообщению:
local saveResponse = requests.post(("https://api.vk.com/method/photos.saveMessagesPhoto?server=%d&photo=%s&hash=%s&access_token=%s&v=5.131"):format(uploadedResponse.server,uploadedResponse.photo,uploadedResponse.hash, GROUP_TOKEN)).json() local image = saveResponse.response[1] local att_image = ("photo%d_%d_%s"):format(image.owner_id, image.id, image.access_key)
Ну и в конце мы просто отправляем стандартное сообщение вк обычным методом
Отправляем сообщение с прикрепленной Фотографией:
return requests.post(("https://api.vk.com/method/messages.send?user_id=%d&attachment=%s&access_token=%s&random_id=%d&v=5.131"):format(USER_ID, att_image, GROUP_TOKEN, randomInt())) -- обычный способ отправки вк
В итоге так будет выглядеть функция в сборе:
Готовая функция sendPhoto:
function sendPhoto(path) local upResponse = requests.post(("https://api.vk.com/method/photos.getMessagesUploadServer?user_id=%d&access_token=%s&v=5.131"):format(USER_ID, GROUP_TOKEN)).json() local uploadedResponse = uploadPhoto(path, upResponse.response.upload_url) local saveResponse = requests.post(("https://api.vk.com/method/photos.saveMessagesPhoto?server=%d&photo=%s&hash=%s&access_token=%s&v=5.131"):format(uploadedResponse.server,uploadedResponse.photo,uploadedResponse.hash, GROUP_TOKEN)).json() local image = saveResponse.response[1] local att_image = ("photo%d_%d_%s"):format(image.owner_id, image.id, image.access_key) return requests.post(("https://api.vk.com/method/messages.send?user_id=%d&attachment=%s&access_token=%s&random_id=%d&v=5.131"):format(USER_ID, att_image, GROUP_TOKEN, randomInt())) end
Готовый код прикреплю в файлике ниже
Если есть вопросы, готов ответить на них в теме или лс группы вк