Skip to content

PHP klient

Knižnica, ktorá za teba rieši dávkovanie, čiastočné zlyhania, opakovanie a bezpečný snapshot — teda presne tie veci, ktoré si inak každý napíše po svojom.

Bez frameworkovej závislosti: HTTP ide cez PSR-18 klienta a PSR-17 factory, ktoré si dodáš sám. Beží na PHP 8.1+.

Inštalácia

bash
composer require metty/php-client

Ak v projekte ešte nemáš PSR-18 klienta:

bash
composer require symfony/http-client nyholm/psr7

Nastavenie

php
use Metty\Client\MettyClient;

$client = MettyClient::create(
    baseUrl: 'https://api.metty.eu',
    apiKey: 'verejny-api-kluc',
    secretKey: 'msk_…',   // len na serveri; bez neho je klient iba na čítanie
);

Vyhľadávanie

php
use Metty\Client\Search\SearchQuery;

$response = $client->search()->search(
    SearchQuery::for('vŕtačka')
        ->filter('brand', 'Bosch')
        ->exclude('availability', '0')
        ->range('price', 100, 200)
        ->facet('brand', 10)
        ->sortBy('price', 'asc')
        ->size(20)
        ->page(2),
);

foreach ($response->hits as $hit) {
    echo $hit->identity, ' ', $hit->title(), ' ', $hit->webUrl(), PHP_EOL;
}

echo $response->totalHits;

Ďalej autocomplete('vŕta') a facetValue('brand', 'bo').

Zápis katalógu

php
use Metty\Client\Content\ContentItem;

$result = $client->content()->replace([
    ContentItem::product('sku-1', 'Príklepová vŕtačka', 'https://eshop.sk/vrtacka', price: 129.9, availability: 3, brand: 'Bosch'),
    ContentItem::product('sku-2', 'Uhlová brúska', 'https://eshop.sk/bruska', price: 89.5),
]);

foreach ($result->failures() as $failure) {
    echo $failure->identity, ': ', $failure->errorCode, ' — ', $failure->errorMessage, PHP_EOL;
}

Katalóg akejkoľvek veľkosti pošli naraz — klient ho sám rozdelí na dávky po 100 objektoch.

patch() mení iba uvedené polia, delete(['sku-1']) produkty odstráni.

Full snapshot

php
$outcome = $client->content()->synchronizeCatalog($items, generation: '2026-07-31');

echo $outcome['commit']['removed']; // koľko starých produktov zmizlo

Keď sa niektorý produkt nepodarí nahrať, klient generáciu necommitne — inak by commit zmazal práve to, čo neprešlo. Vedomé prepísanie je force: true.

Export

php
foreach ($client->content()->export() as $object) {
    echo $object['identity'], PHP_EOL;
}

Čo klient rieši za teba

  • dávkovanie podľa limitu servera
  • čiastočné zlyhanie — dostaneš stav každého objektu, nie jednu výnimku
  • opakovanie iba na 429 (rešpektuje Retry-After) a 5xx; ostatné 4xx neopakuje
  • poistku pri snapshote — neúplná generácia sa necommitne

Authorization sa nikdy neloguje ani nedostane do výnimky.

Dokumentácia Metty