> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Package core et pilotes personnalisés - Feedable

> Helpers du package feedable-core et création de pilotes personnalisés

## Vue d'ensemble de Feedable Core

`feedable-core` est un package Composer qui isole les helpers du cœur de Feedable ainsi que ses pilotes intégrés.\
En l'intégrant à un nouveau projet Laravel, vous pouvez réutiliser les mêmes bases que le starter kit.

* Package : [invokable/feedable-core](https://github.com/invokable/feedable-core)
* Starter kit : [invokable/feedable](https://github.com/invokable/feedable)

## Classes Response

`Rss2Response` et `JsonFeedResponse` permettent de fixer le format de sortie.\
Pour une configuration où l'utilisateur choisit le format, utilisez `ResponseFactory`.

```php theme={null}
use Revolution\Feedable\Core\Response\Rss2Response;

return new Rss2Response(
    title: $title,
    items: $items,
);
```

```php theme={null}
use Revolution\Feedable\Core\Enums\Format;
use Revolution\Feedable\Core\Response\ResponseFactory;

Route::get('feed.{format?}', function (Format $format = Format::RSS) use ($title, $items) {
    return ResponseFactory::format($format)->make(
        title: $title,
        items: $items,
    );
});
```

## FeedItem / Author

`FeedItem` est un objet d'élément unifié partagé entre RSS et JSON Feed.\
`Author` est un objet destiné au champ `authors`, créé avec `Author::make()`.

```php theme={null}
use Revolution\Feedable\Core\Elements\Author;
use Revolution\Feedable\Core\Elements\FeedItem;

$item = new FeedItem(
    id: $url,
    url: $url,
    title: $title,
    summary: $summary,
    authors: [Author::make(name: $authorName)->toArray()],
);
```

## Helpers Support

### AbsoluteUri::resolve()

Convertit un chemin relatif en chemin absolu.

```php theme={null}
use Revolution\Feedable\Core\Support\AbsoluteUri;

$absolute = AbsoluteUri::resolve('https://example.com/', '/images/sample.jpg');
```

### RSS::filterLinks()

```php theme={null}
use Revolution\Feedable\Core\Support\RSS;

$xml = RSS::filterLinks($rss, $links);
```

### RSS::each()

```php theme={null}
use DOMElement;
use Revolution\Feedable\Core\Support\RSS;

$xml = RSS::each($rss, function (DOMElement $item) {
    $title = $item->getElementsByTagName('title')->item(0);

    if ($title && str_contains($title->textContent, 'NGワード')) {
        $item->parentNode?->removeChild($item);
    }
});
```

## Création d'un pilote personnalisé

### 1) Ajouter directement au starter kit

Le starter kit étant une application Laravel classique, vous pouvez ajouter une route dans `routes/web.php` et l'implémenter dans un contrôleur (ou une classe invokable).

```php theme={null}
use App\Http\Controllers\CustomFeedController;
use Revolution\Feedable\Core\Enums\Format;

Route::get('/custom/site.{format?}', CustomFeedController::class)
    ->whereIn('format', array_column(Format::cases(), 'value'));
```

### 2) Ajouter en tant que package Composer

Pour une réutilisation dans plusieurs projets, il est plus pratique d'enregistrer les routes dans un ServiceProvider.

```php theme={null}
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Route;

class CustomDriverServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        Route::middleware('web')->group(__DIR__.'/../routes/web.php');
    }
}
```

### 3) Enregistrer les informations via Driver::about() (optionnel)

L'enregistrement dans `Driver::about()` fournit les métadonnées affichées dans la liste des sites pris en charge.\
Le pilote fonctionne même sans cet enregistrement.

## Référence : pilote pour le blog Laravel

Consultez le pilote pour le blog officiel Laravel à titre d'exemple d'implémentation.

* [LaravelBlogDriver.php](https://github.com/invokable/feedable-core/blob/main/src/Drivers/Laravel/LaravelBlogDriver.php)


## Related topics

- [Feedable](/fr/packages/feedable/index.md)
- [Liste des sites pris en charge - Feedable](/fr/packages/feedable/drivers.md)
- [Pilote Amazon Bedrock pour Laravel AI SDK](/fr/packages/laravel-amazon-bedrock.md)
- [Socialite for Discord](/fr/packages/socialite-discord.md)
- [Créer un fournisseur personnalisé pour l'AI SDK](/fr/advanced/ai-sdk-custom-provider.md)
