fixprice-api


Namefixprice-api JSON
Version 0.1.1 PyPI version JSON
download
home_pagehttps://github.com/Open-Inflation/fixprice_api
SummaryA Python API client for FixPrice catalog
upload_time2025-02-07 18:37:43
maintainerNone
docs_urlNone
authorMiskler
requires_python>=3.10
licenseNone
keywords
VCS
bugtrack_url
requirements aiohttp
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # FixPrice API (not official / не официальный)

FixPrice - https://fix-price.com/

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

> `product_info` не реализован т.к. информация вшита в страницу.


### Базовая структура
```py
import asyncio
from fixprice_api import FixPrice, CatalogSort

async def main():
    ...

if __name__ == "__main__":
    asyncio.run(main())
```

### Взаимодействие с каталогом

```py
async with FixPrice() as Api:
    # Получение списка категорий
    categories = await Api.Catalog.categories_list()
    products = []
    tq = tqdm(categories, desc='Обработано категорий')

    async def process_sub(category_alias, subcategory_alias=None, depth=0):
        page = 1 # Счет от единицы, а не нуля!
        limit = 27 # Максимальное значение

        while page > 0:
            # count - общее количество айтемов на всех страницах (в данном случае не используем)
            count, catalog = await Api.Catalog.products_list(
                category_alias=category_alias,
                subcategory_alias=subcategory_alias,
                page=page,
                limit=limit,
                sort=CatalogSort.POPULARITY
            )
            if not catalog:
                break
            
            for product in catalog:
                products.append(f'{product["title"]} ({product["id"]})')
                tq.set_description(f'Обработано карточек: {len(products)}')
            
            if len(catalog) <= 0:
                break
            
            time.sleep(0.4) # Специально замедляем обработку, чтобы не получить код 429, советую эксперементировать
            page += 1
        
    # Обход всех категорий и подкатегорий
    for category in tq:
        subcategories = category.get("items", [])
        # Можно и не обрабатывать подкатегории отдельно, зависит от желания и ТЗ
        if subcategories:
            for subcategory in subcategories:
                await process_sub(category["alias"], subcategory["alias"])
        else:
            await process_sub(category["alias"])

    tq.close()

    # Вывод статистики
    print(f'Общее количество встреченных карточек: {len(products)}')
    print(f'Уникальных товаров: {len(set(products))}')
    print(f'Среднее количество повторений карточки: {round(len(products) / len(set(products)), 2)}')
```
```bash
> Обработано карточек: 6019: 100%|███████████████| 29/29 [04:29<00:00,  9.29s/it]
> Общее количество встреченных карточек: 6019
> Уникальных товаров: 4900
> Среднее количество повторений карточки: 1.23
```

### Работа с геолокацией в сессии:
*От геолокации зависит выдача каталога!*
```py
async with FixPrice() as Api:
    print(f"ID города перед первым запросом: {Api.city_id}, язык: {Api.language}") # По умолчанию не назначено
    await Api.Catalog.home_brands_list() # Можем обработать любую функцию
    print(f"ID города после первого запроса: {Api.city_id}, язык: {Api.language}") # Сервер прислал стандартные значения

    country = await Api.Geolocation.country_list(alias="RU") # alias работает сортировкой

    # получаем объект "Объединенные Арабские Эмираты"
    print(f"Найдена страна {country[0]['title']} ({country[0]['id']}), валюта: {country[0]['currency']['title']} / {country[0]['currency']['symbol']}")

    citys = await Api.Geolocation.city_list(country_id=country[0]["id"]) # получаем список городов

    Api.city_id = citys[0]["id"] # меняем ID города
    print(f"Город изменен на {citys[0]['name']} ({citys[0]['id']})")

    # Вне РФ каталог не работает
    print(f"Категории: {len(await Api.Catalog.categories_list())} штук")
```
```bash
> ID города перед первым запросом: None, язык: None
> ID города после первого запроса: 3, язык: ru
> Найдена страна Россия (2), валюта: Рубль / ₽
> Город изменен на Щербинка (229)
> Категории: 29 штук
```

