Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 21.07.2022
Сообщений: 14
VK API

Ошибка vk_api.exceptions.ApiError: [121] Invalid hash

22.07.2022, 18:35. Показов 2006. Ответов 9

Студворк — интернет-сервис помощи студентам
Короче, делаю програмку которая будет постить картинки в сообщество(с циклом for), но вот незадача, баг в апи(или как это можно назвать) не дает мне постить. Дело в том, что надо сохранять их на полученный url. Для этого используется функция photos.saveWallPhoto. Её параметр, который нужен для работы и мешает мне:

group_id
positive

Идентификатор сообщества, на стену которого нужно сохранить фотографию.

Дело в том, что id сообщества - обязательно отрицательное число. Мне нужно либо подправить библиотеку(если это вообще возможно), либо как-нибудь чем-нибудь воспользоваться.
Если что, вот код(Осторожно! Много чего недоделано и много мусора, только начал писать программу):
# -*- coding: cp1251 -*-
import os.path
import requests
import vk_api

album_id_ = айди альбома
public_id = -айди паблика
vk_session = vk_api.VkApi(
token='токен')
vk = vk_session.get_api()
number_arts = len([1 for x in list(os.scandir("arts")) if x.is_file()])
print("артов:", number_arts)
print(vk.photos.getWallUploadServer(albu m_id=album_id_, group_id=public_id))
uploadServer = vk.photos.getWallUploadServer(album_id=a lbum_id_, group_id=public_id)
uploadUrl = uploadServer["upload_url"]
print("Ссылка на загрузку:", uploadUrl)
path = r"C:/Users/SuperUser/PycharmProjects/bot/arts/"
artslist = os.listdir(path)
print(artslist)
for a in range(0, number_arts):
pth = path + artslist[a]
fp = open(pth, 'rb')
file = {'file': fp}
pt = requests.post(uploadUrl, files=file)
fp.close()
res = pt.json()
print(res)
pwi = vk.photos.saveWallPhoto(group_id=public_ id, server=res["server"], photo=res["photo"], hash=res["hash"])
pdi = str(pwi[0]["id"])
print(pwi)
print("photo" + sublic_id + "_" + str(pwi[0]["id"]) + " запощено")
next_date = 1658599521
vk.wall.post(
owner_id=public_id,
attachment="{0}{1}_{2}".format(
"photo",
sublic_id,
pdi
),
friends_only=0,
from_group=1,
publish_date=next_date
)
# os.delete(path[a])

Надеюсь ничего не упустил.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.07.2022, 18:35
Ответы с готовыми решениями:

Vk_api.exceptions.ApiError: [100] One of the parameters specified was missing or invalid
писал бота для ВК я не понимаю в чём проблема, вроде бы всё правильно код списан с примера import vk_api from vk_api.longpoll...

Vk_api.exceptions.ApiError: [5] User authorization failed: invalid session
В чём тут может быть проблема? Уже не знаю что делать import vk_api from vk_api.longpoll import VkLongPoll, VkEventType from...

Vk_api.exceptions.ApiError: [5] User authorization failed: invalid access_token (4)
не могу понять, почему такая ошибка появляется #group's token TOKEN = "#TOKEN" GROUPID = GROUPID #import required modules ...

9
Эксперт по компьютерным сетям
 Аватар для Jabbson
5906 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.07.2022, 19:49
Цитата Сообщение от d1n0z4ur Посмотреть сообщение
Дело в том, что id сообщества - обязательно отрицательное число
почему?

Добавлено через 3 минуты
выполнил сейчас vk.groups.get(), получил
Code
1
{'count': 7, 'items': [23213239, 62018337, 58737741, 22231730, 104866704, 111178961, 148059368]}
выглядят положительными

Добавлено через 46 секунд
Цитата Сообщение от d1n0z4ur Посмотреть сообщение
Надеюсь ничего не упустил.
теги кода упустили

Добавлено через 2 минуты
На странице самого VK про этот запрос (photos.saveWallPhoto) тоже написано, что должно быть положительное число
https://vk.com/dev/photos.saveWallPhoto

Добавлено через 9 минут
почему странный метод загрузки такой? есть встроенный в vk_api
класс VkUpload - https://vk-api.readthedocs.io/... pload.html
в нем метод photo_wall https://vk-api.readthedocs.io/... photo_wall
0
0 / 0 / 0
Регистрация: 21.07.2022
Сообщений: 14
22.07.2022, 20:24  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
почему?

