β οΈ Disclaimer: ΠΡΠΎ Π½Π΅ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ API Kwork. ΠΠ½Π° Π½Π΅ Π°ΡΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π° Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Kwork ΠΈ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΌ SDK. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π½Π° ΡΠ²ΠΎΠΉ ΡΠΈΡΠΊ.
Python Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ API Kwork (kwork.ru) Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ async ΠΈ sync ΡΠ΅ΠΆΠΈΠΌΠΎΠ².
API Documentation: https://api.kwork.ru/ (OpenAPI schema)
API Basic Auth Credentials:
- Username:
mobile_api - Password:
qFvfRl7w
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ API endpoints: docs/
# Π§Π΅ΡΠ΅Π· PyPI (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ)
pip install pykwork
# ΠΠ»ΠΈ ΡΠ΅ΡΠ΅Π· git+
pip install git+https://github.com/quonaro/pykwork.git# httpx ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅ΡΠ΅Π· uv
# ΠΠ»ΠΈ Π²ΡΡΡΠ½ΡΡ:
pip install httpx>=0.24.0import asyncio
from pykwork import KworkClient
async def main():
async with KworkClient(username="user@email.com", password="password") as client:
# ΠΠ²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ
await client.login()
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅
actor = await client.get_actor()
print(f"User: {actor['response']['username']}")
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
projects = await client.get_all_projects(max_pages=2)
print(f"Projects: {len(projects)}")
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΊΠ»ΠΈΠΊΠΎΠ²
offers = await client.get_all_offers()
print(f"Offers: {len(offers)}")
asyncio.run(main())from pykwork import KworkSyncClient
with KworkSyncClient(username="user@email.com", password="password") as client:
# ΠΠ²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ
client.login()
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅
actor = client.get_actor()
print(f"User: {actor['response']['username']}")
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
projects = client.get_all_projects(max_pages=2)
print(f"Projects: {len(projects)}")
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΊΠ»ΠΈΠΊΠΎΠ²
offers = client.get_all_offers()
print(f"Offers: {len(offers)}")ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠ»Ρ async ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ await, Π΄Π»Ρ sync - Π±Π΅Π· await.
# Async
await client.login()
# Sync
client.login()# Async
actor = await client.get_actor()
user = await client.get_user(user_id=1)
user = await client.get_user_by_username(username="username")
kworks = await client.get_user_kworks(user_id=1, page=1)
categories = await client.get_user_categories(user_id=1)
reviews = await client.get_user_reviews(user_id=1, page=1)
await client.block_dialog(block_user_id=1)
await client.unblock_dialog(block_user_id=1)
last_order = await client.get_users_last_order_info(interlocutor_id=1)
orders = await client.orders_between(user_id=1)
# Sync
actor = client.get_actor()
user = client.get_user(user_id=1)
user = client.get_user_by_username(username="username")
kworks = client.get_user_kworks(user_id=1, page=1)
categories = client.get_user_categories(user_id=1)
reviews = client.get_user_reviews(user_id=1, page=1)
client.block_dialog(block_user_id=1)
client.unblock_dialog(block_user_id=1)
last_order = client.get_users_last_order_info(interlocutor_id=1)
orders = client.orders_between(user_id=1)# Π‘ΠΊΡΡΡΡ/Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³
await client.hide_dialog(user_id=1, is_restore=0)
# ΠΡΡ
ΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ/ΡΠ°Π·Π°ΡΡ
ΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³
await client.archive_dialog(user_id=1)
await client.unarchive_dialog(user_id=1)
# Π‘ΠΏΠΈΡΠΎΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²
dialogs = await client.get_dialogs(page=1, filter_str="")
# ΠΠΎΠΈΡΠΊ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²
dialogs = await client.search_dialogs(query="test", page=1)
# ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³
dialog = await client.get_dialog(dialog_id=1, with_tracks=0)
# ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΠΈΠ°Π»ΠΎΠ³Π°
allowed = await client.is_dialog_allow(user_id=1)
# Π‘ΠΏΠΈΡΠΎΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²
blocked = await client.blocked_dialog_list()
blocked_dialogs = await client.blocked_dialogs()
# Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅/ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ inbox Π·Π°ΠΏΡΠΎΡΠ°
await client.allow_inbox_request(inbox_id=1, is_accept=1)
await client.inbox_custom_request_decline(message_id=1)
await client.inbox_payer_decline(message_id=1)
await client.inbox_worker_decline(message_id=1)
# ΠΡΠΏΡΠ°Π²ΠΊΠ° ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΠ΅ΡΠ°ΡΠΈ
await client.typing(recipient_id=1, order_id=1)
# ΠΠΎΠΏΡΠΎΡΡ Π²ΠΈΠΊΡΠΎΡΠΈΠ½Ρ
questions = await client.get_quiz_questions()
# ΠΡΠΌΠ΅ΡΠΈΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΠΉ
await client.mark_dialog_read(user_id=1)
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΠ°ΡΡΡ Π²ΠΈΠΊΡΠΎΡΠΈΠ½Ρ
await client.set_quiz_status(status=1)
# ΠΡΠΌΠ΅ΡΠΈΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΊΠ°ΠΊ ΠΈΠ·Π±ΡΠ°Π½Π½ΡΠΉ
await client.set_dialog_starred(user_id=1, is_starred=1)
# ΠΡΠΌΠ΅ΡΠΈΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΠΉ
await client.mark_dialog_unread(user_id=1)# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² (Ρ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ)
projects = await client.get_all_projects(max_pages=5)
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠ΅ΠΉ ΠΏΠΎ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ
it_projects = await client.get_all_projects(categories="11")
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠ΅ΠΉ ΠΏΠΎ ΡΠ΅Π½Π΅
cheap_projects = await client.get_all_projects(price_to=1000)
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ
projects = await client.get_projects(page=1)
# ΠΠΎΠΈ ΠΏΡΠΎΠ΅ΠΊΡΡ (wants)
wants = await client.get_my_wants(page=1, want_status_id=0)
# Π£Π΄Π°Π»ΠΈΡΡ ΠΎΡΠΊΠ»ΠΈΠΊ
await client.delete_offer(offer_id=1)
# Π£Π΄Π°Π»ΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ
await client.delete_want(want_id=1)
# ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π±ΠΈΡΠΆΠ΅
info = await client.get_exchange_info()
# ΠΠΎΠ½Π½Π΅ΠΊΡΡ (ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΡΠ°Π»ΠΎΡΡ/Π²ΡΠ΅Π³ΠΎ)
connects = await client.get_connects()
print(f"ΠΠΎΠ½Π½Π΅ΠΊΡΡ: {connects['active_connects']} ΠΈΠ· {connects['all_connects']}")
# {'active_connects': 24, 'all_connects': 30, 'update_time': 1234567890}
# ΠΠ·Π±ΡΠ°Π½Π½ΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ
fav_cats = await client.get_favorite_categories()
# ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΎΡΠΊΠ»ΠΈΠΊ
offer = await client.get_offer(offer_id=1)
# ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
count = await client.get_wants_count(categories="11", price_to=1000)
# ΠΡΠΎΠ΅ΠΊΡΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ
worker_projects = await client.get_worker_projects(categories="11", page=1)
# ΠΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ
await client.restart_want(want_id=1)
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΠ·Π±ΡΠ°Π½Π½ΠΎΠ΅
await client.set_favorite(categories="11", attributes="")
# ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ
await client.stop_want(want_id=1)
# Π‘ΡΠ°ΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
statuses = await client.get_wants_status_list()# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ
categories = await client.get_categories()
# Π€ΠΈΠ»ΡΡΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°
filters = await client.get_catalog_filters(category_id=1, query="test")
# ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ (v1)
main_data = await client.get_main_data()
# ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ (v2)
main_data_v2 = await client.get_main_data_v2()
# ΠΠ°ΡΠ°Π»ΠΎΠ³ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
catalog_main = await client.catalog_main()
catalog_main_v2 = await client.catalog_main_v2()
# Π ΡΠ±ΡΠΈΠΊΠΈ
rubrics = await client.get_rubrics()
catalog_rubrics = await client.catalog_rubrics()
# ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΡΡΠ±ΡΠΈΠΊΠΈ
catalog_categories = await client.catalog_categories(rubric_id=1)
# Π―Π·ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°
languages = await client.translation_languages()
# ΠΡΡΠΈΠ±ΡΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ
attributes = await client.category_attributes(category_id=1)
# ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΎΡΠ·ΡΠ²ΠΎΠ²
count = await client.positive_reviews_count(category_id=1)
# ΠΠΎΡΠΎΠ΄Π° ΠΈ ΡΡΡΠ°Π½Ρ
cities = await client.cities()
countries = await client.countries()
# URL ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
url = await client.payer_company_modal_url()
# ΠΠ·Π±ΡΠ°Π½Π½ΡΠ΅ ΠΊΠ²ΠΎΡΠΊΠΈ
fav_kworks = await client.get_favorite_kworks()
# Π‘ΠΊΡΡΡΡΠ΅ ΠΊΠ²ΠΎΡΠΊΠΈ
hidden_kworks = await client.get_hidden_kworks()
# ΠΠ±ΡΠΈΠ΅ ΠΊΠ²ΠΎΡΠΊΠΈ
general_kworks = await client.get_general_kworks()
# ΠΡΠΎΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ ΠΊΠ²ΠΎΡΠΊΠΈ
viewed_kworks = await client.get_viewed_kworks()
# ΠΠΎΠΈΡΠΊ ΠΊΠ²ΠΎΡΠΊΠΎΠ²
kworks = await client.search_kworks(query="python")
# ΠΠΎΠΈΡΠΊ ΠΊΠ²ΠΎΡΠΊΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
kworks = await client.search_kworks_for_user(query="python")# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΠΎΡΠΊΠ»ΠΈΠΊΠΎΠ² (Ρ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ)
offers = await client.get_all_offers()
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ
offers = await client.get_offers(page=1)# Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΆΠ°Π»ΠΎΠ±Ρ Π½Π° ΠΊΠ²ΠΎΡΠΊ
await client.create_kwork_complain(kwork_id=1, category_id=1, text="text")
# ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΆΠ°Π»ΠΎΠ±
categories = await client.get_complain_categories()
# FAQ ΠΊΠ²ΠΎΡΠΊΠ°
answers = await client.get_kwork_answers(kwork_id=1)
# ΠΠ΅ΡΠ°Π»ΠΈ ΠΊΠ²ΠΎΡΠΊΠ°
details = await client.get_kwork_details(kwork_id=1)
# ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ ΠΊΠ²ΠΎΡΠΊΠ°
details_extra = await client.get_kwork_details_extra(kwork_id=1)
# Π’Π°Π±Π»ΠΈΡΠ° ΡΡΡΠ»ΠΎΠΊ ΠΊΠ²ΠΎΡΠΊΠ°
links = await client.get_kwork_links_table(kwork_id=1)
# ΠΠΎΡΡΡΠΎΠ»ΠΈΠΎ ΠΊΠ²ΠΎΡΠΊΠ°
portfolios = await client.get_kwork_portfolios(kwork_id=1)
# ΠΡΠ·ΡΠ²Ρ ΠΊΠ²ΠΎΡΠΊΠ°
reviews = await client.get_kwork_reviews(kwork_id=1)
# ΠΠ°ΠΊΠ°Π·Π°ΡΡ ΠΊΠ²ΠΎΡΠΊ
await client.order_kwork(kwork_id=1, kworks_count=1, volume=10.0)
# ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΡ Π±Π°Π»Π°Π½Ρ
await client.recharge_balance(order_id=1, payment_id=1, amount=1000, payment_type="card", country_group_code="RU")# Π£Π΄Π°Π»ΠΈΡΡ ΠΊΠ²ΠΎΡΠΊ
await client.delete_kwork(kwork_id=1)
# Π‘ΡΠ°ΡΡΡΡ ΠΊΠ²ΠΎΡΠΊΠΎΠ²
statuses = await client.get_kworks_status_list()
# ΠΡΠΌΠ΅ΡΠΈΡΡ ΠΊΠ²ΠΎΡΠΊ ΠΊΠ°ΠΊ ΠΈΠ·Π±ΡΠ°Π½Π½ΡΠΉ
await client.mark_kwork_as_favorite(kwork_id=1, is_favorite=True)
# ΠΡΠΌΠ΅ΡΠΈΡΡ ΠΊΠ²ΠΎΡΠΊ ΠΊΠ°ΠΊ ΡΠΊΡΡΡΡΠΉ
await client.mark_kwork_as_hidden(kwork_id=1, is_hidden=True)
# ΠΡΠΌΠ΅ΡΠΈΡΡ ΠΊΠ²ΠΎΡΠΊ Π΄Π»Ρ Black Friday
await client.mark_kworks_black_friday(kwork_id=1)
# ΠΠ°ΡΠ·Π° ΠΊΠ²ΠΎΡΠΊΠ°
await client.pause_kwork(kwork_id=1)
# ΠΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ Π² Π²ΡΡ
ΠΎΠ΄Π½ΡΠ΅
await client.set_available_at_weekends(is_available=True)
# ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΊΠ²ΠΎΡΠΊ
await client.start_kwork(kwork_id=1)# ΠΠΎΠ»ΡΡΠΈΡΡ inbox ΡΡΠ΅ΠΊΠΈ
tracks = await client.get_inbox_tracks(username="test", page=1)
# ΠΠΎΠ»ΡΡΠΈΡΡ inbox ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
inboxes = await client.inboxes(username="test", page="1")
# ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° ΠΏΠΎ conversation ID
track = await client.inbox_track_message(conversation_id=1)
# ΠΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
await client.inbox_complain_message(message_id=1, complain_category_id=1, comment="text")
# Π£Π΄Π°Π»ΠΈΡΡ inbox
await client.inbox_delete(id=1, with_tracks=0)
# Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ inbox
await client.inbox_edit(id=1, text="text", uploaded_files={}, reply_message_id=1)
# ΠΠ΅ΡΠ΅ΡΠ»Π°ΡΡ inbox
await client.inbox_forward(user_id=1, message_ids=[1, 2])
# Π‘ΠΎΠ·Π΄Π°ΡΡ inbox ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
await client.inbox_create(user_id=1, text="text", uuid="uuid", order_id=1, uploaded_files=[1, 2])
# ΠΠΎΠ»ΡΡΠΈΡΡ inbox ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ID
message = await client.inbox_message(message_id=1)
# ΠΡΠΌΠ΅ΡΠΈΡΡ inbox ΡΡΠ΅ΠΊΠΈ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΠ΅
await client.mark_inbox_tracks_as_read(user_id=1, conversation_ids=[1, 2, 3])
# ΠΠΎΠΈΡΠΊ inbox
inboxes = await client.search_inboxes(query="test", user_id=1, page=1)
# ΠΠΎΠΈΡΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
messages = await client.search_messages(text="text", user_id=1, page=1)
# ΠΡΠΌΠ΅ΡΠΈΡΡ inbox ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΠΉ
await client.inbox_read(user_id=1, messages=[1, 2])
# ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠ°ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
await client.send_user_status(user_id=1, status="online", order_id=1)
# ΠΡΠΌΠ΅ΡΠΈΡΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠ»ΡΡΠ°Π½Π½ΠΎΠ΅
await client.mark_voice_message_heard(conversation_id=1)
# ΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΡΠ½ΠΎΠ²ΠΈΠΊ ΡΠ°ΡΠ°
await client.update_chat_draft_message(user_id=1, message="text", files=[1, 2])# ΠΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ΅ΠΊΠΈ
tracks = await client.get_tracks(order_id=1, track_id=1, limit=10)
# Π’ΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
transcription = await client.get_voice_message_transcription(conversation_id=1)
# ΠΠΎΠΈΡΠΊ ΡΡΠ΅ΠΊΠΎΠ² Π·Π°ΠΊΠ°Π·Π°
tracks = await client.search_order_tracks(text="query", order_id=1, page=1)
# Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΡΠ΅ΠΊ
await client.create_track(
user_id=1,
message_key="key",
text="text",
order_id=1,
uploaded_files=[],
reply_message_id=1,
with_tracks=0
)
# Π£Π΄Π°Π»ΠΈΡΡ ΡΡΠ΅ΠΊ
await client.delete_track(track_id=1)
# Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ΅ΠΊ
await client.edit_track(track_id=1, text="text", quote_id=1, uploaded_files=[])# ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ
notifications = await client.get_notifications()
# ΠΡΠΌΠ΅ΡΠΈΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅
await client.notifications_received(ids=[1, 2, 3])
# ΠΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΠ΅ push ΡΠΎΠ±ΡΡΠΈΡ
events = await client.notifications_fetch(page=1, uad="test")
# ΠΠ°Π»ΠΈΠ΄ΠΈΡΠΎΠ²Π°ΡΡ push ΡΠΎΠ±ΡΡΠΈΠ΅
await client.validate_event(id=1)
# ΠΠΎΠ»ΡΡΠΈΡΡ in-app ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅
notification = await client.get_in_app_notification(uad="test", os_type="ios", os_version="15.0", app_version="2.0")
# ΠΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ in-app ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅
await client.push_in_app_notification_log(notification_id=1, action=1)# ΠΠ°Π³ΡΡΠ·ΠΈΡΡ ΡΠ°ΠΉΠ»
await client.file_upload(file_data)
# ΠΠ°Π³ΡΡΠ·ΠΈΡΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΉ ΡΠ°ΠΉΠ»
await client.voice_upload(file_data)
# Π£Π΄Π°Π»ΠΈΡΡ ΡΠ°ΠΉΠ»
await client.file_delete(file_id=1)
# ΠΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅
file = await client.uploaded_file(path="/path/to/file")
# ΠΠΎΠ»ΡΡΠΈΡΡ ΠΌΠΈΠ½ΠΈΠ°ΡΡΡΡ ΡΠ°ΠΉΠ»Π°
miniature = await client.miniature(path="/path/to/file")# ΠΠΎΠ»ΡΡΠΈΡΡ Π·Π°ΠΊΠ°Π·
order = await client.get_order(order_id=1)
# ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠ°ΠΉΠ»Ρ Π·Π°ΠΊΠ°Π·Π°
files = await client.get_order_files(order_id=1)
# ΠΠΎΠ»ΡΡΠΈΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π·Π°ΠΊΠ°Π·Π°
header = await client.get_order_header(order_id=1)
# ΠΠΎΠ»ΡΡΠΈΡΡ Π΄Π΅ΡΠ°Π»ΠΈ Π·Π°ΠΊΠ°Π·Π°
details = await client.get_order_details(order_id=1)
# ΠΡΠΏΡΠ°Π²ΠΈΡΡ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΡ
await client.send_order_for_approval(order_id=1)
# ΠΡΠΈΠ½ΡΡΡ Π·Π°ΠΊΠ°Π·
await client.approve_order(order_id=1, portfolio=1)
# ΠΡΠΈΠ½ΡΡΡ ΡΡΠ°ΠΏ
await client.approve_order_stage(order_id=1)
# ΠΡΠΏΡΠ°Π²ΠΈΡΡ Π½Π° Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΡ
await client.send_order_for_revision(order_id=1, revision="text")
# ΠΡΠΏΡΠ°Π²ΠΈΡΡ Π±ΠΎΠ½ΡΡ
await client.send_bonus(order_id=1, bonus=100, comment="good work")
# ΠΡΠΏΡΠ°Π²ΠΈΡΡ Π½Π° Π°ΡΠ±ΠΈΡΡΠ°ΠΆ
await client.send_order_for_arbitration(order_id=1, reason_id=1, comments="text")
# ΠΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ Π°ΡΠ±ΠΈΡΡΠ°ΠΆΠ°
reasons = await client.get_arbitration_reasons(order_id=1)
# ΠΡΠ΅Π½ΠΈΡΡ Π°ΡΠ±ΠΈΡΡΠ°ΠΆ
await client.rate_arbitration(id=1, rating=5)
# ΠΡΠΌΠ΅Π½ΠΈΡΡ Π½Π΅ΠΎΠΏΠ»Π°ΡΠ΅Π½Π½ΡΠΉ Π·Π°ΠΊΠ°Π·
await client.cancel_order_awaiting_payment(order_id=1)
# ΠΠΏΠ»Π°ΡΠΈΡΡ Π½Π΅ΠΎΠΏΠ»Π°ΡΠ΅Π½Π½ΡΠΉ Π·Π°ΠΊΠ°Π·
await client.pay_order_awaiting_payment(order_id=1)
# Π Π°Π·ΡΠ΅ΡΠΈΡΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π² ΠΏΠΎΡΡΡΠΎΠ»ΠΈΠΎ
await client.allow_order_portfolio_upload(order_id=1)
# ΠΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
data = await client.get_order_provided_data(order_id=1)
# ΠΡΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΠ΄Π°Π²ΡΠ°
await client.set_order_rating(order_id=1, speed=5, quality=5, communication=5)
# ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ΅ΠΊ
await client.send_order_receipt_link_for_verification(receipt_id=1, receipt_link="https://...")
# Π‘ΠΎΡ
ΡΠ°Π½ΠΈΡΡ Π·Π°ΠΌΠ΅ΡΠΊΡ
await client.save_order_note(order_id=1, note="note text")
# Π£Π΄Π°Π»ΠΈΡΡ Π·Π°ΠΌΠ΅ΡΠΊΡ
await client.delete_order_note(order_id=1)
# ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
await client.send_order_requirements(order_id=1, requirements="text")
# ΠΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΠΎΠΏΡΠΈΠΈ
await client.offer_order_options(order_id=1)
# ΠΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ
extras = await client.get_extras_available_for_order(order_id=1)
# ΠΠΎΠ»ΡΡΠΈΡΡ Π·Π°ΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ
ordered = await client.get_ordered_extras(order_id=1)
# ΠΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅ΡΠ΅ΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ
ΠΎΠΏΡΠΈΠΉ
presets = await client.get_custom_options_presets(order_id=1)
# ΠΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΎΡΠΌΠ΅Π½Ρ
reasons = await client.get_order_cancellation_reasons(order_id=1)
# ΠΠΎΠ²ΡΠΎΡΠΈΡΡ Π·Π°ΠΊΠ°Π·
await client.repeat_order(order_id=1)# ΠΠΎΠ»ΡΡΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠΏΠ»Π°ΡΡ
methods = await client.get_payment_methods()
# ΠΠΎΠ»ΡΡΠΈΡΡ URL Π΄Π»Ρ ΠΏΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
url = await client.get_bill_refill_url(amount=1000, payment_type="card")# Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠ²Π΅Ρ Π½Π° ΠΎΡΠ·ΡΠ²
await client.create_answer(review_id=1, text="response text")
# Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ²Π΅Ρ
await client.edit_answer(answer_id=1, text="updated text")# ΠΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡ
transcription = await client.get_voice_message_transcription(conversation_id=1)
# ΠΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ°ΡΡΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΠΈ
status = await client.get_voice_message_convert_status(file_id=1)
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ
await client.set_voice_message_speed(conversation_id=1, speed=1.5)
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΠ°ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ
await client.set_voice_message_receiving(conversation_id=1, is_receiving=1)# Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΡΠ°ΠΏ
await client.create_stage(order_id=1, extend_time=1, stages={})
# ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠ°ΠΏ
await client.add_stage(order_id=1, extend_time=1, stages={})
# Π Π΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΠΏ
await client.order_stage(order_id=1, stage_id=1)
# Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΠΏ
await client.edit_stage(order_id=1, extend_time=1, stages={})
# ΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ΅ΡΡ ΡΡΠ°ΠΏΠ°
await client.update_stage_progress(order_id=1, stages={}, comment="text")# ΠΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠΊΠ»ΠΈΠΊ
offer = await client.get_offer(id=1)
# ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΎΡΠΊΠ»ΠΈΠΊΠΎΠ²
offers = await client.get_offers(page=1)
# Π£Π΄Π°Π»ΠΈΡΡ ΠΎΡΠΊΠ»ΠΈΠΊ
await client.delete_offer(id=1)pykwork/
βββ pyproject.toml # ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ°
βββ LICENSE # ΠΠΈΡΠ΅Π½Π·ΠΈΡ (MIT)
βββ README.md # ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
βββ example_async.py # ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
βββ example_sync.py # ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ (sync)
βββ pykwork/
βββ __init__.py # ΠΠΊΡΠΏΠΎΡΡ ΠΊΠ»Π°ΡΡΠΎΠ²
βββ client.py # ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ async ΠΊΠ»ΠΈΠ΅Π½Ρ
βββ sync_client.py # ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ sync ΠΊΠ»ΠΈΠ΅Π½Ρ
βββ exceptions.py # ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
βββ logger.py # ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
βββ services/ # Π‘Π΅ΡΠ²ΠΈΡΡ ΠΏΠΎ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠΌ
βββ __init__.py
βββ user.py # UserService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ dialog.py # DialogService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ exchange.py # ExchangeService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ catalog.py # CatalogService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ kwork.py # KworkDetailsService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ kworks.py # KworksService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ inbox.py # InboxService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ track.py # TrackService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ notification.py # NotificationService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ file.py # FileService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ order.py # OrderService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ payment.py # PaymentService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ review.py # ReviewService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ voice.py # VoiceService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ stage.py # StageService ΠΌΠ΅ΡΠΎΠ΄Ρ
βββ offer.py # OfferService ΠΌΠ΅ΡΠΎΠ΄Ρ
KworkAuthError- ΠΡΠΈΠ±ΠΊΠ° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈKworkRequestError- ΠΡΠΈΠ±ΠΊΠ° Π·Π°ΠΏΡΠΎΡΠ° API
import asyncio
from pykwork import KworkClient, KworkAuthError, KworkRequestError
async def main():
async with KworkClient(username="user@email.com", password="password") as client:
try:
await client.login()
projects = await client.get_all_projects()
except KworkAuthError as e:
print(f"Auth failed: {e}")
except KworkRequestError as e:
print(f"Request failed: {e}")
print(f"Status code: {e.status_code}")
asyncio.run(main())client = KworkClient(
username="user@email.com",
password="password",
uad="unique_device_id", # Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ID ΡΡΡΡΠΎΠΉΡΡΠ²Π°
device="device_model", # ΠΠΎΠ΄Π΅Π»Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π°
timeout=10, # Π’Π°ΠΉΠΌΠ°ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² (ΡΠ΅ΠΊΡΠ½Π΄Ρ)
log_level=30 # Π£ΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (WARNING ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ)
)| ID | ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ |
|---|---|
| 15 | ΠΠΈΠ·Π°ΠΉΠ½ |
| 11 | Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ IT |
| 5 | Π’Π΅ΠΊΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ |
| 17 | SEO ΠΈ ΡΡΠ°ΡΠΈΠΊ |
| 45 | Π‘ΠΎΡΡΠ΅ΡΠΈ ΠΈ ΠΌΠ°ΡΠΊΠ΅ΡΠΈΠ½Π³ |
| 7 | ΠΡΠ΄ΠΈΠΎ, Π²ΠΈΠ΄Π΅ΠΎ, ΡΡΠ΅ΠΌΠΊΠ° |
| 83 | ΠΠΈΠ·Π½Π΅Ρ ΠΈ ΠΆΠΈΠ·Π½Ρ |
cd /srv/projects/my/pykwork
# Async ΠΏΡΠΈΠΌΠ΅Ρ
uv run python example_async.py
# Sync ΠΏΡΠΈΠΌΠ΅Ρ
uv run python example_sync.pyΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ logging Ρ ΡΡΠΎΠ²Π½Π΅ΠΌ WARNING ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ²Π½Ρ:
import logging
from pykwork import KworkClient
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΠΎΠ²Π΅Π½Ρ DEBUG
client = KworkClient(
username="user@email.com",
password="password",
log_level=logging.DEBUG
)MIT License