### Проверка наличия товара
```py
async with FixPrice() as Api:
    Api.city_id = 3 # Обязательно указываем перед запросом город, иначе ошибка
    check = await Api.Store.product_balance(1851089) # Круассан, 7DAYS, 110 г, с двойным кремом

    stoks = []
    for i in check:
        stoks.append(i.get("count", 0))

    print(f"Самое большое количество: {max(stoks)}")
    print(f"Самое малое количество: {min(stoks)}")
    print(f"Среднее количество: {round(sum(stoks) / len(stoks), 2)}")
    print(f"Обработано {len(stoks)} магазинов")
```
```bash
> Самое большое количество: 67
> Самое малое количество: 10
> Среднее количество: 28.5
> Обработано 339 магазинов
```

### Загрузка изображений
```py
async with FixPrice() as Api:
    img = await Api.General.download_image("https://img.fix-price.com/190x190/_marketplace/images/origin/90/903ce795a221a6978444a86391816f93.jpg")

    with open(img.name, "wb") as f:
        f.write(img.read())
```

### Или параллельная загрузка
```py
async with FixPrice() as Api:
    tasks = [
        Api.General.download_image("https://img.fix-price.com/190x190/_marketplace/images/origin/90/903ce795a221a6978444a86391816f93.jpg"),
        Api.General.download_image("https://img.fix-price.com/190x190/_marketplace/images/origin/51/519a1d3c838e3e7e30493fb9b1f69a05.jpg")
    ]

    results = await asyncio.gather(*tasks)
    for result in results:
        with open(result.name, "wb") as f:
            f.write(result.read())
```

---

### Report / Обратная связь

