Методы VkAudio возвращают пустую строку вместо ссылки на аудиозапись
Наверняка проблема не в библиотеке, а просто ВК снова что-то шаманит с аудиозаписями, так как теперь тег <input type="hidden" value=""> пустой.
Используя инструменты разработчика в браузере я выяснил, что при нажатии на кнопку начала воспроизведения (в мобильной версии сайта) отправляется POST запрос на URL https://m.vk.com/audio c параметрами act=reload_audio и ids, а результатом запроса является нечто подобное: {'data': [[[456240032, 118264010, 'https://m.vk.com/mp3/audio_api_unavailable.mp3?extra=qxrqDO5AEhrWlZDfsLHPntPXqLHTCdGOzxnSyxqVsu9mCJfuns5LwxDyv2fLzdqXELH4qOLJzvboDNn5DgnOmxnInc1ZounUyMzTEMvqmtb0Dw5zus9UyxPPnJzIyxHksZbzmwnzx3zdCJaZBdz3ou1iyu5Uutq5C3PdB1fJswiXqwLmBM1YEw03s1rrrJaXt3u1lva1A2rdywrLBMrwmwDOy3PbCtrKDwmYm3v0zw94tI55n29PvZ1wAtuVBLD4vZ94t1DJsgiVEdHduOW3ow54x2vblOfZBLHsyxP1uNbWzdjVqwDzvY5yq28#AqS1nZi', 'One For The Money ', 'Escape The Fate', 198, 0, 0, '', 0, 2, ''...
Использую авторизацию через логин, пароль. Вчера вечером просто массово забанили 4 акка, за лимиты не выходил, да и никаких рассылок или других вещей не делал.
У кого ещё такая проблема? Есть мнение из за чего это произошло?
Ошибка в BotLongpoll появляется даже при выполнении кода, приведенного в примере
Печатает 85514032 для -170800454
Traceback (most recent call last):
File "C:\Users\User\Desktop\hsehelper\vkbot.py", line 67, in
main()
File "C:\Users\User\Desktop\hsehelper\vkbot.py", line 17, in main
for event in longpoll.listen():
File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\vk_api\bot_longpoll.py", line 271, in listen
for event in self.check():
File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\vk_api\bot_longpoll.py", line 251, in check
for raw_event in response['updates']
File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\vk_api\bot_longpoll.py", line 251, in
for raw_event in response['updates']
File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\vk_api\bot_longpoll.py", line 212, in _parse_event
return event_class(raw_event)
File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\vk_api\bot_longpoll.py", line 158, in init
if self.obj.peer_id < 0:
TypeError: '<' not supported between instances of 'NoneType' and 'int'
# -*- coding: utf-8 -*-
import vk_api
import options as o
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
def main():
""" Пример использования bots longpoll
https://vk.com/dev/bots_longpoll
"""
vk_session = vk_api.VkApi(логин, пароль)
vk_session.auth()
longpoll = VkBotLongPoll(vk_session, идгруппы)
for event in longpoll.listen():
if event.type == VkBotEventType.MESSAGE_NEW:
print('Новое сообщение:')
print('Для меня от: ', end='')
print(event.obj.from_id)
print('Текст:', event.obj.text)
print()
elif event.type == VkBotEventType.MESSAGE_REPLY:
print('Новое сообщение:')
print('От меня для: ', end='')
print(event.obj.peer_id)
print('Текст:', event.obj.text)
print()
elif event.type == VkBotEventType.MESSAGE_TYPING_STATE:
print('Печатает ', end='')
print(event.obj.from_id, end=' ')
print('для ', end='')
print(event.obj.to_id)
print()
elif event.type == VkBotEventType.GROUP_JOIN:
print(event.obj.user_id, end=' ')
print('Вступил в группу!')
print()
elif event.type == VkBotEventType.GROUP_LEAVE:
print(event.obj.user_id, end=' ')
print('Покинул группу!')
print()
else:
print(event.type)
print()
if __name__ == '__main__':
main()
```
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll
vk_session = vk_api.VkApi(token='мой токен')
vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, 'айди моей группы')
for event in longpoll.listen():
if event.from_chat and event.obj.text.lower() == 'Привет':
vk.messages.send(
chat_id=event.chat_id,
random_id=get_random_id(),
message='Привет!',
reply_to=event.obj.conversation_message_id,
)
При попытке отправить сообщение получаю ошибку:
vk_api.exceptions.ApiError: [100] One of the parameters specified was missing or invalid: reply_to have to be message from same chat
Не получается получить\отправить сообщение в беседу. В лс работает без проблем, а вот в беседах нет.
vk.messages.send( #Отправляем сообщение
user_id=event.user_id,
message='Ваш текст',
random_id=random.randint(-2147483648, +2147483648)
)
работает, а вот беседы нет:
send_message(vk_session, 'chat_id', event.chat_id, message='Держите котиков!', attachment=None)
def send_message(vk_session, id_type, id, message=None, attachment=None, keyboard=None):
vk_session.method('messages.send',{id_type: id, 'message': message, 'random_id': random.randint(-2147483648, +2147483648), "attachment": attachment, 'keyboard': keyboard})
В поле токен вставляется сервисный ключ полученный из настроек приложения
Выдает: User authorization failed: no access_token passed.
Если убрать логин то вообще отказывается авторизовываться
Как это все нормально сделать?
I recently saw that VK seems to be really bad at sanitizing some fields such as usernames.
Loading a bunch of members with vk_api yielded an ugly
JSONDecodeError: Invalid control character at: line 1 column 68248 (char 68247)
Inspecting this by hand, I found that the response contains this abomination:
In [32]: e[68200:68259]
Out[32]: ',"is_closed":false},{"id":27497241,"nickname":"\x01","domain":'
Of course, <0x01> is not a codepoint that you'd want in a nickname, ever!
Since the data is nonsensical, not printable and potentially dangerous, my suggestion would be to catch JSONDecodeErrors and try to sanitize the raw content before parsing it with json.loads.
There are many options for replacing the problematic characters, but regex should be reasonably fast. As a bonus, it allows us to catch control characters as a category (\p{C}) rather than listing them by hand.
Добрый день, возможно-ли на данный момент получать аудио с плейлиста по ссылке? Например я хочу сделать бота который будет требовать ссылку на плейлист, затем скачивая плейлист и его воспроизоводить.
Надеюсь вы мне ответите
Похоже, что проблема появляется на этапе отправки POST-запроса.
HTTPSConnectionPool(host='ovu.mycdn.me', port=443): Max retries exceeded with url: /upload.do?sig=...
(Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)')))
opened by novikalexy 1
Releases(v11.9.9)
v11.9.9(Jun 25, 2022)
Исправлена аутентификация (возможно только частично #469)
Тысячи часов рефакторина и ломания обратной совместимости. Ставьте звездочки на дошираки автору
Чтобы мигрировать с 8.* на 9.0 нужно:
Заменить вызов VkApi.authorization на VkApi.auth (vk.authorization() на vk.auth())
Заменить AuthorizationError на AuthError
Удалить использования аргументов VkApi.__init__: number, sec_number, proxies
Вместо number, sec_number просто передавайте номер в login
Прокси можно по прежнему установить как в примере
(Опционально) Удалить старый конфиг vk_config.json
Изменения:
Добавлен base класс для конфига (#76)
Добавлена возможность вызывать VkApi.auth без пароля - будут использоваться данные из конфига
Изменен формат конфига:
Токены с разным app_id и scope сохраняются отдельно - не нужно вызывать VkApi.auth(reauth=True) чтобы получить токен с новым app_id или scope
Куки сохраняются со всей информацией (чтобы защитить куки от отправки на сторонние домены)