mirror of
https://gitverse.ru/kpa39l/md2vk.git
synced 2026-09-29 18:05:04 +00:00
5.2 KiB
5.2 KiB
md2vk — Взаимодействие с VK API
Источник: официальная документация VK (dev.vk.com / id.vk.ru), проверено 2026-09. Услуга работает через официальный протокол OAuth 2.0 и VK API — никакого «взлома».
Как это работает
- OAuth-авторизация. Пользователь нажимает «Прикрепить аккаунт» → редирект на VK.
Пользователь подтверждает вход и выдаёт приложению права (scopes, обязателен
wall). Сервис не получает пароль — только временный код/токен. - Access Token. VK возвращает сервису access token — цифровой ключ с ограниченными правами (например, только публикация записей).
- Публикация через API. Сервис вызывает
wall.postс текстом/вложениями,owner_id,from_group. Авторизация —access_tokenв параметрах запроса.
Ссылки на официальную документацию
| Что | Ссылка |
|---|---|
| Создание и настройка приложения (VK ID, Standalone) | https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/connection/create-application |
| Общая документация по API | https://dev.vk.com/ru/reference |
| Авторизация (OAuth 2.0/2.1) | https://id.vk.com/about/business/go/docs/ru/vkid/latest/vk-id/connection/start-integration/auth-without-sdk/auth-without-sdk-web |
| Метод wall.post | https://dev.vk.com/ru/method/wall.post |
| Создать приложение (dev.vk.com) | https://dev.vk.com |
OAuth-флоу (ссылка для получения токена)
https://oauth.vk.com/authorize?client_id=<client_id>&scope=wall,offline&redirect_uri=<redirect>&response_type=token
client_id— ID приложения VK (см. VK ID).scope— обязателенwall;offline— долгоживущий токен.response_type=token— токен приходит в фрагменте редиректа.- После ответа:
access_token,user_id,expires_in(0 = бессрочно).
Публикация (wall.post)
https://api.vk.com/method/wall.post
POST data: access_token, v=5.199, owner_id, message, from_group, attachments, publish_date, format_data
Параметры в нашем клиенте (app/vk_client.py):
| Параметр | Когда | Значение |
|---|---|---|
owner_id |
группа | отрицательный ID сообщества (-123), для пользователя не передаём |
from_group |
группа | 1 — пост от имени группы |
friends_only |
опц. | только друзьям |
publish_date |
отложка | Unix timestamp |
attachments |
опц. | photo123_456,... |
signed |
группа | подпись автора |
format_data |
всегда | JSON {"version":1,"items":[...]} |
Ответ: {"response":{"post_id":N,"owner_id":M}} → URL https://vk.com/wall{M}_{N}.
Важно про токены
- Для личной стены — токен пользователя.
- Для стены сообщества — токен администратора группы с правами
wallиphotos. - Токены сообщества из настроек группы («Работа с API») для
wall.postне подходят — нужен именно пользовательский токен.
Лонгриды (статьи) — ограничение
- Создавать статьи через официальный VK API нельзя. В FAQ VK: «методов для работы с лонгридами пока что нет».
- Можно опубликовать на стене существующую статью через
wall.post:attachments=articleXXX_YYY, гдеXXX— ID автора (для сообщества — с минусом),YYY— ID статьи. Статья должна быть уже опубликована (черновик прикрепить нельзя). - Значит, полный автоматический дубликат блога (генерация лонгридов «из коробки») невозможен. Варианты: посты+фото+ссылки через API, статьи вручную, гибрид.
Версия API
- В конфиге
VK_API_VERSION=5.199(app/config.py). - Проверка токена:
users.get(пустой user_ids → текущий пользователь).
Ошибки
Формат ошибки VK: {"error":{"error_code":N,"error_msg":"..."}}.
Наш клиент бросает VkApiError(error_code, error_msg); в API публикации ошибка пишется в
publications.error_message, ответ success=false.