Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/30: Рейтинг темы: голосов - 30, средняя оценка - 4.60
9 / 3 / 0
Регистрация: 02.01.2019
Сообщений: 133

Отправить фотографию в вк через Heroku

02.10.2019, 11:35. Показов 6679. Ответов 42

Студворк — интернет-сервис помощи студентам
Нужно загрузить фотографию на сервер из интернета и отправить в вк. Думаю, мне хватит в качестве ответа где будет хранится эта фотография после ее загрузки через requests. Информацию найти не смог.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.10.2019, 11:35
Ответы с готовыми решениями:

не могу отправить фотографию
Помогите пожалуйста чайнику!:( При отправке фотографий другим пользователям на мыло или при попытке загрузить их на сайт, например...

как отправить фотографию с сайта на почту
Здравствуйте! Подскажите пожалуйста скрипт для отправки картинки с сайта с текстом http://100.goldbazaar.ru/ клиент заполняет в поле текст...

Как из альбома в ВК, использую VK api, отправить фотографию в сообщения?
Я столкнулся с такой проблемой, что не знаю, как в сообщении отправить фотографию из альбома. Читал документацию от разработчиков, там...

42
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
03.10.2019, 07:50
Студворк — интернет-сервис помощи студентам
Кирилл12321, какие? ты мне не показал вызов где ты получаешь свое b
и давай переменным нормальные имена
b запрос прошел? ты получил жсон? выведи его в консоль и выложи сюда
0
9 / 3 / 0
Регистрация: 02.01.2019
Сообщений: 133
03.10.2019, 07:51  [ТС]
Дааа. Фото пустое -
Python
1
{'server': 853524, 'photo': '[]', 'hash': 'd54740631893ff45af5effa09e5b7cc3'}
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
03.10.2019, 07:53
Кирилл12321, весь код давай до получения b и вывода его в консоль
1
9 / 3 / 0
Регистрация: 02.01.2019
Сообщений: 133
03.10.2019, 07:54  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests
import vk_api, random
from vk_api import VkUpload
import io
import json
 
token = "*********"
 
vk = vk_api.VkApi(token=token)
 
vk._auth_token()
 
content = requests.get('https://twoplayers.info/wp-content/uploads/2017/12/Air-Missions-HIND_0.jpg').content
br = io.BufferedReader(io.BytesIO(content))
a1 = vk.method("photos.getMessagesUploadServer")
b = requests.post(a1['upload_url'], files={'photo': br}).json()
print(b)
c = vk.method('photos.saveMessagesPhoto', {'photo': b['photo'], 'server': b['server'], 'hash': b['hash']})[0]
vk.method("messages.send", {"peer_id": 490933633, "message": "Фотка", "attachment": f'photo{c["owner_id"]}_{c["id"]}', "random_id": random.randint(1, 2147483647)})
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
03.10.2019, 08:01
Цитата Сообщение от Кирилл12321 Посмотреть сообщение
One of the parameters specified was missing or invalid: photos_list is invalid
а про это читал? я не знаю что это значит, может ты забыл параметр добавить

с виду все правильно, но у меня нет токена вк, да и лень этим заниматься.
Хочешь -сохраняй на диск

вот ссылка где я твою картинку закинул на сайт
https://waifu2x.booru.pics/Hom... 8c3d_s1_n1

а вот как я это сделал, причем просто в консоли, без всяких сохранений
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 19:29:22) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> a = requests.get('https://twoplayers.info/wp-content/uploads/2017/12/Air-Missions-HIND_0.jpg')
>>> len(a.content)
105912
>>> con = a.content
>>> import io
>>> br = io.BufferedReader(io.BytesIO(con))
>>> url =  "https://waifu2x.booru.pics/Home/upload"
>>> HEADERS = {
...     'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65",
... }
>>> DATA = {
...     'denoise': '1',
...     'scale': '1',
... }
>>> FILES = {'img':br}
>>> rs = requests.post(url, files=FILES, data=DATA)
>>> rs.reason
'OK'
>>> rs.status_code
200
>>> rs.url
'https://waifu2x.booru.pics/Home/status?handle=H%3Awaifu%3A73924&hash=b5fc8ab89aadd7abe5d4527fa67cbcfcad088c3d_s1_n1'
1
9 / 3 / 0
Регистрация: 02.01.2019
Сообщений: 133
03.10.2019, 08:03  [ТС]
Да, многие писали что можно на сервер закинуть. Как тогда загрузить?
Цитата Сообщение от Welemir1 Посмотреть сообщение
а про это читал? я не знаю что это значит, может ты забыл параметр добавить
Дак тут фото не приходит в json-e. Понятно, что ругаться будет. То есть не отправляется фотография, ответ так же пустой
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
03.10.2019, 08:10
Кирилл12321, короче, разбирайся что ты делаешь не так или сохраняй файлы во временную папку - пайтон умеет ее создавать на лету, и хероку не помешает в этом. Читаем доки в обоих случаях
1
9 / 3 / 0
Регистрация: 02.01.2019
Сообщений: 133
03.10.2019, 17:01  [ТС]
Попробовал в Хероку все закинуть. Сработало, когда картинка была в 1 папке с исполняемым файлом. Однако перезаписать этот файл Хероку не смогла

