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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.