Библиотека для работы с 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b18ad92b99cd93c9cd561ea9333da7db4596f1d44683a7aba624b75836fc8eae
|
|
| MD5 |
0cc029b4ac21ca86e72fcb3122754d9d
|
|
| BLAKE2b-256 |
ee1cafec6603ae2451b217a1db269e7054204027a3002be13a8ec9fdcb7c202a
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ff96beafa4f454c6ac1310d45bf957e47ceb5827c5d5a88152f9cd7723e5a44
|
|
| MD5 |
06ba362e3bd1f1dc025b2a902af8e6bb
|
|
| BLAKE2b-256 |
b52cd138fd24b704f90e703bc3d75286e8f730970223bcf322753784d6684f81
|