Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Avito Products Laravel Package

baks-dev/avito-products

Модуль baks-dev/avito-products для PHP 8.4+: интеграция и управление продукцией Avito в проектах на Laravel/PHP. Установка через Composer, поддержка тестов PHPUnit (group=avito-products). Версия 7.4.13, лицензия MIT.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Steps

  1. Installation

    composer require baks-dev/avito-products
    

    Requires PHP 8.4+ and baks-dev/core:^7.4.

  2. Publish Config

    php artisan vendor:publish --provider="BaksDev\AvitoProducts\AvitoProductsServiceProvider" --tag="config"
    

    Configure config/avito-products.php with API credentials and endpoints.

  3. Register Service Provider Add to config/app.php:

    BaksDev\AvitoProducts\AvitoProductsServiceProvider::class,
    
  4. 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'));
    }
    

Implementation Patterns

Workflows

  1. CRUD Operations

    • Create Listing:
      $listing = AvitoProducts::listings()->create([
          'title' => 'Example Product',
          'description' => 'Details here',
          'price' => 1000,
          'category_id' => 123,
          'images' => ['url1', 'url2'],
      ]);
      
    • Update/Delete: Use update() and delete() methods with Avito-compatible payloads.
  2. 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]),
    ]);
    
  3. Media Handling Upload images via:

    $media = AvitoProducts::media()->upload('path/to/image.jpg');
    $listing->addMedia($media);
    
  4. User Interactions Manage reviews/comments:

    $review = AvitoProducts::reviews()->create([
        'listing_id' => $listing->id,
        'user_id' => auth()->id(),
        'rating' => 5,
        'comment' => 'Great product!',
    ]);
    
  5. Category Management Fetch/update categories:

    $categories = AvitoProducts::categories()->all();
    $category = AvitoProducts::categories()->find(123);
    

Integration Tips

  • 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);
    }
    

Gotchas and Tips

Pitfalls

  1. Symfony Dependency Conflicts

    • baks-dev/core may conflict with Laravel’s service container.
    • Fix: Use app()->make() or wrap Symfony services in Laravel facades.
  2. Undocumented API Changes

    • Avito’s API may change without notice.
    • Tip: Cache responses and implement retry logic.
  3. Data Mismatches

    • Avito’s schema may differ from local models.
    • Solution: Use Laravel’s casts or accessors to normalize data.
  4. Rate Limiting

    • Avito enforces strict rate limits.
    • Workaround: Implement exponential backoff in your client.
  5. Media Uploads

    • Direct uploads may fail due to CORS or size limits.
    • Tip: Use signed URLs or a CDN for large files.

Debugging

  • 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.

Configuration Quirks

  • 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.

Extension Points

  1. 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);
        }
    }
    
  2. Model Observers Sync local models with Avito:

    Listing::observe(AvitoListingObserver::class);
    
  3. Service Providers Override default behavior by binding interfaces:

    $this->app->bind(
        \BaksDev\AvitoProducts\Contracts\ListingRepository::class,
        \App\Services\CustomListingRepository::class
    );
    

Performance Tips

  • 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]);
    });
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky
spatie/mailcoach-vapor