Skip to content

marketplace_apis

Простой способ общаться с российскими маркетплейсами!

  • Полностью асинхронная библиотека
  • Простая и понятная в использовании
  • Поддерживает Ozon SellerAPI и Yandex MarketAPI - поддержка Wildberries API soon™
  • Использует httpx и mashumaro под капотом

Установка

Bash
1
pip install "marketplace_apis @ git+https://github.com/packify-org/marketplace_apis.git"
Bash
1
pip install "marketplace_apis[orjson] @ git+https://github.com/packify-org/marketplace_apis.git"

Использование

Внимание!

Не используйте один и тот же SellerApi() или MarketApi() объект в нескольких with! См. Фабрики

Ozon SellerAPI

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import asyncio
from datetime import datetime, timedelta
from marketplace_apis.ozon.seller_api import SellerApi
import os


async def main():
    async with SellerApi(os.getenv("API_KEY"), os.getenv("CLIENT_ID")) as client:
        # получить все отправления за прошедшие 14 дней
        now = datetime.now()
        postings = await client.posting.list_postings(
            filter_since=now - timedelta(14),
            filter_to=now)
        print(postings)
        # получить информацию и товарах в первом отправлении
        async with asyncio.TaskGroup() as tg:
            posting = postings[0]
            offer_ids = [product.offer_id for product in posting.products]
            info = tg.create_task(client.product.list_info(offer_ids))
            attributes = tg.create_task(
                client.product.list_attributes(offer_id=offer_ids))
        print(info.result(), attributes.result())


asyncio.run(main())

Yandex MarketAPI

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import asyncio
from datetime import datetime, timedelta
from marketplace_apis.yandex.market_api import MarketApi
import os


async def main():
    # не нужно передавать CAMPAIGN_ID или BUSINESS_ID,
    # если вы не будете использовать методы, которым они нужны
    async with MarketApi(os.getenv("TOKEN"), os.getenv("CAMPAIGN_ID"),
                         os.getenv("BUSINESS_ID")) as client:
        # получить все отправления за прошедшие 14 дней
        now = datetime.now()
        orders = await client.order.list_orders(
            fromDate=(now - timedelta(14)).date(),
            toDate=now.date())
        print(orders)
        # получить offer_mappings из первого отправления
        order = orders[0]
        offer_ids = [item.offerId for item in order.items]
        offer_mappings = await client.offer_mapping.list_offer_mappings(
            offerIds=offer_ids)
        print(offer_mappings)


asyncio.run(main())

Фабрики

Для того чтобы передавать в одни и те же аутентификационные данные в разные контекстные менеджеры, существуют фабрики:

Python
1
2
3
4
5
6
7
import os
from marketplace_apis.ozon.seller_api import SellerApiFactory

seller_api = SellerApiFactory(os.getenv("API_KEY"), os.getenv("CLIENT_ID"))
async with seller_api() as client:
    # do something...
    pass
То же самое актуально и для MarketApi. (Используйте MarketApiFactory для этого)

Поддерживаемые API Endpoints:

Если вы не нашли необходимый вам API Endpoint - создайте issue.

Мы постараемся добавить его как можно скорее.