Skip to main content

OldVKAPI

Синхронный Python-клиент к API из OldVK.apk v1.3.1 (com.vkontakte.android). Протокол восстановлен дизассемблированием classes.dex — подробности в OldVK_API.md (главы 2–10).

Коротко о протоколе: все вызовы — POST http(s)://oldvk.mooo.com:8080/api.php с полями method/v=3.0/format=json/api_id=2274003 + параметры + sig (MD5(uid + сортированные key=value + secret)) + sid. Авторизация — auth.getTokenSecure → digest(MD5) → auth.getSessionSecure.

Установка

pip install requests
pip install -e .   # из каталога OldVKAPI

CLI — без кода

export OLDVK_LOGIN='...' OLDVK_PASSWORD='...'
python -m oldvkapi login
python -m oldvkapi call newsfeed.get --param count=5 --param filters=post
python -m oldvkapi execute 'return {c:API.getCounters()};'
python -m oldvkapi longpoll --count 3
python -m oldvkapi upload-wall-photo pic.jpg --message "Привет!"

Все команды, флаги и коды выхода — в разделе CLI на сайте документации.

Быстрый старт (код)

from oldvkapi import OldVK

vk = OldVK(session_file="~/.oldvkapi/session.json",
           auto_reauth=True,      # молча обновлять сессию при error 3/4
           network_retries=2)     # повторять при обрывах сети

# Вход логином (один раз; дальше сессия берётся из JSON-файла):
vk.login("user@example.com", "password")

# или готовой сессией:
# vk = OldVK.from_session(uid=123, sid="...", secret="...")

print(vk.messages.dialogs())          # диалоги через execute-шаблон
print(vk.wall.posts(owner_id=123))    # посты стены
vk.activity.online()                  # heartbeat онлайна

# Вместо vk.close() можно использовать контекстный менеджер:
# with OldVK(session_file=...) as vk: ...

Логирование: logging.basicConfig(level=logging.DEBUG) — логгер oldvkapi печатает каждый запрос, вход и автоматические повторы. После login() сессия несёт session.my_name (имя и фамилию владельца).

Разделы

Доступ — свойствами клиента, методы повторяют имена API из APK:

Свойство Методы (примеры)
users get_profiles(uids, fields, name_case)
friends get, get_by_phones, add, delete, mutual, get_requests
groups get_by_id
status get, set
activity online
messages send, get_history, get_by_id, delete, mark_as_read, dialogs, search, slow_poll*
wall post, delete, add_comment, delete_comment, get_comments, add_like, delete_like, posts*
likes add, delete
polls add_vote, get_by_id
photos get_albums, get, get_user_photos, get_by_id, get_comments, get_tags, create_comment, create_album, edit_album, delete_album, delete, edit, comments_full, info
video get, save, get_comments
audio get, get_albums, search, add, delete, direct_url*
docs get_upload_server, save
notes get_by_id, get_comments
places search, get_checkins, checkin, add, get_by_id, get_city_by_id, get_country_by_id
newsfeed get, get_comments

* — через execute (готовые шаблоны в oldvkapi/execute.py).

Прямой вызов любого метода: vk.call("wall.post", owner_id=1, message="hi").

Ошибки и капча

from oldvkapi import CaptchaNeeded, ReauthNeeded, ApiError

try:
    vk.wall.post(owner_id=1, message="hi")
except CaptchaNeeded as cap:
    print(cap.captcha_img)          # показать картинку пользователю
    key = input("Капча: ")
    vk.call(cap.method, captcha_sid=cap.captcha_sid,
            captcha_key=key, **cap.params)
except ReauthNeeded:
    vk.reauth()                     # нужен login() с паролем в памяти
except ApiError as err:
    print(err.code, err.message)

Автоматический режим — без try/except (повтор делает сам клиент):

vk = OldVK(session_file="session.json",
           captcha_handler=lambda img, sid, method, params: input(f"{img}: "))
vk.wall.post(owner_id=1, message="hi")   # re-auth и капча — автоматически

error_code 7 возвращается как None (как в самом приложении).

LongPoll

for update in vk.longpoll.updates():   # бесконечный генератор
    print(update)

refresh() — новый server/key/ts; poll_url() — текущий a_check-URL; slow_poll(time_offset) — запасной опрос из приложения.

Загрузка файлов

vk.uploader.upload_wall_photo("pic.jpg", owner_id=vk.uid, message="Фото!")
vk.uploader.upload_album_photo(aid=123, file_path="pic.jpg")
vk.uploader.upload_audio("track.mp3")
vk.uploader.upload_doc("file.pdf")
vk.uploader.upload_video("Ролик", "vid.mp4", description="...")

Оговорка про digest

Формула digest = MD5(SECRET:nonce:login:password) восстановлена из байт-кода Auth.doAuth (порядок операндов — по append-цепочке). Если сервер её отвергнет — используйте oldvkapi.auth.auth_session_raw(nonce, login, digest) с собственной формулой.

Metadata

Release files for oldvkapi 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for oldvkapi 0.4.0
File Size Uploaded Provenance Actions
oldvkapi-0.4.0.tar.gz 30.4 kB Without provenance Details for oldvkapi-0.4.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for oldvkapi 0.4.0
File Interpreter ABI Platform Actions
oldvkapi-0.4.0-py3-none-any.whl Python 3 none any Details for oldvkapi-0.4.0-py3-none-any.whl

Total release size: 65.0 kB

Release files / oldvkapi-0.4.0.tar.gz

Download URL oldvkapi-0.4.0.tar.gz
Size 30.4 kB
Tags Source
SHA-256 checksum
How to use checksums
9c7c45d5f2e33244f94be99d96f7f19a7884396e8eafe202d5d796aaac7083b7
BLAKE2b-256 checksum
How to use checksums
14735986882c80b64ba68f7746a4d627c5fe84c95a110d5fe4c8785a90f6c211
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release files / oldvkapi-0.4.0-py3-none-any.whl

Download URL oldvkapi-0.4.0-py3-none-any.whl
Size 34.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5ee384a3f584bcd493e740d7bdadbe476232b6df76b88aa2ada05271eff63783
BLAKE2b-256 checksum
How to use checksums
7c1dde5c5004becfd417a852e16a3077780e9550f531aec6452f9bfbf75e3876
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Security for oldvkapi 0.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page