Skip to main content

Библиотека для работы с API Lalafo

Project description

Документация Lalafo API

Этот код был написан в крайне сжатые сроки (буквально за 2 дня). Изначально стоял выбор: потратить месяц на попытку написать «идеально» или быстро «навайбкодить» рабочее решение. Был выбран второй вариант, однако в дальнейшем была проведена работа над ошибками, чтобы исправить структуру и привести библиотеку к нормальной архитектуре.

Библиотека предоставляет удобный интерфейс для взаимодействия с API Lalafo, поддерживая как синхронный, так и асинхронный режимы работы.

Установка: pip install lalafo-api

Основные возможности

  • Синхронный (LalafoClient) и асинхронный (AsyncLalafoClient) клиенты.
  • Полное покрытие моделей данных (объявления, категории, фильтры, пользователи).
  • Удобный поиск с поддержкой пагинации и фильтров.
  • Инструменты для парсинга данных напрямую из URL сайта Lalafo.
  • Автоматическая обработка ошибок API.

Быстрый старт

Синхронный клиент

from lalafo import LalafoClient, SearchRequest

client = LalafoClient()

# Поиск объявлений
request = SearchRequest(q="iPhone 15", price_to=100000)
results = client.search_ads(request)

for item in results.items:
    print(f"{item.title} - {item.price} {item.currency}")

Асинхронный клиент

import asyncio
from lalafo import AsyncLalafoClient

async def main():
    client = AsyncLalafoClient()
    ad = await client.get_ad_details(ad_id=12345678)
    print(ad.ad.title)
    print(ad.ad.description)

asyncio.run(main())

Архитектура библиотеки

1. Клиенты (api/)

Библиотека использует два основных класса:

  • LalafoClient: использует httpx для блокирующих запросов. Подходит для простых скриптов.
  • AsyncLalafoClient: использует асинхронный httpx. Рекомендуется для ботов и веб-приложений.

Оба клиента поддерживают автоматические повторы запросов (retries) при таймаутах, которые настраиваются через ClientConfig.

2. Конфигурация (ClientConfig)

Вы можете настроить заголовки, версию приложения и параметры сети:

from lalafo import ClientConfig, LalafoClient

config = ClientConfig(
    timeout=10.0,
    max_retries=5,
    language="ru_RU",
    user_agent="Custom Agent 1.0"
)
client = LalafoClient(config=config)

3. Поиск и фильтрация (SearchRequest)

Класс SearchRequest инкапсулирует все параметры поиска:

  • q: текстовый запрос.
  • category_id: ID категории.
  • city_id: ID города.
  • price_from / price_to: диапазон цен.
  • parameters: словарь дополнительных параметров.

4. Модели данных (models/)

Все ответы API преобразуются в Pydantic-модели. Это дает подсказки в IDE и гарантирует корректность данных.

  • AdCompact: краткая информация в результатах поиска.
  • AdDetail: полная информация об объявлении (включая все параметры и статус).
  • Category: модель дерева категорий.
  • SearchResponse: содержит список элементов, метаданные пагинации и ссылки на следующую/предыдущую страницы.

5. Обработка исключений (exceptions.py)

Библиотека генерирует специфические исключения:

  • APIError: базовая ошибка сервера.
  • RateLimitError: (429) превышен лимит запросов.
  • AuthenticationError: (401) ошибка доступа.
  • NotFoundError: (404) ресурс не найден.
  • ValidationError: ошибка во входных данных.

Утилиты (utils/)

Библиотека умеет превращать обычные ссылки с сайта Lalafo в объекты, понятные коду:

  • fetch_ad_from_url(url): принимает ссылку на объявление и возвращает его детали.
  • get_search_request_from_url(url): анализирует ссылку поиска на сайте и создает готовый объект SearchRequest с примененными фильтрами (работает криво).

Пример:

# Получаем объект запроса из ссылки поиска
request = client.get_search_request_from_url("https://lalafo.kg/bishkek/mobilnye-telefony-i-aksessuary/mobilnye-telefony?price[to]=2000")
# Выполняем поиск по этому запросу
results = client.search_ads(request)

Работа с категориями

Вы можете получить полное дерево категорий и перемещаться по нему:

tree = client.get_categories_tree()

# Поиск категории по ID
category = tree.find_by_id(123)

# Получение плоского списка всех подкатегорий
flat_list = tree.flatten()

Информация о пагинации

SearchResponse предоставляет удобный доступ к навигации:

  • response.has_next_page: есть ли еще результаты.
  • response.meta.totalCount: общее количество найденных объявлений.
  • Метод search_ads_all_pages в клиенте позволяет автоматически собрать объявления с нескольких страниц подряд.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lalafo_api-0.1.0.tar.gz (20.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lalafo_api-0.1.0-py3-none-any.whl (26.9 kB view details)

Uploaded Python 3

File details

Details for the file lalafo_api-0.1.0.tar.gz.

File metadata

  • Download URL: lalafo_api-0.1.0.tar.gz
  • Upload date:
  • Size: 20.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for lalafo_api-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b18ad92b99cd93c9cd561ea9333da7db4596f1d44683a7aba624b75836fc8eae
MD5 0cc029b4ac21ca86e72fcb3122754d9d
BLAKE2b-256 ee1cafec6603ae2451b217a1db269e7054204027a3002be13a8ec9fdcb7c202a

See more details on using hashes here.

File details

Details for the file lalafo_api-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: lalafo_api-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 26.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for lalafo_api-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0ff96beafa4f454c6ac1310d45bf957e47ceb5827c5d5a88152f9cd7723e5a44
MD5 06ba362e3bd1f1dc025b2a902af8e6bb
BLAKE2b-256 b52cd138fd24b704f90e703bc3d75286e8f730970223bcf322753784d6684f81

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page