Skip to content

Open-Inflation/fixprice_api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FixPrice API (not official)

Tests last run (ISO) Tests PyPI - Python Version PyPI - Package Version PyPI - Downloads License Discord Telegram

FixPrice (Фикс Прайс) - https://fix-price.com/

⭐ Star us on GitHub | 📚 Read the Docs | 🐛 Report Bug

Принцип работы

Библиотека полностью повторяет сетевую работу обычного пользователя на сайте.

Usage

pip install fixprice_api
python -m camoufox fetch
import asyncio
from fixprice_api import FixPriceAPI, CatalogSort
from PIL import Image


async def main():
    async with FixPriceAPI() as api:
        # 1. Получаем дерево категорий
        tree_data = (await api.Catalog.tree()).json()
        first_alias = tree_data[next(iter(tree_data))]["alias"]
        print(f"Первая категория: {first_alias}")

        # 2. Список товаров в категории
        products = (
            await api.Catalog.products_list(
                category_alias=first_alias,
                page=1,
                limit=24,
                sort=CatalogSort.POPULARITY,
            )
        ).json()
        first_product_id = products[0]["id"]
        print(f"Первый товар: {products[0]['title']!s:.60s} ({first_product_id})")

        # 3. Геолокация (влияет на каталог и баланс)
        cities = (await api.Geolocation.cities_list(country_id=2)).json()  # Россия
        api.city_id = cities[0]["id"]
        print(f"Текущий city_id: {api.city_id}")

        # 4. Проверка наличия товара по магазинам
        balance = (await api.Catalog.Product.balance(product_id=first_product_id)).json()
        print(f"Проверено магазинов: {len(balance)}")

        # 5. Загрузка изображения
        image_url = products[0]["images"][0]["src"]
        image_stream = await api.General.download_image(image_url)
        with Image.open(image_stream) as img:
            print(f"Image format: {img.format}, size: {img.size}")


if __name__ == "__main__":
    asyncio.run(main())
> Первая категория: kosmetika-i-gigiena
> Первый товар: Крем для рук и тела, 150 мл (2345678)
> Текущий city_id: 3
> Проверено магазинов: 339
> Image format: WEBP, size: (190, 190)

Для более подробной информации смотрите референсы документации.


Автотесты API (pytest + snapshots)

В проекте используется автотест-фреймворк из human_requests:

  • endpoint-методы в бизнес-коде помечаются @autotest;
  • pytest-плагин сам находит эти методы и запускает их;
  • JSON-ответы проверяются через pytest-jsonschema-snapshot (schemashot);
  • параметры вызова и пост-обработка результата регистрируются в tests/api_test.py через:
    • @autotest_params
    • @autotest_hook
    • @autotest_depends_on

Минимальная конфигурация уже включена в pyproject.toml:

[tool.pytest.ini_options]
anyio_mode = "auto"
autotest_start_class = "fixprice_api.FixPriceAPI"

Запуск тестов:

pytest

Важно:

  • используется pytest-anyio (не pytest-asyncio);
  • ручные тесты остаются только для кейсов, которые не относятся к JSON-схемам endpoint-методов (например, download_image).

Report

If you have any problems using it / suggestions, do not hesitate to write to the project's GitHub!