Добавлено через 1 минуту
С временными файлами какие-то трудности. Нет ни одного нормального примера. Создание временной папки, но как загрузить файл в эту временную папку?

Добавлено через 28 секунд
Документация без примеров ничего не дает так же

Добавлено через 1 час 11 минут
Python
1
2
3
4
5
6
7
8
9
10
from PIL import Image
content = requests.get('https://twoplayers.info/wp-content/uploads/2017/12/Terraria_0.jpeg').content
 
image_data = content # byte values of the image
image = Image.open(io.BytesIO(image_data))
 
a1 = vk.method("photos.getWallUploadServer")
b = requests.post(a1['upload_url'], files={'photo': image}).json()
c = vk.method('photos.saveWallPhoto', {'photo': b['photo'], 'server': b['server'], 'hash': b['hash']})[0]
vk.method("wall.post", {"owner_id": -185546199, 'access_token': token, "attachment": f'photo{c["owner_id"]}_{c["id"]}', "message": "Фотка"})
Я близок к решению. Pil преобразует байты в фотографию обратно, однако ошибка все равно выходит
Python
1
2
    body.write(data)
TypeError: a bytes-like object is required, not 'JpegImageFile'
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
03.10.2019, 17:05
Лучший ответ Сообщение было отмечено Кирилл12321 как решение

Решение

Кирилл12321, а попробуй ка вот так
Python
1
2
image_data = content # byte values of the image
image = io.BytesIO(image_data)
и далее по тексту...
1
9 / 3 / 0
Регистрация: 02.01.2019
Сообщений: 133
03.10.2019, 17:12  [ТС]
Python
1
2
3
4
5
6
7
8
content = requests.get('https://twoplayers.info/wp-content/uploads/2017/12/Terraria_0.jpeg').content
 
image_data = content # byte values of the image
 
a1 = vk.method("photos.getWallUploadServer")
b = requests.post(a1['upload_url'], files={'photo': open(image)}).json()
c = vk.method('photos.saveWallPhoto', {'photo': b['photo'], 'server': b['server'], 'hash': b['hash']})[0]
vk.method("wall.post", {"owner_id": -185546199, 'access_token': token, "attachment": f'photo{c["owner_id"]}_{c["id"]}', "message": "Фотка"})
Вот так немного другая ошибка -

Python
1
2
b = requests.post(a1['upload_url'], files={'photo': open(image)}).json()
TypeError: expected str, bytes or os.PathLike object, not JpegImageFile
Добавлено через 36 секунд
Сейчас попробую

Добавлено через 1 минуту
Цитата Сообщение от Welemir1 Посмотреть сообщение
image_data = content # byte values of the image
image = io.BytesIO(image_data)
Ошибка -

Python
1
vk_api.exceptions.ApiError: [100] One of the parameters specified was missing or invalid: photos_list is invalid
Добавлено через 1 минуту
Может ошибка говорит о том, что файл должен быть в jpeg расширении? Это как-нибудь сделать можно?
Цитата Сообщение от Кирилл12321 Посмотреть сообщение
TypeError: a bytes-like object is required, not 'JpegImageFile'
Добавлено через 2 минуты
Цитата Сообщение от Кирилл12321 Посмотреть сообщение
open(image)
Команда открывает же картинку по пути, а тут сразу ей картинку дают без названия и всего. Не в этом дело?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
03.10.2019, 17:16
Цитата Сообщение от Кирилл12321 Посмотреть сообщение
One of the parameters specified was missing or invalid: photos_list is invalid
а ты это гуглил? пытался найти? там полно тем в инете что неверный запрос почти во всех случая, то груп_ид указывали то еще что-то, но не с картинкой.
1
9 / 3 / 0
Регистрация: 02.01.2019
Сообщений: 133
03.10.2019, 17:38  [ТС]
Да. В картинке дело

