baks-dev/avito-products
Модуль baks-dev/avito-products для PHP 8.4+: интеграция и управление продукцией Avito в проектах на Laravel/PHP. Установка через Composer, поддержка тестов PHPUnit (group=avito-products). Версия 7.4.13, лицензия MIT.
Installation
composer require baks-dev/avito-products
Requires PHP 8.4+ and baks-dev/core:^7.4.
Publish Config
php artisan vendor:publish --provider="BaksDev\AvitoProducts\AvitoProductsServiceProvider" --tag="config"
Configure config/avito-products.php with API credentials and endpoints.
Register Service Provider
Add to config/app.php:
BaksDev\AvitoProducts\AvitoProductsServiceProvider::class,
First Use Case: Fetch Listings
use BaksDev\AvitoProducts\Facades\AvitoProducts;
public function index()
{
$listings = AvitoProducts::listings()->get(['category' => '123']);
return view('listings.index', compact('listings'));
}
CRUD Operations
$listing = AvitoProducts::listings()->create([
'title' => 'Example Product',
'description' => 'Details here',
'price' => 1000,
'category_id' => 123,
'images' => ['url1', 'url2'],
]);
update() and delete() methods with Avito-compatible payloads.Search & Filtering Leverage Avito’s query parameters:
$results = AvitoProducts::listings()->search([
'q' => 'search term',
'region' => '1',
'sort' => 'PRICE_ASC',
'filter' => json_encode(['price_from' => 500]),
]);
Media Handling Upload images via:
$media = AvitoProducts::media()->upload('path/to/image.jpg');
$listing->addMedia($media);
User Interactions Manage reviews/comments:
$review = AvitoProducts::reviews()->create([
'listing_id' => $listing->id,
'user_id' => auth()->id(),
'rating' => 5,
'comment' => 'Great product!',
]);
Category Management Fetch/update categories:
$categories = AvitoProducts::categories()->all();
$category = AvitoProducts::categories()->find(123);
Laravel Eloquent Sync: Use observers to sync Avito data with local models:
class AvitoListingObserver
{
public function saved(Listing $listing)
{
AvitoProducts::listings()->sync($listing);
}
}
Queue Async Operations: Offload heavy operations to queues:
dispatch(new SyncAvitoListingsJob($categoryId));
API Rate Limiting: Implement middleware to handle Avito’s rate limits:
public function handle(Request $request, Closure $next)
{
if (AvitoProducts::isRateLimited()) {
return response()->json(['error' => 'Rate limit exceeded'], 429);
}
return $next($request);
}
Symfony Dependency Conflicts
baks-dev/core may conflict with Laravel’s service container.app()->make() or wrap Symfony services in Laravel facades.Undocumented API Changes
Data Mismatches
casts or accessors to normalize data.Rate Limiting
Media Uploads
Enable Debug Mode:
config(['avito-products.debug' => true]);
Logs API requests/responses to storage/logs/avito-products.log.
Common Errors:
InvalidArgumentException: Check payload structure against Avito’s API docs.HttpException: Verify API credentials and endpoints.API Endpoints:
Ensure config/avito-products.php uses the correct regional endpoint (e.g., ru.avito.api for Russia).
Webhooks:
If using Avito’s webhooks, configure Laravel’s queue:work to process them asynchronously.
Custom API Clients Extend the base client for additional endpoints:
class CustomAvitoClient extends \BaksDev\AvitoProducts\AvitoProductsClient
{
public function customEndpoint($data)
{
return $this->request('POST', '/custom', $data);
}
}
Model Observers Sync local models with Avito:
Listing::observe(AvitoListingObserver::class);
Service Providers Override default behavior by binding interfaces:
$this->app->bind(
\BaksDev\AvitoProducts\Contracts\ListingRepository::class,
\App\Services\CustomListingRepository::class
);
Batch Processing: Use chunking for large datasets:
AvitoProducts::listings()->chunk(100, function ($listings) {
Listing::insert($listings->toArray());
});
Caching: Cache frequent queries:
$listings = Cache::remember("avito_listings_{$categoryId}", now()->addHours(1), function () {
return AvitoProducts::listings()->get(['category' => $categoryId]);
});
How can I help you explore Laravel packages today?