If you have any problems using it / suggestions, do not hesitate to write to the [project's GitHub](https://github.com/Open-Inflation/fixprice_api/issues)!

Если у вас возникнут проблемы в использовании / пожелания, не стесняйтесь писать на [GitHub проекта](https://github.com/Open-Inflation/fixprice_api/issues)!



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Open-Inflation/fixprice_api",
    "name": "fixprice-api",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": null,
    "author": "Miskler",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/83/b5/5992e243f67f1d785a349dcdf28dbdcc892793ee542574a317d148b8f8cf/fixprice_api-0.1.1.tar.gz",
    "platform": null,
    "description": "# FixPrice API (not official / \u043d\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439)\n\nFixPrice - https://fix-price.com/\n\n# Usage / \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\n\n> `product_info` \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0442.\u043a. \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0432\u0448\u0438\u0442\u0430 \u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.\n\n\n### \u0411\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\n```py\nimport asyncio\nfrom fixprice_api import FixPrice, CatalogSort\n\nasync def main():\n    ...\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\n### \u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u043c\n\n```py\nasync with FixPrice() as Api:\n    # \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439\n    categories = await Api.Catalog.categories_list()\n    products = []\n    tq = tqdm(categories, desc='\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439')\n\n    async def process_sub(category_alias, subcategory_alias=None, depth=0):\n        page = 1 # \u0421\u0447\u0435\u0442 \u043e\u0442 \u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u0430 \u043d\u0435 \u043d\u0443\u043b\u044f!\n        limit = 27 # \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\n\n        while page > 0:\n            # count - \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0439\u0442\u0435\u043c\u043e\u0432 \u043d\u0430 \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c)\n            count, catalog = await Api.Catalog.products_list(\n                category_alias=category_alias,\n                subcategory_alias=subcategory_alias,\n                page=page,\n                limit=limit,\n                sort=CatalogSort.POPULARITY\n            )\n            if not catalog:\n                break\n            \n            for product in catalog:\n                products.append(f'{product[\"title\"]} ({product[\"id\"]})')\n                tq.set_description(f'\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a: {len(products)}')\n            \n            if len(catalog) <= 0:\n                break\n            \n            time.sleep(0.4) # \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u0434 429, \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u044d\u043a\u0441\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\n            page += 1\n        \n    # \u041e\u0431\u0445\u043e\u0434 \u0432\u0441\u0435\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u0438 \u043f\u043e\u0434\u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439\n    for category in tq:\n        subcategories = category.get(\"items\", [])\n        # \u041c\u043e\u0436\u043d\u043e \u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0438 \u0422\u0417\n        if subcategories:\n            for subcategory in subcategories:\n                await process_sub(category[\"alias\"], subcategory[\"alias\"])\n        else:\n            await process_sub(category[\"alias\"])\n\n    tq.close()\n\n    # \u0412\u044b\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438\n    print(f'\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a: {len(products)}')\n    print(f'\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u043e\u0432\u0430\u0440\u043e\u0432: {len(set(products))}')\n    print(f'\u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438: {round(len(products) / len(set(products)), 2)}')\n```\n```bash\n> \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a: 6019: 100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 29/29 [04:29<00:00,  9.29s/it]\n> \u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a: 6019\n> \u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u043e\u0432\u0430\u0440\u043e\u0432: 4900\n> \u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438: 1.23\n```\n\n### \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u0435\u0439 \u0432 \u0441\u0435\u0441\u0441\u0438\u0438:\n*\u041e\u0442 \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0432\u044b\u0434\u0430\u0447\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430!*\n```py\nasync with FixPrice() as Api:\n    print(f\"ID \u0433\u043e\u0440\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0432\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c: {Api.city_id}, \u044f\u0437\u044b\u043a: {Api.language}\") # \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e\n    await Api.Catalog.home_brands_list() # \u041c\u043e\u0436\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e\n    print(f\"ID \u0433\u043e\u0440\u043e\u0434\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430: {Api.city_id}, \u044f\u0437\u044b\u043a: {Api.language}\") # \u0421\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438\u0441\u043b\u0430\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\n\n    country = await Api.Geolocation.country_list(alias=\"RU\") # alias \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439\n\n    # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \"\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u0410\u0440\u0430\u0431\u0441\u043a\u0438\u0435 \u042d\u043c\u0438\u0440\u0430\u0442\u044b\"\n    print(f\"\u041d\u0430\u0439\u0434\u0435\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0430 {country[0]['title']} ({country[0]['id']}), \u0432\u0430\u043b\u044e\u0442\u0430: {country[0]['currency']['title']} / {country[0]['currency']['symbol']}\")\n\n    citys = await Api.Geolocation.city_list(country_id=country[0][\"id\"]) # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u043e\u0440\u043e\u0434\u043e\u0432\n\n    Api.city_id = citys[0][\"id\"] # \u043c\u0435\u043d\u044f\u0435\u043c ID \u0433\u043e\u0440\u043e\u0434\u0430\n    print(f\"\u0413\u043e\u0440\u043e\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u043d\u0430 {citys[0]['name']} ({citys[0]['id']})\")\n\n    # \u0412\u043d\u0435 \u0420\u0424 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\n    print(f\"\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438: {len(await Api.Catalog.categories_list())} \u0448\u0442\u0443\u043a\")\n```\n```bash\n> ID \u0433\u043e\u0440\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0432\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c: None, \u044f\u0437\u044b\u043a: None\n> ID \u0433\u043e\u0440\u043e\u0434\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430: 3, \u044f\u0437\u044b\u043a: ru\n> \u041d\u0430\u0439\u0434\u0435\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0430 \u0420\u043e\u0441\u0441\u0438\u044f (2), \u0432\u0430\u043b\u044e\u0442\u0430: \u0420\u0443\u0431\u043b\u044c / \u20bd\n> \u0413\u043e\u0440\u043e\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0429\u0435\u0440\u0431\u0438\u043d\u043a\u0430 (229)\n> \u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438: 29 \u0448\u0442\u0443\u043a\n```\n\n### \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0442\u043e\u0432\u0430\u0440\u0430\n```py\nasync with FixPrice() as Api:\n    Api.city_id = 3 # \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0433\u043e\u0440\u043e\u0434, \u0438\u043d\u0430\u0447\u0435 \u043e\u0448\u0438\u0431\u043a\u0430\n    check = await Api.Store.product_balance(1851089) # \u041a\u0440\u0443\u0430\u0441\u0441\u0430\u043d, 7DAYS, 110 \u0433, \u0441 \u0434\u0432\u043e\u0439\u043d\u044b\u043c \u043a\u0440\u0435\u043c\u043e\u043c\n\n    stoks = []\n    for i in check:\n        stoks.append(i.get(\"count\", 0))\n\n    print(f\"\u0421\u0430\u043c\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e: {max(stoks)}\")\n    print(f\"\u0421\u0430\u043c\u043e\u0435 \u043c\u0430\u043b\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e: {min(stoks)}\")\n    print(f\"\u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e: {round(sum(stoks) / len(stoks), 2)}\")\n    print(f\"\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e {len(stoks)} \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u043e\u0432\")\n```\n```bash\n> \u0421\u0430\u043c\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e: 67\n> \u0421\u0430\u043c\u043e\u0435 \u043c\u0430\u043b\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e: 10\n> \u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e: 28.5\n> \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e 339 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u043e\u0432\n```\n\n### \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439\n```py\nasync with FixPrice() as Api:\n    img = await Api.General.download_image(\"https://img.fix-price.com/190x190/_marketplace/images/origin/90/903ce795a221a6978444a86391816f93.jpg\")\n\n    with open(img.name, \"wb\") as f:\n        f.write(img.read())\n```\n\n### \u0418\u043b\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430\n```py\nasync with FixPrice() as Api:\n    tasks = [\n        Api.General.download_image(\"https://img.fix-price.com/190x190/_marketplace/images/origin/90/903ce795a221a6978444a86391816f93.jpg\"),\n        Api.General.download_image(\"https://img.fix-price.com/190x190/_marketplace/images/origin/51/519a1d3c838e3e7e30493fb9b1f69a05.jpg\")\n    ]\n\n    results = await asyncio.gather(*tasks)\n    for result in results:\n        with open(result.name, \"wb\") as f:\n            f.write(result.read())\n```\n\n---\n\n### Report / \u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u044c\n\nIf you have any problems using it / suggestions, do not hesitate to write to the [project's GitHub](https://github.com/Open-Inflation/fixprice_api/issues)!\n\n\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 / \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f, \u043d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 [GitHub \u043f\u0440\u043e\u0435\u043a\u0442\u0430](https://github.com/Open-Inflation/fixprice_api/issues)!\n\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A Python API client for FixPrice catalog",
    "version": "0.1.1",
    "project_urls": {
        "Homepage": "https://github.com/Open-Inflation/fixprice_api"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "83b55992e243f67f1d785a349dcdf28dbdcc892793ee542574a317d148b8f8cf",
                "md5": "678536a45cb37a3fc682d3b9346279fb",
                "sha256": "1736a9783aaa5c1f88a02ae71b3eb63fd2ff6eddede993e09cf19afcccf6028e"
            },
            "downloads": -1,
            "filename": "fixprice_api-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "678536a45cb37a3fc682d3b9346279fb",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 8154,
            "upload_time": "2025-02-07T18:37:43",
            "upload_time_iso_8601": "2025-02-07T18:37:43.038728Z",
            "url": "https://files.pythonhosted.org/packages/83/b5/5992e243f67f1d785a349dcdf28dbdcc892793ee542574a317d148b8f8cf/fixprice_api-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-07 18:37:43",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Open-Inflation",
    "github_project": "fixprice_api",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "aiohttp",
            "specs": [
                [
                    "~=",
                    "3.10.11"
                ]
            ]
        }
    ],
    "lcname": "fixprice-api"
}
        
Elapsed time: 2.69406s