Добавлено через 3 минуты
выполнил сейчас vk.groups.get(), получил
Code
1
{'count': 7, 'items': [23213239, 62018337, 58737741, 22231730, 104866704, 111178961, 148059368]}
выглядят положительными

Добавлено через 46 секунд

теги кода упустили

Добавлено через 2 минуты
На странице самого VK про этот запрос (photos.saveWallPhoto) тоже написано, что должно быть положительное число
https://vk.com/dev/photos.saveWallPhoto

Добавлено через 9 минут
почему странный метод загрузки такой? есть встроенный в vk_api
класс VkUpload - https://vk-api.readthedocs.io/... pload.html
в нем метод photo_wall https://vk-api.readthedocs.io/... photo_wall
Цитата Сообщение от Jabbson Посмотреть сообщение
почему странный метод загрузки такой? есть встроенный в vk_api
класс VkUpload - https://vk-api.readthedocs.io/... pload.html
в нем метод photo_wall https://vk-api.readthedocs.io/... photo_wall
Странно, но когда я решил использовать vk_api.upload.photo_wall(photos=pth, group_id=public_id), он начал писать AttributeError: module 'vk_api.upload' has no attribute 'photo_wall'

Добавлено через 7 минут
Очень странно, я че то нашаманил в библиотеке, потом вернул всё обратно и заработало, только теперь пишет TypeError: __call__() takes 1 positional argument but 2 were given
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5906 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.07.2022, 20:53
Цитата Сообщение от d1n0z4ur Посмотреть сообщение
TypeError: __call__() takes 1 positional argument but 2 were given
вне контекста эта ошибка ни о чем не говорит
0
0 / 0 / 0
Регистрация: 21.07.2022
Сообщений: 14
22.07.2022, 21:03  [ТС]
# -*- coding: cp1251 -*-

import os.path
import requests
import vk_api

album_id_ = ...
public_id = -...
sublic_id = "..."
vk_session = vk_api.VkApi(
token='...')
vk = vk_session.get_api()
number_arts = len([1 for x in list(os.scandir("arts")) if x.is_file()])
print("артов:", number_arts)
print(vk.photos.getWallUploadServer(albu m_id=album_id_, group_id=public_id))
uploadServer = vk.photos.getWallUploadServer(album_id=a lbum_id_, group_id=public_id)
uploadUrl = uploadServer["upload_url"]
print("Ссылка на загрузку:", uploadUrl)
path = r"C:/Users/SuperUser/PycharmProjects/bot/arts/"
artslist = os.listdir(path)
print(artslist)
for a in range(0, number_arts):
pth = path + artslist[a]
fp = open(pth, 'rb')
file = {'file': fp}
pt = requests.post(uploadUrl, files=file)
fp.close()
res = pt.json()
print(res)
pwi = vk.upload.photo_wall(pth, group_id=public_id)
pdi = str(pwi[0]["id"])
print(pwi)
print("photo" + sublic_id + "_" + str(pwi[0]["id"]) + " запощено")
next_date = 1658599521
vk.wall.post(
owner_id=public_id,
attachment="{0}{1}_{2}".format(
"photo",
sublic_id,
pdi
),
friends_only=0,
from_group=1,
publish_date=next_date
)

Добавлено через 8 минут
Надеюсь вам всего кода достаточно будет, чтобы разобраться?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5906 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.07.2022, 21:06
тэги никак?

Добавлено через 14 секунд
полный текст ошибки?

Добавлено через 20 секунд
все еще не понимаю почему requests

Добавлено через 1 минуту
Цитата Сообщение от d1n0z4ur Посмотреть сообщение
я че то нашаманил в библиотеке
и мы тебе будем пытаться разобраться как работает код библиотеки, в которой "что-то нашаманено"?
0
0 / 0 / 0
Регистрация: 21.07.2022
Сообщений: 14
22.07.2022, 21:28  [ТС]
requests это кусок старого кода, решил не удалять на всякий если не сработает этот.
Полный код ошибки:
Traceback (most recent call last):
File "C:/Users/SuperUser/PycharmProjects/bot/bot_post.py", line 33, in <module>
pwi = vk.upload.photo_wall(pth)
TypeError: __call__() takes 1 positional argument but 2 were given

Добавлено через 38 секунд
В библиотеке ничего не нашаманено, говорю же, вернул как было

Добавлено через 18 минут
Вот код с тегами
import os.path
# import requests
import vk_api

