FixPrice (Фикс Прайс) - https://fix-price.com/
Библиотека полностью повторяет сетевую работу обычного пользователя на сайте.
pip install fixprice_api
python -m camoufox fetchimport 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)Для более подробной информации смотрите референсы документации.
В проекте используется автотест-фреймворк из 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).
If you have any problems using it / suggestions, do not hesitate to write to the project's GitHub!