Добавлено через 10 минут
Других предложений нет?
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
03.10.2019, 18:22
Кирилл12321, эта функция список возвращает, что ли?
Python
1
c = vk.method('photos.saveWallPhoto', {'photo': b['photo'], 'server': b['server'], 'hash': b['hash']})[0]
Покажи, что у тебя в b
1
9 / 3 / 0
Регистрация: 02.01.2019
Сообщений: 133
03.10.2019, 18:26  [ТС]
Даааа. Мы отправляем в вк картинку и он должен дать к ней ссылку по типу photo131313_131414. Но массив пустой приходит.
Python
1
{'server': 858036, 'photo': '[]', 'hash': '5a3c289f7dd96a29e278c4494a3ddf31'}
Добавлено через 1 минуту
Python
1
2
3
4
content = requests.get('https://twoplayers.info/wp-content/uploads/2017/12/Terraria_0.jpeg').content
image_data = content # byte values of the image
image = io.BytesIO(image_data)
b = requests.post(a1['upload_url'], files={'photo': image}).json()
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
03.10.2019, 18:29
Кирилл12321, что в c?
попробуй не вызывать json() в пост запросе.
1
9 / 3 / 0
Регистрация: 02.01.2019
Сообщений: 133
03.10.2019, 18:30  [ТС]
Welemir1,
Цитата Сообщение от Welemir1 Посмотреть сообщение
а ты это гуглил? пытался найти? там полно тем в инете что неверный запрос почти во всех случая, то груп_ид указывали то еще что-то, но не с картинкой.
Это он ругается, что ссылка не пришла. А так да, запрос уходит...
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
03.10.2019, 18:31
Цитата Сообщение от Кирилл12321 Посмотреть сообщение
Это он ругается, что ссылка не пришла.
точно, ты гуглил? просто я посмотрел по темам и там всегда была проблема с самим запросом например ид группы.
1
9 / 3 / 0
Регистрация: 02.01.2019
Сообщений: 133
03.10.2019, 18:33  [ТС]
Python
1
2
3
4
5
a1 = vk.method("photos.getWallUploadServer")
b = requests.post(a1['upload_url'], files={'photo': image})
print(b)
c = vk.method('photos.saveWallPhoto', {'photo': b['photo'], 'server': b['server'], 'hash': b['hash']})[0]
vk.method("wall.post", {"owner_id": -185546199, 'access_token': token, "attachment": f'photo{c["owner_id"]}_{c["id"]}', "message": "Фотка"})
.json не вызывал, пришел ожидаемый ответ - response 200. Картинка то отправляется. Но вк ее не принимает и не дает ссылку

Добавлено через 31 секунду
Цитата Сообщение от Welemir1 Посмотреть сообщение
точно, ты гуглил? просто я посмотрел по темам и там всегда была проблема с самим запросом например ид группы.
Я все уже прогуглил

Добавлено через 57 секунд
Ид группы тоже может быть, но проверял загрузкой jpeg файла. Все работало. Значит из-за того, что ссылка на фотку от сервера не пришла
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
03.10.2019, 18:34
Кирилл12321, что-то не так делаешь. Используй тогда временную папку. Я тебе показал что способ с байтами работает, в чем твоя проблема не знаю.
1
9 / 3 / 0
Регистрация: 02.01.2019
Сообщений: 133
03.10.2019, 18:50  [ТС]
Да я знаю, что работает. Просто какие-то отличия между open и io.BytesIO(image_data) есть и вк их видит...

Добавлено через 3 минуты
С временной папкой тоже проблемы... Писал уже. Как в нее что сохранить - так и не понял. Библиотека tempfile же?
Цитата Сообщение от Кирилл12321 Посмотреть сообщение
С временными файлами какие-то трудности. Нет ни одного нормального примера. Создание временной папки, но как загрузить файл в эту временную папку?
Документация без примеров ничего не дает так же
Добавлено через 5 минут
Я ошибся. При загрузке jpeg файла ответ приходит такой -
Python
1
{'server': 857532, 'photo': '[{"photo":"cfbbf69d15:w","sizes":[["s",857532186,"8ea21","mCXRTL4bQ9w",58,75],["m",857532186,"8ea22","886D6FGMHX8",101,130],["x",857532186,"8ea23","cwnZKbTDEHg",468,604],["y",857532186,"8ea24","eNaCSnYxL4c",625,807],["z",857532186,"8ea25","5zEJlkiH8eY",836,1080],["w",857532186,"8ea26","nIZHXsnOMgA",874,1129],["o",857532186,"8ea27","R1KIJyIbCps",130,168],["p",857532186,"8ea28","qW2dFT09eLs",200,258],["q",857532186,"8ea29","PSD0uXSyI8c",320,413],["r",857532186,"8ea2a","gyi8bIIoiQE",510,659]],"latitude":0,"longitude":0,"kid":"951d44c2955ef5a5adf8ee6fab127598"}]', 'hash': '6439b8509d96d573531596643c298407'}
Добавлено через 1 минуту
В любом случае, можете подсказать как реализовать временной файл?

Добавлено через 3 минуты
Welemir1, Есть хоть какой-нибудь пример?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.10.2019, 18:50

Открыть фотографию через Paint
Подскажите как открыть фотографию в Paint? Process.Start откроет в программе которая стоит по умолчанию на данный формат...а нужно в PAINT

Как сменить фотографию пользователя через вебхук?
Я путаюсь написать файл обработчик, который отредактирует пользователя со стороннего ресурса. Проблемы с тем, как передать ему файл с...

Деплой проекта на heroku через docker
Добрый вечер! Использую бесплатную версию Heroku. Хочу yii2 basic полностью свежий проект задеплоить на хероку используя docker. ...

Не работает программа в Heroku, на телефоне работает, в heroku deploy дела, но при запуске крашится. Ошибки не понятные
Скачал у человека с Ютуба прогу, которая в телеге пишет комментарии к сообщениям на канале. В pydrone3 работает нормально, но постоянно в...

Не удается отправить запрос. Через браузер все ок, а через PHP не совсем
Привет! Пытаюсь отправить запрос, но что то не получается.. Вот исходник $token =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru