mirror of
https://github.com/koel/koel
synced 2024-12-23 02:53:20 +00:00
56 lines
1.3 KiB
PHP
56 lines
1.3 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Http\Integrations\Lastfm\Requests;
|
||
|
|
||
|
use App\Http\Integrations\Concerns\FormatsLastFmText;
|
||
|
use App\Models\Artist;
|
||
|
use App\Values\ArtistInformation;
|
||
|
use Saloon\Enums\Method;
|
||
|
use Saloon\Http\Request;
|
||
|
use Saloon\Http\Response;
|
||
|
|
||
|
final class GetArtistInfoRequest extends Request
|
||
|
{
|
||
|
use FormatsLastFmText;
|
||
|
|
||
|
protected Method $method = Method::GET;
|
||
|
|
||
|
public function __construct(private Artist $artist)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public function resolveEndpoint(): string
|
||
|
{
|
||
|
return '/';
|
||
|
}
|
||
|
|
||
|
/** @return array<mixed> */
|
||
|
protected function defaultQuery(): array
|
||
|
{
|
||
|
return [
|
||
|
'api_key' => config('koel.lastfm.key'),
|
||
|
'method' => 'artist.getInfo',
|
||
|
'artist' => $this->artist->name,
|
||
|
'autocorrect' => 1,
|
||
|
'format' => 'json',
|
||
|
];
|
||
|
}
|
||
|
|
||
|
public function createDtoFromResponse(Response $response): ?ArtistInformation
|
||
|
{
|
||
|
$artist = object_get($response->object(), 'artist');
|
||
|
|
||
|
if (!$artist) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
return ArtistInformation::make(
|
||
|
url: object_get($artist, 'url'),
|
||
|
bio: [
|
||
|
'summary' => self::formatLastFmText(object_get($artist, 'bio.summary')),
|
||
|
'full' => self::formatLastFmText(object_get($artist, 'bio.content')),
|
||
|
],
|
||
|
);
|
||
|
}
|
||
|
}
|