# album_id_ = ... # id альбома для сохранения фотографии(обломок старого кода)
public_id = -... # int id сообщества
str_public_id = "..." # str id сообщества
vk_session = vk_api.VkApi(
token='...')
vk = vk_session.get_api()
number_arts = len([1 for x in list(os.scandir("arts")) if x.is_file()]) # кол-во картинок в папке
print("артов:", number_arts)
"""print(vk.photos.getWallUploadServer(a lbum_id=album_id_, group_id=public_id)) # обломки старого кода(не удаляю на всякий)
uploadServer = vk.photos.getWallUploadServer(album_id=a lbum_id_, group_id=public_id)
uploadUrl = uploadServer["upload_url"]
print("Ссылка на загрузку:", uploadUrl)"""
path = r"C:/Users/SuperUser/PycharmProjects/bot/arts/" # необработаный str с путем к картинкам
artslist = os.listdir(path) # список картинок
print(artslist)
for a in range(0, number_arts): # обычный цикл range(0, общее число картинок)
pth = path + artslist[a] # путь к картинкам + названия самих картинок
"""fp = open(pth, 'rb') # обломки старого кода(не удаляю на всякий)
file = {'file': fp}
pt = requests.post(uploadUrl, files=file)
fp.close()
res = pt.json()
print(res)"""
pwi = vk.upload.photo_wall(pth, group_id=public_id) # сама переменная с сохранением картинки на стену
pdi = str(pwi[0]["id"]) # переменная str с id сохранённой картинки
print(pwi)
print("photo" + str_public_id + "_" + str(pwi[0]["id"]) + " запощено")
next_date = 1658599521 # следующая дата отправки(не доделано)
vk.wall.post( # пост на стену
owner_id=public_id, # id автора поста(сообщества)
attachment="{0}{1}_{2}".format( # Подвязка картинки к посту
"photo", # тип
str_public_id, # id сообщества
pdi # str id картинки
),
friends_only=0, # только для друзей(0=для всех)
from_group=1, # от сообщества без подписи автора(1=да)
publish_date=next_date # дата отправки поста
)
# os.delete(path[a]) # не дописано, т.к. ещё делаю программу
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5906 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.07.2022, 22:16
Лучший ответ Сообщение было отмечено d1n0z4ur как решение

Решение

Ну как там можно, видно ведь, что разметка вся слетает... Есть теги кода (не комментарии), которые оформляют код, чтобы он выглядел хорошо на форуме, с отступами, разукрашенный...

Так или иначе, зашел на вк (первый раз за последние лет Х), создал сообщество, написал вот это, оно работает.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import glob
import vk_api
 
vk_session = vk_api.VkApi(login="...", password="...")
vk_session.auth()
vk = vk_session.get_api()
uploader = vk_api.VkUpload(vk)
 
grp = 214669706
images = glob.glob('./photos/*')        
        
photo_list = uploader.photo_wall(photos=images, group_id=grp)
attachment = ','.join('photo{owner_id}_{id}'.format(**item) for item in photo_list)
 
vk_session.method("wall.post", {
    'owner_id': -grp,
    'message': 'testing api',
    'attachment': attachment,
})
Почему у меня просто все всегда работает?..
1
Эксперт по компьютерным сетям
 Аватар для Jabbson
5906 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.07.2022, 22:17
0
0 / 0 / 0
Регистрация: 21.07.2022
Сообщений: 14
23.07.2022, 09:21  [ТС]
Огромное спасибо, только не понимаю что я сделал не так...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.07.2022, 09:21
Помогаю со студенческими работами здесь

Vk_api.exceptions.ApiError: [100] One of the parameters specified was missing or invalid: random_id is a required parame
Я сделал простого бота для сообщества в вк, вроде всё сделал правильно, но когда пишу боту выдаёт три ошибки. Скажите пожалуйста, что я...

Error: vk_api.exceptions.ApiError
Доброе утро формчане есть простой код с работой Vk-API # -*- coding: utf-8 -*- import vk_api from vk_api.longpoll import...

Vk_api.exceptions.ApiError: [901] Can't send messages for users without permission
import vk_api from vk_api.utils import get_random_id from random import * from vk_api import VkUpload from vk_api.keyboard import...

VkApi (vk_api.exceptions.ApiError: [15] Access denied: no access to call this method)
Не работает код на питоне, что я делаю не так? или как это исправить from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType ...

VK API saveWallPhoto error 121: Invalid hash
Доброго времени суток всем. Захотелось выложить фотографию на стену группы. Казалось бы читай маны и делай. Что получилось: ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru