Как использовать логирование для поиска чата, который возвращает ошибку "ApiError: 917"?

Как можно использовать Python и vk_api для логирования и поиска беседы в сообществе ВКонтакте? У меня есть специальная программа на Python с методом messages.getConversations, но при попытке получить список чатов возникает ошибка vk_api.exceptions.ApiError: [917] You don't have access to this chat. По документации это означает "Нет доступа к чату", что, вероятно, указывает на беседу. Мне было посоветовано попробовать найти беседу с помощью логирования и затем исключить её из запросов или предоставить необходимые права. Как можно реализовать данное логирование на Python и vk_api?
  • 3 января 2024 г. 17:26
Ответы на вопрос 2
Логирование в Python можно реализовать с помощью стандартного модуля `logging`. Для вашей задачи вы можете добавить логгирование непосредственно перед местом, где вызывается метод `messages.getConversations`, чтобы записывать информацию о каждом запросе и отлавливать ошибку `ApiError: 917`.

Вот как это можно сделать на примере:

```python
import logging
import vk_api
from vk_api.exceptions import ApiError

# Настройка логгирования
logging.basicConfig(filename='vk_bot.log', level=logging.INFO,
                    format='%(asctime)s - %(levelname)s - %(message)s')

# Ваш токен и инициализация VK API
vk_session = vk_api.VkApi(token='your_access_token')
vk = vk_session.get_api()

try:
    # Запишем лог с информацией о попытке получения списка бесед
    logging.info('Попытка получения списка бесед')

    conversations = vk.messages.getConversations()

    # Если операция успешна - записываем лог об успешном выполнении
    logging.info('Успешное получение списка бесед')

except ApiError as e:
    if e.code == 917:
        # Записываем лог об ошибке
        logging.error(f'Нет доступа к чату: {e}')
        # Здесь вы можете добавить логику исключения чата из запросов или обработку ошибки
    else:
        # Логирование других ошибок VK API
        logging.error(f'VK API Error: {e}')

# Дальнейший код вашей программы...
```

Если возникает ошибка с кодом 917, это будет залогировано, и вы сможете увидеть это в файле лога (в данном примере называемом `vk_bot.log`). Вышеуказанный код предполагает, что вы используете логгирование только для отладки этой конкретной ошибки. Вы можете настроить логгирование подробнее и использовать разные уровни (DEBUG, INFO, WARNING, ERROR и CRITICAL) для разных частей вашей программы.

Помимо логирования непосредственно ошибки, вы можете захотеть логировать ID беседы при каждом запросе, чтобы узнать, какой chat_id приводит к ошибке. Это потребует от вас итерировать по всем беседам при помощи параметров `offset` и `count` в методе `messages.getConversations`, логировать каждый запрос и отслеживать ответ, чтобы выявить, на каком шаге возникает ошибка.

После того как вы определите проблемный chat_id, вы можете попробовать выяснить, почему доступ к нему не предоставлен (например, могут быть необходимы дополнительные разрешения для пользователя или группы, от имени которой выполняется запрос), и, если возможно, предоставить необходимые права доступа через настройки сообщества ВКонтакте или изменить параметры в коде, чтобы исключить беседу из запросов.
Заверни вызов метода в try - except, в ветке except пиши в журнал (хоть стандартынй модуль logging, хоть просто в файл) id чата, с которым пытался работать.
Похожие вопросы