# 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"
}