Fetch anime details by id for the collection
This commit is contained in:
parent
375b8f9bcb
commit
766e3cd71c
@ -141,7 +141,7 @@ final class Kitsu {
|
|||||||
* @param array $data
|
* @param array $data
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getTitles(array $data): array
|
public static function oldGetTitles(array $data): array
|
||||||
{
|
{
|
||||||
$raw = array_unique([
|
$raw = array_unique([
|
||||||
$data['canonicalTitle'],
|
$data['canonicalTitle'],
|
||||||
@ -152,6 +152,23 @@ final class Kitsu {
|
|||||||
return array_diff($raw,[$data['canonicalTitle']]);
|
return array_diff($raw,[$data['canonicalTitle']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the list of titles
|
||||||
|
*
|
||||||
|
* @param array $titles
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getTitles(array $titles): array
|
||||||
|
{
|
||||||
|
$raw = array_unique([
|
||||||
|
$titles['canonical'],
|
||||||
|
...array_values($titles['localized']),
|
||||||
|
// ...array_values($data['abbreviatedTitles'] ?? []),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return array_diff($raw,[$titles['canonical']]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filter out duplicate and very similar names from
|
* Filter out duplicate and very similar names from
|
||||||
*
|
*
|
||||||
|
@ -0,0 +1,117 @@
|
|||||||
|
query ($id: ID!) {
|
||||||
|
findAnimeById(id: $id) {
|
||||||
|
id
|
||||||
|
ageRating
|
||||||
|
ageRatingGuide
|
||||||
|
posterImage {
|
||||||
|
original {
|
||||||
|
height
|
||||||
|
name
|
||||||
|
url
|
||||||
|
width
|
||||||
|
}
|
||||||
|
views {
|
||||||
|
height
|
||||||
|
name
|
||||||
|
url
|
||||||
|
width
|
||||||
|
}
|
||||||
|
}
|
||||||
|
categories {
|
||||||
|
nodes {
|
||||||
|
title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
characters {
|
||||||
|
nodes {
|
||||||
|
character {
|
||||||
|
id
|
||||||
|
names {
|
||||||
|
canonical
|
||||||
|
alternatives
|
||||||
|
}
|
||||||
|
image {
|
||||||
|
original {
|
||||||
|
height
|
||||||
|
name
|
||||||
|
url
|
||||||
|
width
|
||||||
|
}
|
||||||
|
}
|
||||||
|
slug
|
||||||
|
}
|
||||||
|
role
|
||||||
|
}
|
||||||
|
pageInfo {
|
||||||
|
endCursor
|
||||||
|
hasNextPage
|
||||||
|
hasPreviousPage
|
||||||
|
startCursor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
startDate
|
||||||
|
endDate
|
||||||
|
episodeCount
|
||||||
|
episodeLength
|
||||||
|
totalLength
|
||||||
|
posterImage {
|
||||||
|
original {
|
||||||
|
height
|
||||||
|
name
|
||||||
|
url
|
||||||
|
width
|
||||||
|
}
|
||||||
|
views {
|
||||||
|
height
|
||||||
|
name
|
||||||
|
url
|
||||||
|
width
|
||||||
|
}
|
||||||
|
}
|
||||||
|
season
|
||||||
|
sfw
|
||||||
|
slug
|
||||||
|
staff {
|
||||||
|
nodes {
|
||||||
|
person {
|
||||||
|
id
|
||||||
|
birthday
|
||||||
|
image {
|
||||||
|
original {
|
||||||
|
height
|
||||||
|
name
|
||||||
|
url
|
||||||
|
width
|
||||||
|
}
|
||||||
|
views {
|
||||||
|
height
|
||||||
|
name
|
||||||
|
url
|
||||||
|
width
|
||||||
|
}
|
||||||
|
}
|
||||||
|
names {
|
||||||
|
alternatives
|
||||||
|
canonical
|
||||||
|
localized
|
||||||
|
}
|
||||||
|
}
|
||||||
|
role
|
||||||
|
}
|
||||||
|
pageInfo {
|
||||||
|
endCursor
|
||||||
|
hasNextPage
|
||||||
|
hasPreviousPage
|
||||||
|
startCursor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
status
|
||||||
|
synopsis
|
||||||
|
titles {
|
||||||
|
canonical
|
||||||
|
localized
|
||||||
|
}
|
||||||
|
totalLength
|
||||||
|
youtubeTrailerVideoId
|
||||||
|
}
|
||||||
|
}
|
@ -63,7 +63,6 @@ trait KitsuAnimeTrait {
|
|||||||
$baseData = $this->requestBuilder->runQuery('AnimeDetails', [
|
$baseData = $this->requestBuilder->runQuery('AnimeDetails', [
|
||||||
'slug' => $slug
|
'slug' => $slug
|
||||||
]);
|
]);
|
||||||
// $baseData = $this->getRawMediaData('anime', $slug);
|
|
||||||
|
|
||||||
if (empty($baseData))
|
if (empty($baseData))
|
||||||
{
|
{
|
||||||
@ -109,7 +108,10 @@ trait KitsuAnimeTrait {
|
|||||||
*/
|
*/
|
||||||
public function getAnimeById(string $animeId): Anime
|
public function getAnimeById(string $animeId): Anime
|
||||||
{
|
{
|
||||||
$baseData = $this->getRawMediaDataById('anime', $animeId);
|
$baseData = $this->requestBuilder->runQuery('AnimeDetailsById', [
|
||||||
|
'id' => $animeId,
|
||||||
|
]);
|
||||||
|
// $baseData = $this->getRawMediaDataById('anime', $animeId);
|
||||||
return $this->animeTransformer->transform($baseData);
|
return $this->animeTransformer->transform($baseData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,9 @@ final class AnimeTransformer extends AbstractTransformer {
|
|||||||
*/
|
*/
|
||||||
public function transform($item): AnimePage
|
public function transform($item): AnimePage
|
||||||
{
|
{
|
||||||
$base = $item['data']['findAnimeBySlug'];
|
$base = array_key_exists('findAnimeBySlug', $item['data'])
|
||||||
|
? $item['data']['findAnimeBySlug']
|
||||||
|
: $item['data']['findAnimeById'];
|
||||||
$characters = [];
|
$characters = [];
|
||||||
$staff = [];
|
$staff = [];
|
||||||
$genres = array_map(fn ($genre) => $genre['title']['en'], $base['categories']['nodes']);
|
$genres = array_map(fn ($genre) => $genre['title']['en'], $base['categories']['nodes']);
|
||||||
@ -42,7 +44,8 @@ final class AnimeTransformer extends AbstractTransformer {
|
|||||||
sort($genres);
|
sort($genres);
|
||||||
|
|
||||||
$title = $base['titles']['canonical'];
|
$title = $base['titles']['canonical'];
|
||||||
$titles = Kitsu::filterLocalizedTitles($base['titles']);
|
$titles = Kitsu::getTitles($base['titles']);
|
||||||
|
$titles_more = Kitsu::filterLocalizedTitles($base['titles']);
|
||||||
|
|
||||||
if (count($base['characters']['nodes']) > 0)
|
if (count($base['characters']['nodes']) > 0)
|
||||||
{
|
{
|
||||||
@ -103,12 +106,13 @@ final class AnimeTransformer extends AbstractTransformer {
|
|||||||
'id' => $base['id'],
|
'id' => $base['id'],
|
||||||
'slug' => $base['slug'],
|
'slug' => $base['slug'],
|
||||||
'staff' => $staff,
|
'staff' => $staff,
|
||||||
|
'show_type' => 'TV', // TODO: get show type
|
||||||
'status' => Kitsu::getAiringStatus($base['startDate'], $base['endDate']),
|
'status' => Kitsu::getAiringStatus($base['startDate'], $base['endDate']),
|
||||||
'streaming_links' => [], // Kitsu::parseStreamingLinks($item['included']),
|
'streaming_links' => [], // Kitsu::parseStreamingLinks($item['included']),
|
||||||
'synopsis' => $base['synopsis']['en'],
|
'synopsis' => $base['synopsis']['en'],
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'titles' => [],
|
'titles' => $titles,
|
||||||
'titles_more' => $titles,
|
'titles_more' => $titles_more,
|
||||||
'total_length' => $base['totalLength'],
|
'total_length' => $base['totalLength'],
|
||||||
'trailer_id' => $base['youtubeTrailerVideoId'],
|
'trailer_id' => $base['youtubeTrailerVideoId'],
|
||||||
'url' => "https://kitsu.io/anime/{$base['slug']}",
|
'url' => "https://kitsu.io/anime/{$base['slug']}",
|
||||||
|
Loading…
Reference in New Issue
Block a user