From 5340c394664771bd992a6af21bb9c75b531e7a75 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Wed, 21 Oct 2020 14:51:17 -0400 Subject: [PATCH] More GraphQL conversion, test updates, see #33 --- src/AnimeClient/API/Kitsu/AnimeTrait.php | 34 - src/AnimeClient/API/Kitsu/MangaTrait.php | 28 - src/AnimeClient/API/Kitsu/Model.php | 25 +- tests/AnimeClient/API/Kitsu/ModelTest.php | 42 + .../Transformer/AnimeListTransformerTest.php | 8 +- .../Transformer/AnimeTransformerTest.php | 3 - .../Transformer/MangaListTransformerTest.php | 21 +- .../Transformer/MangaTransformerTest.php | 10 +- ...eListTransformerTest__testTransform__1.php | 45 - ...eListTransformerTest__testTransform__1.yml | 36 +- ...st__testUntransform with data set 0__1.php | 15 - ...st__testUntransform with data set 1__1.php | 15 - ...st__testUntransform with data set 2__1.php | 14 - ...AnimeTransformerTest__testTransform__1.php | 315 -- ...AnimeTransformerTest__testTransform__1.yml | 94 +- ...aListTransformerTest__testTransform__1.yml | 68 +- ...MangaTransformerTest__testTransform__1.php | 86 - ...MangaTransformerTest__testTransform__1.yml | 41 +- .../test_data/Kitsu/animeAfterTransform.json | 52 - .../test_data/Kitsu/animeBeforeTransform.json | 4042 +++++++++++++++-- .../Kitsu/animeListItemAfterTransform.json | 30 - .../Kitsu/animeListItemBeforeTransform.json | 1271 +----- .../test_data/Kitsu/mangaAfterTransform.json | 12 - .../test_data/Kitsu/mangaBeforeTransform.json | 648 ++- .../Kitsu/mangaListAfterTransform.json | 126 - .../Kitsu/mangaListBeforeTransform.json | 1433 +----- 26 files changed, 4763 insertions(+), 3751 deletions(-) create mode 100644 tests/AnimeClient/API/Kitsu/ModelTest.php delete mode 100644 tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php delete mode 100644 tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set 0__1.php delete mode 100644 tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set 1__1.php delete mode 100644 tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set 2__1.php delete mode 100644 tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeTransformerTest__testTransform__1.php delete mode 100644 tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/MangaTransformerTest__testTransform__1.php delete mode 100644 tests/AnimeClient/test_data/Kitsu/animeAfterTransform.json delete mode 100644 tests/AnimeClient/test_data/Kitsu/animeListItemAfterTransform.json delete mode 100644 tests/AnimeClient/test_data/Kitsu/mangaAfterTransform.json delete mode 100644 tests/AnimeClient/test_data/Kitsu/mangaListAfterTransform.json diff --git a/src/AnimeClient/API/Kitsu/AnimeTrait.php b/src/AnimeClient/API/Kitsu/AnimeTrait.php index fab16c70..04141df2 100644 --- a/src/AnimeClient/API/Kitsu/AnimeTrait.php +++ b/src/AnimeClient/API/Kitsu/AnimeTrait.php @@ -222,40 +222,6 @@ trait AnimeTrait { return $output; } - /** - * Get the mal id for the anime represented by the kitsu id - * to enable updating MyAnimeList - * - * @param string $kitsuAnimeId The id of the anime on Kitsu - * @return string|null Returns the mal id if it exists, otherwise null - */ - public function getMalIdForAnime(string $kitsuAnimeId): ?string - { - $options = [ - 'query' => [ - 'include' => 'mappings' - ] - ]; - $data = $this->requestBuilder->getRequest("anime/{$kitsuAnimeId}", $options); - - if ( ! array_key_exists('included', $data)) - { - return NULL; - } - - $mappings = array_column($data['included'], 'attributes'); - - foreach($mappings as $map) - { - if ($map['externalSite'] === 'myanimelist/anime') - { - return $map['externalId']; - } - } - - return NULL; - } - /** * Get the full anime list in paginated form * diff --git a/src/AnimeClient/API/Kitsu/MangaTrait.php b/src/AnimeClient/API/Kitsu/MangaTrait.php index 740d2633..67406bbd 100644 --- a/src/AnimeClient/API/Kitsu/MangaTrait.php +++ b/src/AnimeClient/API/Kitsu/MangaTrait.php @@ -242,32 +242,4 @@ trait MangaTrait { return $this->requestBuilder->setUpRequest('GET', 'library-entries', ['query' => $options]); } - - /** - * Get the mal id for the manga represented by the kitsu id - * to enable updating MyAnimeList - * - * @param string $kitsuMangaId The id of the manga on Kitsu - * @return string|null Returns the mal id if it exists, otherwise null - */ - public function getMalIdForManga(string $kitsuMangaId): ?string - { - $options = [ - 'query' => [ - 'include' => 'mappings' - ] - ]; - $data = $this->requestBuilder->getRequest("manga/{$kitsuMangaId}", $options); - $mappings = array_column($data['included'], 'attributes'); - - foreach($mappings as $map) - { - if ($map['externalSite'] === 'myanimelist/manga') - { - return $map['externalId']; - } - } - - return NULL; - } } \ No newline at end of file diff --git a/src/AnimeClient/API/Kitsu/Model.php b/src/AnimeClient/API/Kitsu/Model.php index 830d5afe..bfcfe0e3 100644 --- a/src/AnimeClient/API/Kitsu/Model.php +++ b/src/AnimeClient/API/Kitsu/Model.php @@ -279,27 +279,12 @@ final class Model { */ public function getKitsuIdFromMALId(string $malId, string $type='anime'): ?string { - $options = [ - 'query' => [ - 'filter' => [ - 'external_site' => "myanimelist/{$type}", - 'external_id' => $malId - ], - 'fields' => [ - 'media' => 'id,slug' - ], - 'include' => 'item' - ] - ]; + $raw = $this->requestBuilder->runQuery('GetIdByMapping', [ + 'id' => $malId, + 'site' => strtoupper("MYANIMELIST_{$type}"), + ]); - $raw = $this->requestBuilder->getRequest('mappings', $options); - - if ( ! array_key_exists('included', $raw)) - { - return NULL; - } - - return $raw['included'][0]['id']; + return $raw['data']['lookupMapping']['id'] ?? NULL; } /** diff --git a/tests/AnimeClient/API/Kitsu/ModelTest.php b/tests/AnimeClient/API/Kitsu/ModelTest.php new file mode 100644 index 00000000..a4ed7a49 --- /dev/null +++ b/tests/AnimeClient/API/Kitsu/ModelTest.php @@ -0,0 +1,42 @@ + + * @copyright 2015 - 2020 Timothy J. Warren + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @version 5.1 + * @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient + */ + +namespace Aviat\AnimeClient\Tests\API\Kitsu; + +use Aviat\AnimeClient\Tests\AnimeClientTestCase; + +class ModelTest extends AnimeClientTestCase { + + protected $model; + + public function setUp(): void + { + parent::setup(); + $this->model = $this->container->get('kitsu-model'); + } + + public function testGetAnimeKitsuIdFromMALId(): void + { + $kitsuId = $this->model->getKitsuIdFromMALId("1", 'anime'); + self::assertEquals("1", $kitsuId); + } + + public function testGetNullFromMALAnimeId(): void + { + $kitsuId = $this->model->getKitsuIdFromMALId("0", 'anime'); + self::assertNull($kitsuId); + } +} \ No newline at end of file diff --git a/tests/AnimeClient/API/Kitsu/Transformer/AnimeListTransformerTest.php b/tests/AnimeClient/API/Kitsu/Transformer/AnimeListTransformerTest.php index bdb1f81f..bee7b320 100644 --- a/tests/AnimeClient/API/Kitsu/Transformer/AnimeListTransformerTest.php +++ b/tests/AnimeClient/API/Kitsu/Transformer/AnimeListTransformerTest.php @@ -16,9 +16,8 @@ namespace Aviat\AnimeClient\Tests\API\Kitsu\Transformer; -use Aviat\AnimeClient\API\Kitsu\Transformer\OldAnimeListTransformer; +use Aviat\AnimeClient\API\Kitsu\Transformer\AnimeListTransformer; use Aviat\AnimeClient\Tests\AnimeClientTestCase; -use Aviat\Ion\Friend; use Aviat\Ion\Json; class AnimeListTransformerTest extends AnimeClientTestCase { @@ -31,9 +30,10 @@ class AnimeListTransformerTest extends AnimeClientTestCase { parent::setUp(); $this->dir = AnimeClientTestCase::TEST_DATA_DIR . '/Kitsu'; - $this->beforeTransform = Json::decodeFile("{$this->dir}/animeListItemBeforeTransform.json"); + $raw = Json::decodeFile("{$this->dir}/animeListItemBeforeTransform.json"); + $this->beforeTransform = $raw['data']['findLibraryEntryById']; - $this->transformer = new OldAnimeListTransformer(); + $this->transformer = new AnimeListTransformer(); } public function testTransform() diff --git a/tests/AnimeClient/API/Kitsu/Transformer/AnimeTransformerTest.php b/tests/AnimeClient/API/Kitsu/Transformer/AnimeTransformerTest.php index 540e96b9..ee17a20e 100644 --- a/tests/AnimeClient/API/Kitsu/Transformer/AnimeTransformerTest.php +++ b/tests/AnimeClient/API/Kitsu/Transformer/AnimeTransformerTest.php @@ -24,7 +24,6 @@ class AnimeTransformerTest extends AnimeClientTestCase { protected $dir; protected $beforeTransform; - protected $afterTransform; protected $transformer; public function setUp(): void { @@ -38,8 +37,6 @@ class AnimeTransformerTest extends AnimeClientTestCase { public function testTransform() { - $this->markTestSkipped('Skip until fixed with GraphQL snapshot'); - $actual = $this->transformer->transform($this->beforeTransform); $this->assertMatchesSnapshot($actual); } diff --git a/tests/AnimeClient/API/Kitsu/Transformer/MangaListTransformerTest.php b/tests/AnimeClient/API/Kitsu/Transformer/MangaListTransformerTest.php index 7a2fe86b..40eb7b89 100644 --- a/tests/AnimeClient/API/Kitsu/Transformer/MangaListTransformerTest.php +++ b/tests/AnimeClient/API/Kitsu/Transformer/MangaListTransformerTest.php @@ -16,8 +16,7 @@ namespace Aviat\AnimeClient\Tests\API\Kitsu\Transformer; -use Aviat\AnimeClient\API\JsonAPI; -use Aviat\AnimeClient\API\Kitsu\Transformer\OldMangaListTransformer; +use Aviat\AnimeClient\API\Kitsu\Transformer\MangaListTransformer; use Aviat\AnimeClient\Tests\AnimeClientTestCase; use Aviat\AnimeClient\Types\{ FormItem, @@ -30,29 +29,17 @@ class MangaListTransformerTest extends AnimeClientTestCase { protected $dir; protected $rawBefore; protected $beforeTransform; - protected $afterTransform; protected $transformer; public function setUp(): void { parent::setUp(); - $kitsuModel = $this->container->get('kitsu-model'); - $this->dir = AnimeClientTestCase::TEST_DATA_DIR . '/Kitsu'; // Prep for transform - $rawBefore = Json::decodeFile("{$this->dir}/mangaListBeforeTransform.json"); - $included = JsonAPI::organizeIncludes($rawBefore['included']); - $included = JsonAPI::inlineIncludedRelationships($included, 'manga'); - foreach($rawBefore['data'] as $i => &$item) - { - $item['included'] = $included; - } - - $this->beforeTransform = $rawBefore['data']; - // $this->afterTransform = Json::decodeFile("{$this->dir}/mangaListAfterTransform.json"); - - $this->transformer = new OldMangaListTransformer(); + $raw = Json::decodeFile("{$this->dir}/mangaListBeforeTransform.json"); + $this->beforeTransform = $raw['data']['findProfileBySlug']['library']['all']['nodes']; + $this->transformer = new MangaListTransformer(); } public function testTransform() diff --git a/tests/AnimeClient/API/Kitsu/Transformer/MangaTransformerTest.php b/tests/AnimeClient/API/Kitsu/Transformer/MangaTransformerTest.php index fee0ea0f..298476aa 100644 --- a/tests/AnimeClient/API/Kitsu/Transformer/MangaTransformerTest.php +++ b/tests/AnimeClient/API/Kitsu/Transformer/MangaTransformerTest.php @@ -16,7 +16,6 @@ namespace Aviat\AnimeClient\Tests\API\Kitsu\Transformer; -use Aviat\AnimeClient\API\JsonAPI; use Aviat\AnimeClient\API\Kitsu\Transformer\MangaTransformer; use Aviat\AnimeClient\Tests\AnimeClientTestCase; use Aviat\Ion\Json; @@ -25,26 +24,19 @@ class MangaTransformerTest extends AnimeClientTestCase { protected $dir; protected $beforeTransform; - protected $afterTransform; protected $transformer; public function setUp(): void { parent::setUp(); $this->dir = AnimeClientTestCase::TEST_DATA_DIR . '/Kitsu'; - $data = Json::decodeFile("{$this->dir}/mangaBeforeTransform.json"); - $baseData = $data['data'][0]['attributes']; - $baseData['included'] = $data['included']; - $baseData['id'] = $data['data'][0]['id']; - $this->beforeTransform = $baseData; + $this->beforeTransform = Json::decodeFile("{$this->dir}/mangaBeforeTransform.json"); $this->transformer = new MangaTransformer(); } public function testTransform() { - $this->markTestSkipped('Skip until fixed with GraphQL snapshot'); - $actual = $this->transformer->transform($this->beforeTransform); $this->assertMatchesSnapshot($actual); } diff --git a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php deleted file mode 100644 index 7559803d..00000000 --- a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.php +++ /dev/null @@ -1,45 +0,0 @@ - '15839442', - 'mal_id' => '33206', - 'episodes' => - array ( - 'watched' => '-', - 'total' => '-', - 'length' => NULL, - ), - 'airing' => - array ( - 'status' => 'Currently Airing', - 'started' => '2017-01-12', - 'ended' => NULL, - ), - 'anime' => - Aviat\AnimeClient\Types\Anime::__set_state(array( - 'age_rating' => NULL, - 'cover_image' => 'https://media.kitsu.io/anime/poster_images/12243/small.jpg?1481144116', - 'genres' => - array ( - 0 => 'Comedy', - 1 => 'Fantasy', - 2 => 'Slice of Life', - ), - 'id' => '12243', - 'show_type' => 'TV', - 'slug' => 'kobayashi-san-chi-no-maid-dragon', - 'streaming_links' => - array ( - ), - 'title' => 'Kobayashi-san Chi no Maid Dragon', - 'titles' => - array ( - 0 => 'Miss Kobayashi\'s Dragon Maid', - 1 => '小林さんちのメイドラゴン', - ), - )), - 'notes' => NULL, - 'private' => false, - 'rewatching' => false, - 'rewatched' => 0, - 'user_rating' => '-', - 'watching_status' => 'current', -)); diff --git a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.yml b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.yml index 866e1a5b..47d326a2 100644 --- a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.yml +++ b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testTransform__1.yml @@ -1,28 +1,28 @@ empty: false -id: '15839442' -mal_id: '33206' +id: '435513' +mal_id: '209' episodes: - watched: '-' - total: '-' - length: null + watched: 7 + total: 26 + length: 1500 airing: - status: 'Currently Airing' - started: '2017-01-12' - ended: null + status: 'Finished Airing' + started: '2003-09-01' + ended: '2004-03-16' anime: empty: false - age_rating: null - cover_image: 'https://media.kitsu.io/anime/poster_images/12243/small.jpg?1481144116' - genres: [Comedy, Fantasy, 'Slice of Life'] - id: '12243' + age_rating: PG + cover_image: 'https://media.kitsu.io/anime/poster_images/185/small.jpg?1597697520' + genres: { } + id: '185' show_type: TV - slug: kobayashi-san-chi-no-maid-dragon - streaming_links: { } - title: 'Kobayashi-san Chi no Maid Dragon' - titles: ['Miss Kobayashi''s Dragon Maid', 小林さんちのメイドラゴン] -notes: null + slug: r-o-d + streaming_links: [{ meta: { name: Crunchyroll, link: true, image: streaming-logos/crunchyroll.svg }, link: 'http://www.crunchyroll.com/rod', subs: [en], dubs: [ja] }, { meta: { name: Hulu, link: true, image: streaming-logos/hulu.svg }, link: 'http://www.hulu.com/rod-the-tv', subs: [en], dubs: [ja] }] + title: 'R.O.D the TV' + titles: ['アール・オー・ディー ザ・ティーヴィー'] +notes: '' private: false rewatching: false rewatched: 0 user_rating: '-' -watching_status: current +watching_status: CURRENT diff --git a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set 0__1.php b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set 0__1.php deleted file mode 100644 index f37516c9..00000000 --- a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set 0__1.php +++ /dev/null @@ -1,15 +0,0 @@ - 14047981, - 'anilist_item_id' => NULL, - 'mal_id' => NULL, - 'data' => - Aviat\AnimeClient\Types\FormItemData::__set_state(array( - 'notes' => 'Very formulaic.', - 'private' => false, - 'progress' => 38, - 'ratingTwenty' => 16, - 'reconsumeCount' => 0, - 'reconsuming' => false, - 'status' => 'current', - )), -)); diff --git a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set 1__1.php b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set 1__1.php deleted file mode 100644 index 672b1d43..00000000 --- a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set 1__1.php +++ /dev/null @@ -1,15 +0,0 @@ - 14047981, - 'anilist_item_id' => NULL, - 'mal_id' => '12345', - 'data' => - Aviat\AnimeClient\Types\FormItemData::__set_state(array( - 'notes' => 'Very formulaic.', - 'private' => true, - 'progress' => 38, - 'ratingTwenty' => 16, - 'reconsumeCount' => 0, - 'reconsuming' => true, - 'status' => 'current', - )), -)); diff --git a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set 2__1.php b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set 2__1.php deleted file mode 100644 index e0e27ff4..00000000 --- a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeListTransformerTest__testUntransform with data set 2__1.php +++ /dev/null @@ -1,14 +0,0 @@ - 14047983, - 'anilist_item_id' => NULL, - 'mal_id' => '12347', - 'data' => - Aviat\AnimeClient\Types\FormItemData::__set_state(array( - 'notes' => '', - 'private' => true, - 'progress' => 12, - 'reconsumeCount' => 0, - 'reconsuming' => true, - 'status' => 'current', - )), -)); diff --git a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeTransformerTest__testTransform__1.php b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeTransformerTest__testTransform__1.php deleted file mode 100644 index b4329b78..00000000 --- a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeTransformerTest__testTransform__1.php +++ /dev/null @@ -1,315 +0,0 @@ - - array ( - ), - 'staff' => - array ( - ), - 'age_rating' => 'R', - 'age_rating_guide' => 'Violence, Profanity', - 'cover_image' => 'https://media.kitsu.io/anime/poster_images/7442/small.jpg?1418580054', - 'episode_count' => 25, - 'episode_length' => 24, - 'genres' => - array ( - ), - 'id' => 32344, - 'included' => - array ( - 'categories' => - array ( - 23 => - array ( - 'name' => 'Super Power', - 'slug' => 'super-power', - 'description' => NULL, - ), - 11 => - array ( - 'name' => 'Fantasy', - 'slug' => 'fantasy', - 'description' => '', - ), - 4 => - array ( - 'name' => 'Drama', - 'slug' => 'drama', - 'description' => '', - ), - 1 => - array ( - 'name' => 'Action', - 'slug' => 'action', - 'description' => '', - ), - ), - 'mappings' => - array ( - 5686 => - array ( - 'externalSite' => 'myanimelist/anime', - 'externalId' => '16498', - 'relationships' => - array ( - 'media' => - array ( - 'links' => - array ( - 'self' => 'https://kitsu.io/api/edge/mappings/5686/relationships/media', - 'related' => 'https://kitsu.io/api/edge/mappings/5686/media', - ), - ), - ), - ), - 14153 => - array ( - 'externalSite' => 'thetvdb/series', - 'externalId' => '267440', - 'relationships' => - array ( - 'media' => - array ( - 'links' => - array ( - 'self' => 'https://kitsu.io/api/edge/mappings/14153/relationships/media', - 'related' => 'https://kitsu.io/api/edge/mappings/14153/media', - ), - ), - ), - ), - 15073 => - array ( - 'externalSite' => 'thetvdb/season', - 'externalId' => '514060', - 'relationships' => - array ( - 'media' => - array ( - 'links' => - array ( - 'self' => 'https://kitsu.io/api/edge/mappings/15073/relationships/media', - 'related' => 'https://kitsu.io/api/edge/mappings/15073/media', - ), - ), - ), - ), - ), - 'streamingLinks' => - array ( - 103 => - array ( - 'url' => 'http://www.crunchyroll.com/attack-on-titan', - 'subs' => - array ( - 0 => 'en', - ), - 'dubs' => - array ( - 0 => 'ja', - ), - 'relationships' => - array ( - 'streamer' => - array ( - 'links' => - array ( - 'self' => 'https://kitsu.io/api/edge/streaming-links/103/relationships/streamer', - 'related' => 'https://kitsu.io/api/edge/streaming-links/103/streamer', - ), - ), - 'media' => - array ( - 'links' => - array ( - 'self' => 'https://kitsu.io/api/edge/streaming-links/103/relationships/media', - 'related' => 'https://kitsu.io/api/edge/streaming-links/103/media', - ), - ), - ), - ), - 102 => - array ( - 'url' => 'http://www.hulu.com/attack-on-titan', - 'subs' => - array ( - 0 => 'en', - ), - 'dubs' => - array ( - 0 => 'ja', - ), - 'relationships' => - array ( - 'streamer' => - array ( - 'links' => - array ( - 'self' => 'https://kitsu.io/api/edge/streaming-links/102/relationships/streamer', - 'related' => 'https://kitsu.io/api/edge/streaming-links/102/streamer', - ), - ), - 'media' => - array ( - 'links' => - array ( - 'self' => 'https://kitsu.io/api/edge/streaming-links/102/relationships/media', - 'related' => 'https://kitsu.io/api/edge/streaming-links/102/media', - ), - ), - ), - ), - 101 => - array ( - 'url' => 'http://www.funimation.com/shows/attack-on-titan/videos/episodes', - 'subs' => - array ( - 0 => 'en', - ), - 'dubs' => - array ( - 0 => 'ja', - ), - 'relationships' => - array ( - 'streamer' => - array ( - 'links' => - array ( - 'self' => 'https://kitsu.io/api/edge/streaming-links/101/relationships/streamer', - 'related' => 'https://kitsu.io/api/edge/streaming-links/101/streamer', - ), - ), - 'media' => - array ( - 'links' => - array ( - 'self' => 'https://kitsu.io/api/edge/streaming-links/101/relationships/media', - 'related' => 'https://kitsu.io/api/edge/streaming-links/101/media', - ), - ), - ), - ), - 100 => - array ( - 'url' => 't', - 'subs' => - array ( - 0 => 'en', - ), - 'dubs' => - array ( - 0 => 'ja', - ), - 'relationships' => - array ( - 'streamer' => - array ( - 'links' => - array ( - 'self' => 'https://kitsu.io/api/edge/streaming-links/100/relationships/streamer', - 'related' => 'https://kitsu.io/api/edge/streaming-links/100/streamer', - ), - ), - 'media' => - array ( - 'links' => - array ( - 'self' => 'https://kitsu.io/api/edge/streaming-links/100/relationships/media', - 'related' => 'https://kitsu.io/api/edge/streaming-links/100/media', - ), - ), - ), - ), - ), - ), - 'show_type' => 'TV', - 'slug' => 'attack-on-titan', - 'status' => 'Finished Airing', - 'streaming_links' => - array ( - 0 => - array ( - 'meta' => - array ( - 'name' => 'Crunchyroll', - 'link' => true, - 'image' => 'streaming-logos/crunchyroll.svg', - ), - 'link' => 'http://www.crunchyroll.com/attack-on-titan', - 'subs' => - array ( - 0 => 'en', - ), - 'dubs' => - array ( - 0 => 'ja', - ), - ), - 1 => - array ( - 'meta' => - array ( - 'name' => 'Funimation', - 'link' => true, - 'image' => 'streaming-logos/funimation.svg', - ), - 'link' => 'http://www.funimation.com/shows/attack-on-titan/videos/episodes', - 'subs' => - array ( - 0 => 'en', - ), - 'dubs' => - array ( - 0 => 'ja', - ), - ), - 2 => - array ( - 'meta' => - array ( - 'name' => 'Hulu', - 'link' => true, - 'image' => 'streaming-logos/hulu.svg', - ), - 'link' => 'http://www.hulu.com/attack-on-titan', - 'subs' => - array ( - 0 => 'en', - ), - 'dubs' => - array ( - 0 => 'ja', - ), - ), - 3 => - array ( - 'meta' => - array ( - 'name' => 'Netflix', - 'link' => false, - 'image' => 'streaming-logos/netflix.svg', - ), - 'link' => 't', - 'subs' => - array ( - 0 => 'en', - ), - 'dubs' => - array ( - 0 => 'ja', - ), - ), - ), - 'synopsis' => 'Several hundred years ago, humans were nearly exterminated by titans. Titans are typically several stories tall, seem to have no intelligence, devour human beings and, worst of all, seem to do it for the pleasure rather than as a food source. A small percentage of humanity survived by enclosing themselves in a city protected by extremely high walls, even taller than the biggest of titans. Flash forward to the present and the city has not seen a titan in over 100 years. Teenage boy Eren and his foster sister Mikasa witness something horrific as the city walls are destroyed by a colossal titan that appears out of thin air. As the smaller titans flood the city, the two kids watch in horror as their mother is eaten alive. Eren vows that he will murder every single titan and take revenge for all of mankind. - -(Source: ANN)', - 'title' => 'Attack on Titan', - 'titles' => - array ( - 0 => 'Attack on Titan', - 1 => 'Shingeki no Kyojin', - 2 => '進撃の巨人', - ), - 'trailer_id' => 'n4Nj6Y_SNYI', - 'url' => 'https://kitsu.io/anime/attack-on-titan', -)); diff --git a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeTransformerTest__testTransform__1.yml b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeTransformerTest__testTransform__1.yml index 3e28a782..62863b54 100644 --- a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeTransformerTest__testTransform__1.yml +++ b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/AnimeTransformerTest__testTransform__1.yml @@ -1,36 +1,90 @@ empty: false -characters: { } -staff: { } +characters: + main: { 38506: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/38506/original.jpg?1483096805', width: null } }, name: 'Armin Arlert', slug: armin-arelet }, 38507: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/38507/original.jpg?1483096805', width: null } }, name: 'Eren Yeager', slug: eren-jager }, 38505: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/38505/original.jpg?1483096805', width: null } }, name: 'Mikasa Ackerman', slug: mikasa-ackerman } } + background: { 95639: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/95639/original.jpg?1533149500', width: null } }, name: Abel, slug: goggles }, 39820: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39820/original.jpg?1483096805', width: null } }, name: 'Anka Rheinberger', slug: anka-rheinberger }, 38511: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/38511/original.jpg?1483096805', width: null } }, name: 'Annie Leonhart', slug: annie-leonhardt }, 39806: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39806/original.jpg?1483096805', width: null } }, name: Balto, slug: balto }, 39816: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39816/original.jpg?1483096805', width: null } }, name: 'Bertolt Hoover', slug: bertolt-hoover }, 72418: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/72418/original.jpg?1485079569', width: null } }, name: 'Boris Feulner', slug: boris-feulner }, 39827: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39827/original.jpg?1483096805', width: null } }, name: 'Carla Yeager', slug: carla-yeager }, 38513: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/38513/original.jpg?1483096805', width: null } }, name: 'Connie Springer', slug: conny-springer }, 77248: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/77248/original.jpg?1485081285', width: null } }, name: 'Darius Baer Varbrun', slug: darius-baer-varbrun }, 52597: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/52597/original.jpg?1483096805', width: null } }, name: 'Darius Zackly', slug: darius-zackly }, 39804: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39804/original.jpg?1483096805', width: null } }, name: Dazz, slug: dazz }, 80627: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/80627/original.jpg?1485082510', width: null } }, name: 'Dennis Eibringer', slug: dennis-eibringer }, 78275: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/78275/original.jpg?1485081646', width: null } }, name: Dieter, slug: dieter }, 52595: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/52595/original.jpg?1483096805', width: null } }, name: 'Dimo Reeves', slug: dimo-reeves }, 52593: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/52593/original.jpg?1483096805', width: null } }, name: 'Dita Ness', slug: dita-ness }, 39818: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39818/original.jpg?1483096805', width: null } }, name: 'Dot Pixis', slug: dot-pixis }, 39815: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39815/original.jpg?1483096805', width: null } }, name: 'Eld Jinn', slug: erd-gin }, 83223: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/83223/original.jpg?1485083597', width: null } }, name: 'Eld''s lover', slug: eld-s-lover }, 39823: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39823/original.jpg?1483096805', width: null } }, name: 'Erwin Smith', slug: erwin-smith }, 39809: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39809/original.jpg?1483096805', width: null } }, name: 'Father Ackerman', slug: father-ackerman }, 88007: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/88007/original.jpg?1485085456', width: null } }, name: 'Father Bozado', slug: father-bozado }, 90705: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/90705/original.jpg?1485086503', width: null } }, name: 'Father Leonhart', slug: father-leonhart }, 91050: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/91050/original.jpg?1485086660', width: null } }, name: 'Father Ral', slug: father-ral }, 39802: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39802/original.jpg?1483096805', width: null } }, name: Franz, slug: franz-06354328-6618-42d4-be45-3fcff7b57e8a }, 39800: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39800/original.jpg?1483096805', width: null } }, name: 'Grandfather Arlert', slug: armin-s-grandfather }, 88409: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/88409/original.jpg?1485085615', width: null } }, name: 'Grandfather Schultz', slug: grandfather-schultz }, 39828: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39828/original.jpg?1483096805', width: null } }, name: 'Grisha Yeager', slug: grisha-yeager }, 39821: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39821/original.jpg?1483096805', width: null } }, name: 'Gunther Schultz', slug: gunter-schulz }, 39807: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39807/original.jpg?1483096805', width: null } }, name: Gustav, slug: gustav-bb1524a1-58c3-484d-9da1-8fa5880a1e69 }, 39831: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39831/original.jpg?1483096805', width: null } }, name: 'Hange Zoë', slug: hange-zoe }, 39803: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39803/original.jpg?1483096805', width: null } }, name: Hannah, slug: hannah }, 39794: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39794/original.jpg?1483096805', width: null } }, name: Hannes, slug: hannes }, 52590: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/52590/original.jpg?1483096805', width: null } }, name: 'Hitch Dreyse', slug: hitch-dreyse }, 39797: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39797/original.jpg?1483096805', width: null } }, name: Hugo, slug: hugo }, 39814: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39814/original.jpg?1483096805', width: null } }, name: 'Ian Dietrich', slug: ian-dietrich }, 39805: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39805/original.jpg?1483096805', width: null } }, name: Instructor, slug: megane-no-kyoukan }, 38510: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/38510/original.jpg?1483096805', width: null } }, name: 'Jean Kirstein', slug: jean-kirschtein }, 72984: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/72984/original.jpg?1485079775', width: null } }, name: Jurgen, slug: jurgen }, 52585: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/52585/original.jpg?1483096805', width: null } }, name: Keiji, slug: keiji }, 39822: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39822/original.jpg?1483096805', width: null } }, name: 'Keith Shardis', slug: keith-shardis }, 39825: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39825/original.jpg?1483096805', width: null } }, name: 'Kitts Verman', slug: kitts-verman }, 38512: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/38512/original.jpg?1483096805', width: null } }, name: 'Krista Lenz', slug: christa-renz }, 39556: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39556/original.jpg?1483096805', width: null } }, name: Levi, slug: levi }, 52596: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/52596/original.jpg?1483096805', width: null } }, name: 'Luke Siss', slug: luke-siss }, 38508: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/38508/original.jpg?1483096805', width: null } }, name: 'Marco Bott', slug: marco-bodt }, 52591: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/52591/original.jpg?1483096805', width: null } }, name: 'Marlo Freudenberg', slug: marlo-freudenberg }, 39829: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39829/original.jpg?1483096805', width: null } }, name: 'Mike Zacharias', slug: mike-zacharias }, 39830: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39830/original.jpg?1483096805', width: null } }, name: 'Millius Zermusky', slug: millius-zermusky }, 39813: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39813/original.jpg?1483096805', width: null } }, name: 'Mina Carolina', slug: mina-carolina }, 39817: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39817/original.jpg?1483096805', width: null } }, name: 'Mitabi Jarnach', slug: mitabi-jarnach }, 52587: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/52587/original.jpg?1483096805', width: null } }, name: 'Moblit Berner', slug: moblit-berner }, 39798: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39798/original.jpg?1483096805', width: null } }, name: Moses, slug: moses }, 39799: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39799/original.jpg?1483096805', width: null } }, name: 'Moses''s Mother', slug: moses-s-mother }, 39810: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39810/original.jpg?1483096805', width: null } }, name: 'Mother Ackerman', slug: mother-ackerman }, 86508: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/86508/original.jpg?1485084880', width: null } }, name: 'Mother Bozado', slug: mother-bozado }, 67384: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/67384/original.jpg?1485077794', width: null } }, name: 'Mother Jinn', slug: mother-jinn }, 72049: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/72049/original.jpg?1485079414', width: null } }, name: 'Mother Schultz', slug: mother-schultz }, 39824: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39824/original.jpg?1483096805', width: null } }, name: 'Nack Tierce', slug: nack-tierce }, 52583: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/52583/original.jpg?1483096805', width: null } }, name: Nanaba, slug: nanaba }, 39795: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39795/original.jpg?1483096805', width: null } }, name: Nick, slug: nick-77245a04-f2c1-40ce-b458-222d708e2fe1 }, 52589: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/52589/original.jpg?1483096805', width: null } }, name: 'Nile Dok', slug: nile-dok }, 52588: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/52588/original.jpg?1483096805', width: null } }, name: 'Oluo Bozado', slug: oluo-bozado }, 92572: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/92572/original.jpg?1485087363', width: null } }, name: Pere, slug: pere }, 39819: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39819/original.jpg?1483096805', width: null } }, name: 'Petra Ral', slug: petra-ral }, 39811: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39811/original.jpg?1483096805', width: null } }, name: 'Reiner Braun', slug: reiner-braun }, 39812: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39812/original.jpg?1483096805', width: null } }, name: 'Riko Brzenska', slug: riko-brzenska }, 39801: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39801/original.jpg?1483096805', width: null } }, name: Samuel, slug: samuel }, 38509: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/38509/original.jpg?1483096805', width: null } }, name: 'Sasha Blouse', slug: sasha-braus }, 39826: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39826/original.jpg?1483096805', width: null } }, name: 'Thomas Wagner', slug: thomas-wagner }, 39808: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39808/original.jpg?1483096805', width: null } }, name: Tom, slug: tom-7c968172-923e-4d22-823a-251d8856bfb5 }, 39796: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/39796/original.jpg?1483096805', width: null } }, name: Ymir, slug: ymir-24b34432-0237-4b22-a800-2e1ac512db5c } } +links: + AniDB: 'https://anidb.net/anime/9541' + Anilist: 'https://anilist.co/anime/16498/' + Kitsu: 'https://kitsu.io/anime/attack-on-titan' + MyAnimeList: 'https://myanimelist.net/anime/16498' +staff: + 'ADR Director': [{ id: '466', name: 'Mike McFarland', image: { original: 'https://media.kitsu.io/people/images/466/original.jpg?1416260915' }, slug: mike-mcfarland }] + 'Animation Director': [{ id: '22734', name: 'Kana Miyai', image: { original: /images/original/missing.png }, slug: kana-miyai }, { id: '22705', name: 'Satoshi Sakai', image: { original: /images/original/missing.png }, slug: satoshi-sakai }] + 'Animation Director, Key Animation': [{ id: '24925', name: 'Yumiko Ishii', image: { original: /images/original/missing.png }, slug: yumiko-ishii }] + 'Assistant Director': [{ id: '21400', name: 'Masashi Koizuka', image: { original: 'https://media.kitsu.io/people/images/21400/original.jpg?1533270885' }, slug: masashi-koizuka }] + 'Background Art': [{ id: '23813', name: 'Jun Okabe', image: { original: /images/original/missing.png }, slug: jun-okabe }] + 'Character Design': [{ id: '3006', name: 'Kyouji Asano', image: { original: 'https://media.kitsu.io/people/images/3006/original.jpg?1533270886' }, slug: kyouji-asano }] + 'Color Design': [{ id: '23292', name: 'Satoshi Hashimoto', image: { original: /images/original/missing.png }, slug: satoshi-hashimoto-d5208a27-4ad0-4f06-b53d-eb95fa7105db }] + 'Color Setting': [{ id: '17186', name: 'Izumi Hirose', image: { original: /images/original/missing.png }, slug: izumi-hirose }] + Director: [{ id: '30444', name: 'Shuuhei Yabuta', image: { original: 'https://media.kitsu.io/people/images/30444/original.jpg?1533274624' }, slug: shuuhei-yabuta }, { id: '3976', name: 'Tetsurou Araki', image: { original: 'https://media.kitsu.io/people/images/3976/original.jpg?1416264991' }, slug: tetsurou-araki }] + 'Director of Photography': [{ id: '22537', name: 'Kazuhiro Yamada', image: { original: /images/original/missing.png }, slug: kazuhiro-yamada }] + Editing: [{ id: '22109', name: 'Aya Hida', image: { original: /images/original/missing.png }, slug: aya-hida }] + 'Episode Director': [{ id: '31841', name: 'Tatsuma Minamikawa', image: { original: 'https://media.kitsu.io/people/images/31841/original.jpg?1533274884' }, slug: tatsuma-minamikawa }] + 'Episode Director, Assistant Director': [{ id: '9220', name: 'Hiroyuki Tanaka', image: { original: 'https://media.kitsu.io/people/images/9220/original.jpg?1416270341' }, slug: hiroyuki-tanaka }] + 'Episode Director, Key Animation': [{ id: '21437', name: 'Yoshiyuki Fujiwara', image: { original: /images/original/missing.png }, slug: yoshiyuki-fujiwara }] + 'Episode Director, Storyboard': [{ id: '1460', name: 'Sayo Yamamoto', image: { original: 'https://media.kitsu.io/people/images/1460/original.jpg?1416262235' }, slug: sayo-yamamoto }, { id: '21476', name: 'Shinpei Ezaki', image: { original: /images/original/missing.png }, slug: shinpei-ezaki }, { id: '3982', name: 'Yuzuru Tachikawa', image: { original: 'https://media.kitsu.io/people/images/3982/original.jpg?1533272323' }, slug: yuzuru-tachikawa }] + 'Episode Director, Storyboard, Animation Director, Key Animation, Background Art': [{ id: '364', name: 'Masashi Ishihama', image: { original: 'https://media.kitsu.io/people/images/364/original.jpg?1416260777' }, slug: masashi-ishihama }] + 'Episode Director, Storyboard, Key Animation': [{ id: '21396', name: 'Daisuke Tokudo', image: { original: 'https://media.kitsu.io/people/images/21396/original.jpg?1533273728' }, slug: daisuke-tokudo }] + 'Executive Producer': [{ id: '435', name: 'Gen Fukunaga', image: { original: 'https://media.kitsu.io/people/images/435/original.jpg?1416260869' }, slug: gen-fukunaga }] + 'Inserted Song Performance': [{ id: '9221', name: 'Aimee Blackschleger', image: { original: 'https://media.kitsu.io/people/images/9221/original.jpg?1416270342' }, slug: aimee-blackschleger }, { id: '9111', name: Cyua, image: { original: 'https://media.kitsu.io/people/images/9111/original.jpg?1416270225' }, slug: cyua }, { id: '8161', name: 'Mika Kobayashi', image: { original: 'https://media.kitsu.io/people/images/8161/original.jpg?1416269452' }, slug: mika-kobayashi }] + 'Key Animation': [{ id: '9499', name: 'Akira Hamaguchi', image: { original: /images/original/missing.png }, slug: akira-hamaguchi }, { id: '33987', name: 'Akira Tabata', image: { original: /images/original/missing.png }, slug: akira-tabata }, { id: '23895', name: 'Arifumi Imai', image: { original: 'https://media.kitsu.io/people/images/23895/original.jpg?1486414118' }, slug: arifumi-imai }, { id: '8034', name: 'Atsushi Ikariya', image: { original: 'https://media.kitsu.io/people/images/8034/original.jpg?1416269308' }, slug: atsushi-ikariya }, { id: '23332', name: 'Hideki Takahashi', image: { original: /images/original/missing.png }, slug: hideki-takahashi-4e5a48eb-bac3-40a3-96ce-e19ebb50a6c3 }, { id: '2097', name: 'Hiromi Katou', image: { original: 'https://media.kitsu.io/people/images/2097/original.jpg?1533271648' }, slug: hiromi-katou }, { id: '254', name: 'Hironori Tanaka', image: { original: /images/original/missing.png }, slug: hironori-tanaka }, { id: '34384', name: 'Kazuhiko Wanibuchi', image: { original: /images/original/missing.png }, slug: kazuhiko-wanibuchi }, { id: '9486', name: 'Kazuhiro Miwa', image: { original: 'https://media.kitsu.io/people/images/9486/original.jpg?1533273224' }, slug: kazuhiro-miwa }, { id: '123', name: 'Kenichi Yoshida', image: { original: 'https://media.kitsu.io/people/images/123/original.jpg?1533271550' }, slug: kenichi-yoshida }, { id: '9490', name: 'Kouichi Arai', image: { original: 'https://media.kitsu.io/people/images/9490/original.jpg?1533272773' }, slug: kouichi-arai }, { id: '22444', name: 'Masami Gotou', image: { original: /images/original/missing.png }, slug: masami-gotou }, { id: '9491', name: 'Misao Abe', image: { original: /images/original/missing.png }, slug: misao-abe }, { id: '24522', name: 'Naoki Kobayashi', image: { original: /images/original/missing.png }, slug: naoki-kobayashi }, { id: '34806', name: 'Orie Tanaka', image: { original: /images/original/missing.png }, slug: orie-tanaka }, { id: '23566', name: 'Senbon Umishima', image: { original: /images/original/missing.png }, slug: senbon-umishima }, { id: '3414', name: 'Shirou Shibata', image: { original: /images/original/missing.png }, slug: shirou-shibata }, { id: '23609', name: 'Takashi Habe', image: { original: /images/original/missing.png }, slug: takashi-habe }, { id: '22605', name: 'Tatsuya Koyanagi', image: { original: 'https://media.kitsu.io/people/images/22605/original.jpg?1533274386' }, slug: tatsuya-koyanagi }, { id: '22417', name: 'Tatsuya Miki', image: { original: /images/original/missing.png }, slug: tatsuya-miki }, { id: '3577', name: 'Toshiyuki Komaru', image: { original: /images/original/missing.png }, slug: toshiyuki-komaru }, { id: '34195', name: 'You Moriyama', image: { original: 'https://media.kitsu.io/people/images/34195/original.jpg?1533275252' }, slug: you-moriyama }] + 'Key Animation, Animation Director, In-Between Animation': [{ id: '14999', name: 'Toshiyuki Satou', image: { original: /images/original/missing.png }, slug: toshiyuki-satou }] + 'Key Animation, Chief Animation Director, Animation Director': [{ id: '22549', name: 'Takaaki Chiba', image: { original: /images/original/missing.png }, slug: takaaki-chiba }] + Music: [{ id: '5377', name: 'Hiroyuki Sawano', image: { original: 'https://media.kitsu.io/people/images/5377/original.jpg?1416266441' }, slug: hiroyuki-sawano }] + 'Original Creator': [{ id: '8719', name: 'Hajime Isayama', image: { original: 'https://media.kitsu.io/people/images/8719/original.jpg?1416270073' }, slug: hajime-isayama }] + Producer: [{ id: '22220', name: 'Jouji Wada', image: { original: 'https://media.kitsu.io/people/images/22220/original.jpg?1533274286' }, slug: jouji-wada }] + Script: [{ id: '19526', name: 'Hiroshi Seko', image: { original: /images/original/missing.png }, slug: hiroshi-seko }, { id: '1216', name: 'John Burgmeier', image: { original: 'https://media.kitsu.io/people/images/1216/original.jpg?1416261888' }, slug: john-burgmeier }, { id: '440', name: 'John Michael Tatum', image: { original: 'https://media.kitsu.io/people/images/440/original.jpg?1416260875' }, slug: john-michael-tatum }, { id: '1461', name: 'Noboru Takagi', image: { original: 'https://media.kitsu.io/people/images/1461/original.jpg?1416262236' }, slug: noboru-takagi }, { id: '7687', name: 'Tyson Rinehart', image: { original: 'https://media.kitsu.io/people/images/7687/original.jpg?1416268918' }, slug: tyson-rinehart }] + 'Script, Series Composition': [{ id: '1918', name: 'Yasuko Kobayashi', image: { original: 'https://media.kitsu.io/people/images/1918/original.jpg?1416262710' }, slug: yasuko-kobayashi }] + 'Sound Director': [{ id: '431', name: 'Masafumi Mima', image: { original: 'https://media.kitsu.io/people/images/431/original.jpg?1416260864' }, slug: masafumi-mima }] + 'Sound Effects': [{ id: '23501', name: 'Naoto Yamatani', image: { original: /images/original/missing.png }, slug: naoto-yamatani }, { id: '5639', name: 'Shizuo Kurahashi', image: { original: /images/original/missing.png }, slug: shizuo-kurahashi }] + Storyboard: [{ id: '21610', name: 'Keiichi Sasajima', image: { original: /images/original/missing.png }, slug: keiichi-sasajima }, { id: '24043', name: 'Minoru Oohara', image: { original: /images/original/missing.png }, slug: minoru-oohara }] + 'Storyboard, Key Animation': [{ id: '21721', name: 'Tomohiro Hirata', image: { original: 'https://media.kitsu.io/people/images/21721/original.jpg?1533274009' }, slug: tomohiro-hirata }] + 'Theme Song Arrangement': [{ id: '34959', name: 'Seiji Kameda', image: { original: 'https://media.kitsu.io/people/images/34959/original.jpg?1533275373' }, slug: seiji-kameda }] + 'Theme Song Lyrics, Inserted Song Performance': [{ id: '17751', name: mpi, image: { original: 'https://media.kitsu.io/people/images/17751/original.jpg?1533270888' }, slug: mpi }] + 'Theme Song Lyrics, Theme Song Composition, Theme Song Arrangement': [{ id: '17299', name: Revo, image: { original: 'https://media.kitsu.io/people/images/17299/original.jpg?1533270886' }, slug: revo }] + 'Theme Song Performance': [{ id: '18196', name: 'Cinema Staff', image: { original: 'https://media.kitsu.io/people/images/18196/original.jpg?1533273064' }, slug: cinema-staff }, { id: '8718', name: 'Linked Horizon', image: { original: 'https://media.kitsu.io/people/images/8718/original.jpg?1416270072' }, slug: linked-horizon }, { id: '6847', name: 'Yoko Hikasa', image: { original: 'https://media.kitsu.io/people/images/6847/original.jpg?1416268029' }, slug: yoko-hikasa }] age_rating: R age_rating_guide: 'Violence, Profanity' -cover_image: 'https://media.kitsu.io/anime/poster_images/7442/small.jpg?1418580054' +cover_image: 'https://media.kitsu.io/anime/poster_images/7442/small.jpg?1597698856' episode_count: 25 -episode_length: 24 -genres: { } -id: 32344 -included: - categories: { 23: { name: 'Super Power', slug: super-power, description: null }, 11: { name: Fantasy, slug: fantasy, description: '' }, 4: { name: Drama, slug: drama, description: '' }, 1: { name: Action, slug: action, description: '' } } - mappings: { 5686: { externalSite: myanimelist/anime, externalId: '16498', relationships: { media: { links: { self: 'https://kitsu.io/api/edge/mappings/5686/relationships/media', related: 'https://kitsu.io/api/edge/mappings/5686/media' } } } }, 14153: { externalSite: thetvdb/series, externalId: '267440', relationships: { media: { links: { self: 'https://kitsu.io/api/edge/mappings/14153/relationships/media', related: 'https://kitsu.io/api/edge/mappings/14153/media' } } } }, 15073: { externalSite: thetvdb/season, externalId: '514060', relationships: { media: { links: { self: 'https://kitsu.io/api/edge/mappings/15073/relationships/media', related: 'https://kitsu.io/api/edge/mappings/15073/media' } } } } } - streamingLinks: { 103: { url: 'http://www.crunchyroll.com/attack-on-titan', subs: [en], dubs: [ja], relationships: { streamer: { links: { self: 'https://kitsu.io/api/edge/streaming-links/103/relationships/streamer', related: 'https://kitsu.io/api/edge/streaming-links/103/streamer' } }, media: { links: { self: 'https://kitsu.io/api/edge/streaming-links/103/relationships/media', related: 'https://kitsu.io/api/edge/streaming-links/103/media' } } } }, 102: { url: 'http://www.hulu.com/attack-on-titan', subs: [en], dubs: [ja], relationships: { streamer: { links: { self: 'https://kitsu.io/api/edge/streaming-links/102/relationships/streamer', related: 'https://kitsu.io/api/edge/streaming-links/102/streamer' } }, media: { links: { self: 'https://kitsu.io/api/edge/streaming-links/102/relationships/media', related: 'https://kitsu.io/api/edge/streaming-links/102/media' } } } }, 101: { url: 'http://www.funimation.com/shows/attack-on-titan/videos/episodes', subs: [en], dubs: [ja], relationships: { streamer: { links: { self: 'https://kitsu.io/api/edge/streaming-links/101/relationships/streamer', related: 'https://kitsu.io/api/edge/streaming-links/101/streamer' } }, media: { links: { self: 'https://kitsu.io/api/edge/streaming-links/101/relationships/media', related: 'https://kitsu.io/api/edge/streaming-links/101/media' } } } }, 100: { url: t, subs: [en], dubs: [ja], relationships: { streamer: { links: { self: 'https://kitsu.io/api/edge/streaming-links/100/relationships/streamer', related: 'https://kitsu.io/api/edge/streaming-links/100/streamer' } }, media: { links: { self: 'https://kitsu.io/api/edge/streaming-links/100/relationships/media', related: 'https://kitsu.io/api/edge/streaming-links/100/media' } } } } } +episode_length: 1440 +genres: + - Action + - Adventure + - 'Alternative Past' + - Angst + - Drama + - Fantasy + - Horror + - Military + - 'Post Apocalypse' + - Shounen + - 'Super Power' + - Violence +id: '7442' show_type: TV slug: attack-on-titan status: 'Finished Airing' streaming_links: - { meta: { name: Crunchyroll, link: true, image: streaming-logos/crunchyroll.svg }, link: 'http://www.crunchyroll.com/attack-on-titan', subs: [en], dubs: [ja] } - - { meta: { name: Funimation, link: true, image: streaming-logos/funimation.svg }, link: 'http://www.funimation.com/shows/attack-on-titan/videos/episodes', subs: [en], dubs: [ja] } - - { meta: { name: Hulu, link: true, image: streaming-logos/hulu.svg }, link: 'http://www.hulu.com/attack-on-titan', subs: [en], dubs: [ja] } - - { meta: { name: Netflix, link: false, image: streaming-logos/netflix.svg }, link: t, subs: [en], dubs: [ja] } + - { meta: { name: Funimation, link: true, image: streaming-logos/funimation.svg }, link: 'https://www.funimation.com/shows/attack-on-titan/', subs: [en], dubs: [ja] } + - { meta: { name: Hulu, link: true, image: streaming-logos/hulu.svg }, link: 'https://www.hulu.com/attack-on-titan', subs: [en], dubs: [ja] } + - { meta: { name: Netflix, link: false, image: streaming-logos/netflix.svg }, link: 'https://www.netflix.com/title/70299043', subs: [en], dubs: [ja] } + - { meta: { name: TubiTV, link: true, image: streaming-logos/tubitv.svg }, link: 'https://tubitv.com/series/2318', subs: [en], dubs: [ja] } synopsis: | - Several hundred years ago, humans were nearly exterminated by titans. Titans are typically several stories tall, seem to have no intelligence, devour human beings and, worst of all, seem to do it for the pleasure rather than as a food source. A small percentage of humanity survived by enclosing themselves in a city protected by extremely high walls, even taller than the biggest of titans. Flash forward to the present and the city has not seen a titan in over 100 years. Teenage boy Eren and his foster sister Mikasa witness something horrific as the city walls are destroyed by a colossal titan that appears out of thin air. As the smaller titans flood the city, the two kids watch in horror as their mother is eaten alive. Eren vows that he will murder every single titan and take revenge for all of mankind. + Centuries ago, mankind was slaughtered to near extinction by monstrous humanoid creatures called titans, forcing humans to hide in fear behind enormous concentric walls. What makes these giants truly terrifying is that their taste for human flesh is not born out of hunger but what appears to be out of pleasure. To ensure their survival, the remnants of humanity began living within defensive barriers, resulting in one hundred years without a single titan encounter. However, that fragile calm is soon shattered when a colossal titan manages to breach the supposedly impregnable outer wall, reigniting the fight for survival against the man-eating abominations. - (Source: ANN) + After witnessing a horrific personal loss at the hands of the invading creatures, Eren Yeager dedicates his life to their eradication by enlisting into the Survey Corps, an elite military unit that combats the merciless humanoids outside the protection of the walls. Based on Hajime Isayama's award-winning manga, Shingeki no Kyojin follows Eren, along with his adopted sister Mikasa Ackerman and his childhood friend Armin Arlert, as they join the brutal war against the titans and race to discover a way of defeating them before the last walls are breached. + + (Source: MAL Rewrite) title: 'Attack on Titan' titles: - - 'Attack on Titan' + 2: 'Shingeki no Kyojin' + 4: 進撃の巨人 +titles_more: + - AoT - 'Shingeki no Kyojin' - 進撃の巨人 -titles_more: - 2: 'Shingeki no Kyojin' - 3: 進撃の巨人 -trailer_id: n4Nj6Y_SNYI +trailer_id: LHtdKWJdif4 +total_length: 36000 url: 'https://kitsu.io/anime/attack-on-titan' diff --git a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/MangaListTransformerTest__testTransform__1.yml b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/MangaListTransformerTest__testTransform__1.yml index 7e670c63..e8d67ce4 100644 --- a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/MangaListTransformerTest__testTransform__1.yml +++ b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/MangaListTransformerTest__testTransform__1.yml @@ -1,60 +1,24 @@ - empty: false - id: '15084773' - mal_id: '26769' - chapters: { read: 67, total: '-' } + id: '15288185' + mal_id: '28091' + chapters: { read: 94, total: '-' } volumes: { read: '-', total: '-' } - manga: { empty: false, genres: [Comedy, Romance, School, 'Slice of Life', Thriller], id: '20286', image: 'https://media.kitsu.io/manga/poster_images/20286/small.jpg?1434293999', slug: bokura-wa-minna-kawaisou, title: 'Bokura wa Minna Kawaisou', titles: { }, type: Manga, url: 'https://kitsu.io/manga/bokura-wa-minna-kawaisou' } - reading_status: current - notes: '' - rereading: false - reread: 0 - user_rating: 9 -- - empty: false - id: '15085607' - mal_id: '16' - chapters: { read: 17, total: 120 } - volumes: { read: '-', total: 14 } - manga: { empty: false, genres: [Comedy, Ecchi, Harem, Romance, Sports], id: '47', image: 'https://media.kitsu.io/manga/poster_images/47/small.jpg?1434249493', slug: love-hina, title: 'Love Hina', titles: { }, type: Manga, url: 'https://kitsu.io/manga/love-hina' } - reading_status: current - notes: '' - rereading: false - reread: 0 - user_rating: 7 -- - empty: false - id: '15084529' - mal_id: '35003' - chapters: { read: 16, total: '-' } - volumes: { read: '-', total: '-' } - manga: { empty: false, genres: [Comedy, Ecchi, 'Gender Bender', Romance, School, Sports, Supernatural], id: '11777', image: 'https://media.kitsu.io/manga/poster_images/11777/small.jpg?1438784325', slug: yamada-kun-to-7-nin-no-majo, title: 'Yamada-kun to 7-nin no Majo', titles: ['Yamada-kun and the Seven Witches'], type: Manga, url: 'https://kitsu.io/manga/yamada-kun-to-7-nin-no-majo' } - reading_status: current - notes: '' - rereading: false - reread: 0 - user_rating: 9 -- - empty: false - id: '15312827' - mal_id: '78523' - chapters: { read: 68, total: '-' } - volumes: { read: '-', total: '-' } - manga: { empty: false, genres: [Romance, School, 'Slice of Life'], id: '27175', image: 'https://media.kitsu.io/manga/poster_images/27175/small.jpg?1464379411', slug: relife, title: ReLIFE, titles: { }, type: Manga, url: 'https://kitsu.io/manga/relife' } - reading_status: current - notes: '' - rereading: false - reread: 0 - user_rating: '-' -- - empty: false - id: '15084769' - mal_id: '60815' - chapters: { read: 43, total: '-' } - volumes: { read: '-', total: '-' } - manga: { empty: false, genres: [Comedy, School, 'Slice of Life'], id: '25491', image: 'https://media.kitsu.io/manga/poster_images/25491/small.jpg?1434305043', slug: joshikausei, title: Joshikausei, titles: { }, type: Manga, url: 'https://kitsu.io/manga/joshikausei' } + manga: { empty: false, genres: { }, id: '21733', image: 'https://media.kitsu.io/manga/poster_images/21733/small.jpg?1496845097', slug: tonari-no-seki-kun, title: 'Tonari no Seki-kun', titles: ['My Neighbour Seki', となりの関くん], type: Manga, url: 'https://kitsu.io/manga/tonari-no-seki-kun' } reading_status: current notes: '' rereading: false reread: 0 user_rating: 8 +- + empty: false + id: '15084769' + mal_id: '60815' + chapters: { read: 87, total: '-' } + volumes: { read: '-', total: '-' } + manga: { empty: false, genres: { }, id: '25491', image: 'https://media.kitsu.io/manga/poster_images/25491/small.jpg?1499026452', slug: joshikausei, title: Joshikausei, titles: [女子かう生], type: Manga, url: 'https://kitsu.io/manga/joshikausei' } + reading_status: current + notes: 'Wordless, and it works.' + rereading: false + reread: 0 + user_rating: 8 diff --git a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/MangaTransformerTest__testTransform__1.php b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/MangaTransformerTest__testTransform__1.php deleted file mode 100644 index fc87bc9f..00000000 --- a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/MangaTransformerTest__testTransform__1.php +++ /dev/null @@ -1,86 +0,0 @@ - - array ( - ), - 'chapter_count' => '-', - 'cover_image' => 'https://media.kitsu.io/manga/poster_images/20286/small.jpg?1434293999', - 'genres' => - array ( - ), - 'id' => '20286', - 'included' => - array ( - 'genres' => - array ( - 3 => - array ( - 'attributes' => - array ( - 'name' => 'Comedy', - 'slug' => 'comedy', - 'description' => NULL, - ), - ), - 24 => - array ( - 'attributes' => - array ( - 'name' => 'School', - 'slug' => 'school', - 'description' => NULL, - ), - ), - 16 => - array ( - 'attributes' => - array ( - 'name' => 'Slice of Life', - 'slug' => 'slice-of-life', - 'description' => '', - ), - ), - 14 => - array ( - 'attributes' => - array ( - 'name' => 'Romance', - 'slug' => 'romance', - 'description' => '', - ), - ), - 18 => - array ( - 'attributes' => - array ( - 'name' => 'Thriller', - 'slug' => 'thriller', - 'description' => NULL, - ), - ), - ), - 'mappings' => - array ( - 48014 => - array ( - 'attributes' => - array ( - 'externalSite' => 'myanimelist/manga', - 'externalId' => '26769', - ), - ), - ), - ), - 'manga_type' => 'manga', - 'staff' => - array ( - ), - 'synopsis' => 'Usa, a high-school student aspiring to begin a bachelor lifestyle, moves into a new apartment only to discover that he not only shares a room with a perverted roommate that has an obsession for underaged girls, but also that another girl, Ritsu, a love-at-first-sight, is living in the same building as well! -(Source: Kirei Cake)', - 'title' => 'Bokura wa Minna Kawaisou', - 'titles' => - array ( - 0 => NULL, - ), - 'url' => 'https://kitsu.io/manga/bokura-wa-minna-kawaisou', - 'volume_count' => '-', -)); diff --git a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/MangaTransformerTest__testTransform__1.yml b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/MangaTransformerTest__testTransform__1.yml index 7ba6eb79..d30e7d36 100644 --- a/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/MangaTransformerTest__testTransform__1.yml +++ b/tests/AnimeClient/API/Kitsu/Transformer/__snapshots__/MangaTransformerTest__testTransform__1.yml @@ -1,19 +1,32 @@ empty: false -characters: { } -chapter_count: '-' +age_rating: PG +age_rating_guide: '' +characters: + main: { 40541: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/40541/original.jpg?1483096805', width: null } }, name: 'Kazunari Usa', slug: kazunari-usa }, 40540: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/40540/original.jpg?1483096805', width: null } }, name: 'Ritsu Kawai', slug: ritsu-kawai } } + background: { 62591: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/62591/original.jpg?1485073100', width: null } }, name: Chinatsu, slug: chinatsu }, 72839: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/72839/original.jpg?1485079724', width: null } }, name: Hayashi, slug: hayashi-ec3a2705-5d5c-493c-b172-bbee2d04b5b9 }, 78362: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/78362/original.jpg?1485081676', width: null } }, name: Houjou, slug: houjou }, 90353: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/90353/original.jpg?1485086356', width: null } }, name: Kurokawa, slug: kurokawa-a493ddf6-0f02-4abf-8b18-ab6ae2198b6e }, 77996: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/77996/original.jpg?1485081552', width: null } }, name: Maemura, slug: maemura }, 55132: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/55132/original.jpg?1483096805', width: null } }, name: 'Mayumi Nishikino', slug: mayumi-nishikino }, 71479: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/71479/original.jpg?1485079211', width: null } }, name: 'Miharu Tsuneda', slug: miharu-tsuneda }, 55134: { image: { original: { height: null, name: original, url: '/images/original/missing.png?1483096805', width: null } }, name: 'Mother Usa', slug: mother-usa }, 55135: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/55135/original.jpg?1483096805', width: null } }, name: 'Sayaka Watanabe', slug: sayaka-watanabe }, 95032: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/95032/original.jpg?1485088329', width: null } }, name: Shirosaki, slug: shirosaki-2ed2e15c-9cee-4756-92f1-027c4820e224 }, 55131: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/55131/original.jpg?1483096805', width: null } }, name: 'Sumiko Kawai', slug: sumiko-kawai }, 74335: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/74335/original.jpg?1485080245', width: null } }, name: 'Tae Shinohara', slug: tae-shinohara }, 55133: { image: { original: { height: null, name: original, url: 'https://media.kitsu.io/characters/images/55133/original.jpg?1483096805', width: null } }, name: Tagami, slug: tagami }, 83463: { image: { original: { height: null, name: original, url: /images/original/missing.png, width: null } }, name: 'Yoko Mabuchi', slug: yoko-mabuchi } } +chapter_count: 90 cover_image: 'https://media.kitsu.io/manga/poster_images/20286/small.jpg?1434293999' -genres: { } +genres: + - Comedy + - Romance + - 'School Life' + - 'Slice of Life' +links: + Anilist: 'https://anilist.co/anime/56769/' + Kitsu: 'https://kitsu.io/manga/bokura-wa-minna-kawaisou' + MyAnimeList: 'https://myanimelist.net/manga/26769' id: '20286' -included: - genres: { 3: { attributes: { name: Comedy, slug: comedy, description: null } }, 24: { attributes: { name: School, slug: school, description: null } }, 16: { attributes: { name: 'Slice of Life', slug: slice-of-life, description: '' } }, 14: { attributes: { name: Romance, slug: romance, description: '' } }, 18: { attributes: { name: Thriller, slug: thriller, description: null } } } - mappings: { 48014: { attributes: { externalSite: myanimelist/manga, externalId: '26769' } } } -manga_type: manga -staff: { } -synopsis: | - Usa, a high-school student aspiring to begin a bachelor lifestyle, moves into a new apartment only to discover that he not only shares a room with a perverted roommate that has an obsession for underaged girls, but also that another girl, Ritsu, a love-at-first-sight, is living in the same building as well! - (Source: Kirei Cake) -title: 'Bokura wa Minna Kawaisou' +manga_type: MANGA +status: Completed +staff: + 'Story & Art': [{ id: '8712', slug: ruri-miyahara, name: 'Ruri Miyahara', image: { original: 'https://media.kitsu.io/people/images/8712/original.jpg?1533271952' } }] +synopsis: "Usa, a high-school student aspiring to begin a bachelor lifestyle, moves into a new apartment only to discover that he not only shares a room with a perverted roommate that has an obsession for underaged girls, but also that another girl, Ritsu, a love-at-first-sight, is living in the same building as well!\r\n(Source: Kirei Cake)" +title: 'Bokura wa Minna Kawai-sou' titles: - - null + 1: 'The Kawai Complex Guide to Manors and Hostel' + 4: 僕らはみんな河合荘 +titles_more: + - 'The Kawai Complex Guide to Manors and Hostel' + - 僕らはみんな河合荘 url: 'https://kitsu.io/manga/bokura-wa-minna-kawaisou' -volume_count: '-' +volume_count: 10 diff --git a/tests/AnimeClient/test_data/Kitsu/animeAfterTransform.json b/tests/AnimeClient/test_data/Kitsu/animeAfterTransform.json deleted file mode 100644 index 32c29e95..00000000 --- a/tests/AnimeClient/test_data/Kitsu/animeAfterTransform.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "title": "Attack on Titan", - "titles": ["Attack on Titan", "Shingeki no Kyojin", "\u9032\u6483\u306e\u5de8\u4eba"], - "status": "Finished Airing", - "cover_image": "https:\/\/media.kitsu.io\/anime\/poster_images\/7442\/small.jpg?1418580054", - "show_type": "TV", - "episode_count": 25, - "episode_length": 24, - "synopsis": "Several hundred years ago, humans were nearly exterminated by titans. Titans are typically several stories tall, seem to have no intelligence, devour human beings and, worst of all, seem to do it for the pleasure rather than as a food source. A small percentage of humanity survived by enclosing themselves in a city protected by extremely high walls, even taller than the biggest of titans. Flash forward to the present and the city has not seen a titan in over 100 years. Teenage boy Eren and his foster sister Mikasa witness something horrific as the city walls are destroyed by a colossal titan that appears out of thin air. As the smaller titans flood the city, the two kids watch in horror as their mother is eaten alive. Eren vows that he will murder every single titan and take revenge for all of mankind.\n\n(Source: ANN)", - "age_rating": "R", - "age_rating_guide": "Violence, Profanity", - "url": "https:\/\/kitsu.io\/anime\/attack-on-titan", - "genres": ["Action", "Drama", "Fantasy", "Super Power"], - "streaming_links": [{ - "meta": { - "name": "Crunchyroll", - "link": true, - "image": "streaming-logos\/crunchyroll.svg" - }, - "link": "http:\/\/www.crunchyroll.com\/attack-on-titan", - "subs": ["en"], - "dubs": ["ja"] - }, { - "meta": { - "name": "Hulu", - "link": true, - "image": "streaming-logos\/hulu.svg" - }, - "link": "http:\/\/www.hulu.com\/attack-on-titan", - "subs": ["en"], - "dubs": ["ja"] - }, { - "meta": { - "name": "Funimation", - "link": true, - "image": "streaming-logos\/funimation.svg" - }, - "link": "http:\/\/www.funimation.com\/shows\/attack-on-titan\/videos\/episodes", - "subs": ["en"], - "dubs": ["ja"] - }, { - "meta": { - "name": "Netflix", - "link": false, - "image": "streaming-logos\/netflix.svg" - }, - "link": "t", - "subs": ["en"], - "dubs": ["ja"] - }], - "slug": "attack-on-titan" -} \ No newline at end of file diff --git a/tests/AnimeClient/test_data/Kitsu/animeBeforeTransform.json b/tests/AnimeClient/test_data/Kitsu/animeBeforeTransform.json index 4e240b34..fd40fdcc 100644 --- a/tests/AnimeClient/test_data/Kitsu/animeBeforeTransform.json +++ b/tests/AnimeClient/test_data/Kitsu/animeBeforeTransform.json @@ -1,292 +1,3754 @@ { - "id": 32344, - "slug": "attack-on-titan", - "synopsis": "Several hundred years ago, humans were nearly exterminated by titans. Titans are typically several stories tall, seem to have no intelligence, devour human beings and, worst of all, seem to do it for the pleasure rather than as a food source. A small percentage of humanity survived by enclosing themselves in a city protected by extremely high walls, even taller than the biggest of titans. Flash forward to the present and the city has not seen a titan in over 100 years. Teenage boy Eren and his foster sister Mikasa witness something horrific as the city walls are destroyed by a colossal titan that appears out of thin air. As the smaller titans flood the city, the two kids watch in horror as their mother is eaten alive. Eren vows that he will murder every single titan and take revenge for all of mankind.\n\n(Source: ANN)", - "coverImageTopOffset": 263, - "titles": { - "en": "Attack on Titan", - "en_jp": "Shingeki no Kyojin", - "ja_jp": "\u9032\u6483\u306e\u5de8\u4eba" - }, - "canonicalTitle": "Attack on Titan", - "abbreviatedTitles": null, - "averageRating": 4.2678183033371, - "ratingFrequencies": { - "0.0": "3", - "0.5": "126", - "1.0": "292", - "1.5": "172", - "2.0": "394", - "2.5": "817", - "3.0": "2423", - "3.5": "3210", - "4.0": "5871", - "4.5": "6159", - "5.0": "13117", - "nil": "18571", - "0.479": "-1", - "4.658": "-3", - "4.726": "-1", - "4.932": "-1", - "2.05479452054794": "1", - "2.53424657534247": "1", - "4.10958904109589": "1", - "4.65753424657534": "3", - "4.72602739726027": "3", - "4.86301369863014": "1", - "4.93150684931507": "2", - "0.273972602739726": "1", - "0.410958904109589": "2", - "0.479452054794521": "1", - "0.684931506849315": "1" - }, - "startDate": "2013-04-07", - "endDate": "2013-09-28", - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/7442\/tiny.jpg?1418580054", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/7442\/small.jpg?1418580054", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/7442\/medium.jpg?1418580054", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/7442\/large.jpg?1418580054", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/7442\/original.jpg?1418580054" - }, - "coverImage": { - "small": "https:\/\/media.kitsu.io\/anime\/cover_images\/7442\/small.jpg?1471880659", - "large": "https:\/\/media.kitsu.io\/anime\/cover_images\/7442\/large.jpg?1471880659", - "original": "https:\/\/media.kitsu.io\/anime\/cover_images\/7442\/original.png?1471880659" - }, - "episodeCount": 25, - "episodeLength": 24, - "subtype": "TV", - "youtubeVideoId": "n4Nj6Y_SNYI", - "ageRating": "R", - "ageRatingGuide": "Violence, Profanity", - "showType": "TV", - "nsfw": false, - "included": [ - { - "id": "23", - "type": "categories", - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/categories\/23" - }, - "attributes": { - "name": "Super Power", - "slug": "super-power", - "description": null - } - }, - { - "id": "11", - "type": "categories", - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/categories\/11" - }, - "attributes": { - "name": "Fantasy", - "slug": "fantasy", - "description": "" - } - }, - { - "id": "4", - "type": "categories", - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/categories\/4" - }, - "attributes": { - "name": "Drama", - "slug": "drama", - "description": "" - } - }, - { - "id": "1", - "type": "categories", - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/categories\/1" - }, - "attributes": { - "name": "Action", - "slug": "action", - "description": "" - } - }, - { - "id": "5686", - "type": "mappings", - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/mappings\/5686" - }, - "attributes": { - "externalSite": "myanimelist\/anime", - "externalId": "16498" - }, - "relationships": { - "media": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/mappings\/5686\/relationships\/media", - "related": "https:\/\/kitsu.io\/api\/edge\/mappings\/5686\/media" - } - } - } - }, - { - "id": "14153", - "type": "mappings", - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/mappings\/14153" - }, - "attributes": { - "externalSite": "thetvdb\/series", - "externalId": "267440" - }, - "relationships": { - "media": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/mappings\/14153\/relationships\/media", - "related": "https:\/\/kitsu.io\/api\/edge\/mappings\/14153\/media" - } - } - } - }, - { - "id": "15073", - "type": "mappings", - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/mappings\/15073" - }, - "attributes": { - "externalSite": "thetvdb\/season", - "externalId": "514060" - }, - "relationships": { - "media": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/mappings\/15073\/relationships\/media", - "related": "https:\/\/kitsu.io\/api\/edge\/mappings\/15073\/media" - } - } - } - }, - { - "id": "103", - "type": "streamingLinks", - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/103" - }, - "attributes": { - "url": "http:\/\/www.crunchyroll.com\/attack-on-titan", - "subs": [ - "en" - ], - "dubs": [ - "ja" - ] - }, - "relationships": { - "streamer": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/103\/relationships\/streamer", - "related": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/103\/streamer" - } - }, - "media": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/103\/relationships\/media", - "related": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/103\/media" - } - } - } - }, - { - "id": "102", - "type": "streamingLinks", - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/102" - }, - "attributes": { - "url": "http:\/\/www.hulu.com\/attack-on-titan", - "subs": [ - "en" - ], - "dubs": [ - "ja" - ] - }, - "relationships": { - "streamer": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/102\/relationships\/streamer", - "related": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/102\/streamer" - } - }, - "media": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/102\/relationships\/media", - "related": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/102\/media" - } - } - } - }, - { - "id": "101", - "type": "streamingLinks", - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/101" - }, - "attributes": { - "url": "http:\/\/www.funimation.com\/shows\/attack-on-titan\/videos\/episodes", - "subs": [ - "en" - ], - "dubs": [ - "ja" - ] - }, - "relationships": { - "streamer": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/101\/relationships\/streamer", - "related": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/101\/streamer" - } - }, - "media": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/101\/relationships\/media", - "related": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/101\/media" - } - } - } - }, - { - "id": "100", - "type": "streamingLinks", - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/100" - }, - "attributes": { - "url": "t", - "subs": [ - "en" - ], - "dubs": [ - "ja" - ] - }, - "relationships": { - "streamer": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/100\/relationships\/streamer", - "related": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/100\/streamer" - } - }, - "media": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/100\/relationships\/media", - "related": "https:\/\/kitsu.io\/api\/edge\/streaming-links\/100\/media" - } - } - } - } - ] + "data": { + "findAnimeBySlug": { + "id": "7442", + "ageRating": "R", + "ageRatingGuide": "Violence, Profanity", + "posterImage": { + "original": { + "height": 1270, + "name": "original", + "url": "https://media.kitsu.io/anime/poster_images/7442/original.jpg?1597698856", + "width": 920 + }, + "views": [ + { + "height": 156, + "name": "tiny", + "url": "https://media.kitsu.io/anime/poster_images/7442/tiny.jpg?1597698856", + "width": 110 + }, + { + "height": 402, + "name": "small", + "url": "https://media.kitsu.io/anime/poster_images/7442/small.jpg?1597698856", + "width": 284 + }, + { + "height": 554, + "name": "medium", + "url": "https://media.kitsu.io/anime/poster_images/7442/medium.jpg?1597698856", + "width": 390 + }, + { + "height": 780, + "name": "large", + "url": "https://media.kitsu.io/anime/poster_images/7442/large.jpg?1597698856", + "width": 550 + } + ] + }, + "categories": { + "nodes": [ + { + "title": { + "en": "Shounen" + } + }, + { + "title": { + "en": "Post Apocalypse" + } + }, + { + "title": { + "en": "Violence" + } + }, + { + "title": { + "en": "Action" + } + }, + { + "title": { + "en": "Adventure" + } + }, + { + "title": { + "en": "Fantasy" + } + }, + { + "title": { + "en": "Alternative Past" + } + }, + { + "title": { + "en": "Angst" + } + }, + { + "title": { + "en": "Horror" + } + }, + { + "title": { + "en": "Drama" + } + }, + { + "title": { + "en": "Military" + } + }, + { + "title": { + "en": "Super Power" + } + } + ] + }, + "characters": { + "nodes": [ + { + "character": { + "id": "38506", + "names": { + "alternatives": [], + "canonical": "Armin Arlert", + "localized": { + "en": "Armin Arlert", + "ja_jp": "アルミン・アルレルト" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/38506/original.jpg?1483096805", + "width": null + } + }, + "slug": "armin-arelet" + }, + "role": "MAIN" + }, + { + "character": { + "id": "38507", + "names": { + "alternatives": [], + "canonical": "Eren Yeager", + "localized": { + "en": "Eren Yeager", + "ja_jp": "エレン・イェーガー" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/38507/original.jpg?1483096805", + "width": null + } + }, + "slug": "eren-jager" + }, + "role": "MAIN" + }, + { + "character": { + "id": "39810", + "names": { + "alternatives": [], + "canonical": "Mother Ackerman", + "localized": { + "en": "Mother Ackerman", + "ja_jp": "ミカサの母" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39810/original.jpg?1483096805", + "width": null + } + }, + "slug": "mother-ackerman" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39809", + "names": { + "alternatives": [], + "canonical": "Father Ackerman", + "localized": { + "en": "Father Ackerman", + "ja_jp": "ミカサの父" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39809/original.jpg?1483096805", + "width": null + } + }, + "slug": "father-ackerman" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39800", + "names": { + "alternatives": [], + "canonical": "Grandfather Arlert", + "localized": { + "en": "Grandfather Arlert", + "ja_jp": "アルミンの祖父" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39800/original.jpg?1483096805", + "width": null + } + }, + "slug": "armin-s-grandfather" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39806", + "names": { + "alternatives": [ + "Barto", + "Wald" + ], + "canonical": "Balto", + "localized": { + "en": "Balto", + "ja_jp": "バルト" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39806/original.jpg?1483096805", + "width": null + } + }, + "slug": "balto" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "52587", + "names": { + "alternatives": [], + "canonical": "Moblit Berner", + "localized": { + "en": "Moblit Berner", + "ja_jp": "モブリット・バーナー" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/52587/original.jpg?1483096805", + "width": null + } + }, + "slug": "moblit-berner" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "38509", + "names": { + "alternatives": [ + "Potato Girl" + ], + "canonical": "Sasha Blouse", + "localized": { + "en": "Sasha Blouse", + "ja_jp": "サシャ・ブラウス" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/38509/original.jpg?1483096805", + "width": null + } + }, + "slug": "sasha-braus" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "38508", + "names": { + "alternatives": [], + "canonical": "Marco Bott", + "localized": { + "en": "Marco Bott", + "ja_jp": "マルコ・ボット" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/38508/original.jpg?1483096805", + "width": null + } + }, + "slug": "marco-bodt" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "86508", + "names": { + "alternatives": [], + "canonical": "Mother Bozado", + "localized": { + "en": "Mother Bozado", + "ja_jp": "オルオ母" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/86508/original.jpg?1485084880", + "width": null + } + }, + "slug": "mother-bozado" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "88007", + "names": { + "alternatives": [], + "canonical": "Father Bozado", + "localized": { + "en": "Father Bozado", + "ja_jp": "オルオ父" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/88007/original.jpg?1485085456", + "width": null + } + }, + "slug": "father-bozado" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "52588", + "names": { + "alternatives": [], + "canonical": "Oluo Bozado", + "localized": { + "en": "Oluo Bozado", + "ja_jp": "オルオ・ボザド" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/52588/original.jpg?1483096805", + "width": null + } + }, + "slug": "oluo-bozado" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39811", + "names": { + "alternatives": [], + "canonical": "Reiner Braun", + "localized": { + "en": "Reiner Braun", + "ja_jp": "ライナー・ブラウン" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39811/original.jpg?1483096805", + "width": null + } + }, + "slug": "reiner-braun" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39812", + "names": { + "alternatives": [], + "canonical": "Riko Brzenska", + "localized": { + "en": "Riko Brzenska", + "ja_jp": "リコ・ブレツェンスカ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39812/original.jpg?1483096805", + "width": null + } + }, + "slug": "riko-brzenska" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39813", + "names": { + "alternatives": [], + "canonical": "Mina Carolina", + "localized": { + "en": "Mina Carolina", + "ja_jp": "ミーナ・カロライナ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39813/original.jpg?1483096805", + "width": null + } + }, + "slug": "mina-carolina" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39804", + "names": { + "alternatives": [], + "canonical": "Dazz", + "localized": { + "en": "Dazz", + "ja_jp": "ダズ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39804/original.jpg?1483096805", + "width": null + } + }, + "slug": "dazz" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "78275", + "names": { + "alternatives": [], + "canonical": "Dieter", + "localized": { + "en": "Dieter", + "ja_jp": "ディター" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/78275/original.jpg?1485081646", + "width": null + } + }, + "slug": "dieter" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39814", + "names": { + "alternatives": [], + "canonical": "Ian Dietrich", + "localized": { + "en": "Ian Dietrich", + "ja_jp": "イアン・ディートリッヒ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39814/original.jpg?1483096805", + "width": null + } + }, + "slug": "ian-dietrich" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "52589", + "names": { + "alternatives": [], + "canonical": "Nile Dok", + "localized": { + "en": "Nile Dok", + "ja_jp": "ナイル・ドーク" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/52589/original.jpg?1483096805", + "width": null + } + }, + "slug": "nile-dok" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "52590", + "names": { + "alternatives": [], + "canonical": "Hitch Dreyse", + "localized": { + "en": "Hitch Dreyse", + "ja_jp": "ヒッチ・ドリス" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/52590/original.jpg?1483096805", + "width": null + } + }, + "slug": "hitch-dreyse" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "80627", + "names": { + "alternatives": [], + "canonical": "Dennis Eibringer", + "localized": { + "en": "Dennis Eibringer", + "ja_jp": "デニス・アイブリンガ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/80627/original.jpg?1485082510", + "width": null + } + }, + "slug": "dennis-eibringer" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "83223", + "names": { + "alternatives": [], + "canonical": "Eld's lover", + "localized": { + "en": "Eld's lover", + "ja_jp": "エルド恋人" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/83223/original.jpg?1485083597", + "width": null + } + }, + "slug": "eld-s-lover" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "72418", + "names": { + "alternatives": [], + "canonical": "Boris Feulner", + "localized": { + "en": "Boris Feulner", + "ja_jp": "ボリス・フォイルナー" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/72418/original.jpg?1485079569", + "width": null + } + }, + "slug": "boris-feulner" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39802", + "names": { + "alternatives": [], + "canonical": "Franz", + "localized": { + "en": "Franz", + "ja_jp": "フランツ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39802/original.jpg?1483096805", + "width": null + } + }, + "slug": "franz-06354328-6618-42d4-be45-3fcff7b57e8a" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "52591", + "names": { + "alternatives": [], + "canonical": "Marlo Freudenberg", + "localized": { + "en": "Marlo Freudenberg", + "ja_jp": "マルロ・フロイデンベルク" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/52591/original.jpg?1483096805", + "width": null + } + }, + "slug": "marlo-freudenberg" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39807", + "names": { + "alternatives": [], + "canonical": "Gustav", + "localized": { + "en": "Gustav", + "ja_jp": "グスタフ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39807/original.jpg?1483096805", + "width": null + } + }, + "slug": "gustav-bb1524a1-58c3-484d-9da1-8fa5880a1e69" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39803", + "names": { + "alternatives": [], + "canonical": "Hannah", + "localized": { + "en": "Hannah", + "ja_jp": "ハンナ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39803/original.jpg?1483096805", + "width": null + } + }, + "slug": "hannah" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39794", + "names": { + "alternatives": [], + "canonical": "Hannes", + "localized": { + "en": "Hannes", + "ja_jp": "ハンネス" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39794/original.jpg?1483096805", + "width": null + } + }, + "slug": "hannes" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39816", + "names": { + "alternatives": [], + "canonical": "Bertolt Hoover", + "localized": { + "en": "Bertolt Hoover", + "ja_jp": "ベルトルト・フーバー" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39816/original.jpg?1483096805", + "width": null + } + }, + "slug": "bertolt-hoover" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39797", + "names": { + "alternatives": [], + "canonical": "Hugo", + "localized": { + "en": "Hugo", + "ja_jp": "フーゴ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39797/original.jpg?1483096805", + "width": null + } + }, + "slug": "hugo" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39817", + "names": { + "alternatives": [], + "canonical": "Mitabi Jarnach", + "localized": { + "en": "Mitabi Jarnach", + "ja_jp": "ミタビ・ヤルナッハ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39817/original.jpg?1483096805", + "width": null + } + }, + "slug": "mitabi-jarnach" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39815", + "names": { + "alternatives": [], + "canonical": "Eld Jinn", + "localized": { + "en": "Eld Jinn", + "ja_jp": "エルド・ジン" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39815/original.jpg?1483096805", + "width": null + } + }, + "slug": "erd-gin" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "67384", + "names": { + "alternatives": [], + "canonical": "Mother Jinn", + "localized": { + "en": "Mother Jinn", + "ja_jp": "エルド母" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/67384/original.jpg?1485077794", + "width": null + } + }, + "slug": "mother-jinn" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "72984", + "names": { + "alternatives": [], + "canonical": "Jurgen", + "localized": { + "en": "Jurgen", + "ja_jp": "ユルゲン" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/72984/original.jpg?1485079775", + "width": null + } + }, + "slug": "jurgen" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "38510", + "names": { + "alternatives": [], + "canonical": "Jean Kirstein", + "localized": { + "en": "Jean Kirstein", + "ja_jp": "ジャン・キルシュタイン" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/38510/original.jpg?1483096805", + "width": null + } + }, + "slug": "jean-kirschtein" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "38512", + "names": { + "alternatives": [], + "canonical": "Krista Lenz", + "localized": { + "en": "Krista Lenz", + "ja_jp": "クリスタ・レンズ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/38512/original.jpg?1483096805", + "width": null + } + }, + "slug": "christa-renz" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "90705", + "names": { + "alternatives": [], + "canonical": "Father Leonhart", + "localized": { + "en": "Father Leonhart", + "ja_jp": "アニの父" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/90705/original.jpg?1485086503", + "width": null + } + }, + "slug": "father-leonhart" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "38511", + "names": { + "alternatives": [], + "canonical": "Annie Leonhart", + "localized": { + "en": "Annie Leonhart", + "ja_jp": "アニ・レオンハート" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/38511/original.jpg?1483096805", + "width": null + } + }, + "slug": "annie-leonhardt" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39556", + "names": { + "alternatives": [], + "canonical": "Levi", + "localized": { + "en": "Levi", + "ja_jp": "リヴァイ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39556/original.jpg?1483096805", + "width": null + } + }, + "slug": "levi" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39805", + "names": { + "alternatives": [], + "canonical": "Instructor", + "localized": { + "en": "Instructor", + "ja_jp": "眼鏡の教官" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39805/original.jpg?1483096805", + "width": null + } + }, + "slug": "megane-no-kyoukan" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39798", + "names": { + "alternatives": [ + "Brown" + ], + "canonical": "Moses", + "localized": { + "en": "Moses", + "ja_jp": "モーゼス" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39798/original.jpg?1483096805", + "width": null + } + }, + "slug": "moses" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39799", + "names": { + "alternatives": [], + "canonical": "Moses's Mother", + "localized": { + "en": "Moses's Mother", + "ja_jp": "モーゼスの母" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39799/original.jpg?1483096805", + "width": null + } + }, + "slug": "moses-s-mother" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "52583", + "names": { + "alternatives": [], + "canonical": "Nanaba", + "localized": { + "en": "Nanaba", + "ja_jp": "ナナバ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/52583/original.jpg?1483096805", + "width": null + } + }, + "slug": "nanaba" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "52593", + "names": { + "alternatives": [], + "canonical": "Dita Ness", + "localized": { + "en": "Dita Ness", + "ja_jp": "ディータ・ネス" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/52593/original.jpg?1483096805", + "width": null + } + }, + "slug": "dita-ness" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39795", + "names": { + "alternatives": [ + "Minister Nick" + ], + "canonical": "Nick", + "localized": { + "en": "Nick", + "ja_jp": "ニック" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39795/original.jpg?1483096805", + "width": null + } + }, + "slug": "nick-77245a04-f2c1-40ce-b458-222d708e2fe1" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "92572", + "names": { + "alternatives": [], + "canonical": "Pere", + "localized": { + "en": "Pere", + "ja_jp": "ペール" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/92572/original.jpg?1485087363", + "width": null + } + }, + "slug": "pere" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39818", + "names": { + "alternatives": [], + "canonical": "Dot Pixis", + "localized": { + "en": "Dot Pixis", + "ja_jp": "ドット・ピクシス" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39818/original.jpg?1483096805", + "width": null + } + }, + "slug": "dot-pixis" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39819", + "names": { + "alternatives": [], + "canonical": "Petra Ral", + "localized": { + "en": "Petra Ral", + "ja_jp": "ペトラ・ラル" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39819/original.jpg?1483096805", + "width": null + } + }, + "slug": "petra-ral" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "91050", + "names": { + "alternatives": [], + "canonical": "Father Ral", + "localized": { + "en": "Father Ral", + "ja_jp": "ペトラ父" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/91050/original.jpg?1485086660", + "width": null + } + }, + "slug": "father-ral" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "52595", + "names": { + "alternatives": [], + "canonical": "Dimo Reeves", + "localized": { + "en": "Dimo Reeves", + "ja_jp": "ディモ・リーブス" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/52595/original.jpg?1483096805", + "width": null + } + }, + "slug": "dimo-reeves" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39820", + "names": { + "alternatives": [], + "canonical": "Anka Rheinberger", + "localized": { + "en": "Anka Rheinberger", + "ja_jp": "アンカ・ラインベルガー" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39820/original.jpg?1483096805", + "width": null + } + }, + "slug": "anka-rheinberger" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39801", + "names": { + "alternatives": [], + "canonical": "Samuel", + "localized": { + "en": "Samuel", + "ja_jp": "サムエル" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39801/original.jpg?1483096805", + "width": null + } + }, + "slug": "samuel" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39821", + "names": { + "alternatives": [], + "canonical": "Gunther Schultz", + "localized": { + "en": "Gunther Schultz", + "ja_jp": "グンタ・シュルツ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39821/original.jpg?1483096805", + "width": null + } + }, + "slug": "gunter-schulz" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "72049", + "names": { + "alternatives": [], + "canonical": "Mother Schultz", + "localized": { + "en": "Mother Schultz", + "ja_jp": "グンタ母" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/72049/original.jpg?1485079414", + "width": null + } + }, + "slug": "mother-schultz" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "88409", + "names": { + "alternatives": [], + "canonical": "Grandfather Schultz", + "localized": { + "en": "Grandfather Schultz", + "ja_jp": "グンタ祖父" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/88409/original.jpg?1485085615", + "width": null + } + }, + "slug": "grandfather-schultz" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39822", + "names": { + "alternatives": [], + "canonical": "Keith Shardis", + "localized": { + "en": "Keith Shardis", + "ja_jp": "キース・シャーディス" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39822/original.jpg?1483096805", + "width": null + } + }, + "slug": "keith-shardis" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "52596", + "names": { + "alternatives": [], + "canonical": "Luke Siss", + "localized": { + "en": "Luke Siss", + "ja_jp": "ルーク・シス" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/52596/original.jpg?1483096805", + "width": null + } + }, + "slug": "luke-siss" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39823", + "names": { + "alternatives": [], + "canonical": "Erwin Smith", + "localized": { + "en": "Erwin Smith", + "ja_jp": "エルヴィン・スミス" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39823/original.jpg?1483096805", + "width": null + } + }, + "slug": "erwin-smith" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "38513", + "names": { + "alternatives": [], + "canonical": "Connie Springer", + "localized": { + "en": "Connie Springer", + "ja_jp": "コニー・スプリンガー" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/38513/original.jpg?1483096805", + "width": null + } + }, + "slug": "conny-springer" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39824", + "names": { + "alternatives": [], + "canonical": "Nack Tierce", + "localized": { + "en": "Nack Tierce", + "ja_jp": "ナック・ティアス" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39824/original.jpg?1483096805", + "width": null + } + }, + "slug": "nack-tierce" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39808", + "names": { + "alternatives": [], + "canonical": "Tom", + "localized": { + "en": "Tom", + "ja_jp": "トム" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39808/original.jpg?1483096805", + "width": null + } + }, + "slug": "tom-7c968172-923e-4d22-823a-251d8856bfb5" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "77248", + "names": { + "alternatives": [], + "canonical": "Darius Baer Varbrun", + "localized": { + "en": "Darius Baer Varbrun", + "ja_jp": "ダリウス・ベーア=ヴァルブルン" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/77248/original.jpg?1485081285", + "width": null + } + }, + "slug": "darius-baer-varbrun" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39825", + "names": { + "alternatives": [], + "canonical": "Kitts Verman", + "localized": { + "en": "Kitts Verman", + "ja_jp": "キッツ・ヴェールマン" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39825/original.jpg?1483096805", + "width": null + } + }, + "slug": "kitts-verman" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39826", + "names": { + "alternatives": [], + "canonical": "Thomas Wagner", + "localized": { + "en": "Thomas Wagner", + "ja_jp": "トーマス・ワグナー" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39826/original.jpg?1483096805", + "width": null + } + }, + "slug": "thomas-wagner" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39828", + "names": { + "alternatives": [], + "canonical": "Grisha Yeager", + "localized": { + "en": "Grisha Yeager", + "ja_jp": "グリシャ・イェーガー" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39828/original.jpg?1483096805", + "width": null + } + }, + "slug": "grisha-yeager" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39827", + "names": { + "alternatives": [], + "canonical": "Carla Yeager", + "localized": { + "en": "Carla Yeager", + "ja_jp": "カルラ・イェーガー" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39827/original.jpg?1483096805", + "width": null + } + }, + "slug": "carla-yeager" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39796", + "names": { + "alternatives": [], + "canonical": "Ymir", + "localized": { + "en": "Ymir", + "ja_jp": "ユミル" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39796/original.jpg?1483096805", + "width": null + } + }, + "slug": "ymir-24b34432-0237-4b22-a800-2e1ac512db5c" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39829", + "names": { + "alternatives": [], + "canonical": "Mike Zacharias", + "localized": { + "en": "Mike Zacharias", + "ja_jp": "ミケ・ザカリアス" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39829/original.jpg?1483096805", + "width": null + } + }, + "slug": "mike-zacharias" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "52597", + "names": { + "alternatives": [], + "canonical": "Darius Zackly", + "localized": { + "en": "Darius Zackly", + "ja_jp": "ダリス・ザックレー" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/52597/original.jpg?1483096805", + "width": null + } + }, + "slug": "darius-zackly" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39830", + "names": { + "alternatives": [], + "canonical": "Millius Zermusky", + "localized": { + "en": "Millius Zermusky", + "ja_jp": "ミリウス・ゼルムスキー" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39830/original.jpg?1483096805", + "width": null + } + }, + "slug": "millius-zermusky" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "39831", + "names": { + "alternatives": [], + "canonical": "Hange Zoë", + "localized": { + "en": "Hange Zoë", + "ja_jp": "ハンジ・ゾエ" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/39831/original.jpg?1483096805", + "width": null + } + }, + "slug": "hange-zoe" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "38505", + "names": { + "alternatives": [], + "canonical": "Mikasa Ackerman", + "localized": { + "en": "Mikasa Ackerman", + "ja_jp": "ミカサ・アッカーマン" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/38505/original.jpg?1483096805", + "width": null + } + }, + "slug": "mikasa-ackerman" + }, + "role": "MAIN" + }, + { + "character": { + "id": "95639", + "names": { + "alternatives": [], + "canonical": "Abel", + "localized": { + "en": "Abel", + "ja_jp": "ゴーグル" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/95639/original.jpg?1533149500", + "width": null + } + }, + "slug": "goggles" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "52585", + "names": { + "alternatives": [], + "canonical": "Keiji", + "localized": { + "en": "Keiji", + "ja_jp": null + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/52585/original.jpg?1483096805", + "width": null + } + }, + "slug": "keiji" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "52591", + "names": { + "alternatives": [], + "canonical": "Marlo Freudenberg", + "localized": { + "en": "Marlo Freudenberg", + "ja_jp": "マルロ・フロイデンベルク" + } + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/52591/original.jpg?1483096805", + "width": null + } + }, + "slug": "marlo-freudenberg" + }, + "role": "BACKGROUND" + } + ], + "pageInfo": { + "endCursor": "NzU", + "hasNextPage": false, + "hasPreviousPage": false, + "startCursor": "MQ" + } + }, + "description": { + "en": "Centuries ago, mankind was slaughtered to near extinction by monstrous humanoid creatures called titans, forcing humans to hide in fear behind enormous concentric walls. What makes these giants truly terrifying is that their taste for human flesh is not born out of hunger but what appears to be out of pleasure. To ensure their survival, the remnants of humanity began living within defensive barriers, resulting in one hundred years without a single titan encounter. However, that fragile calm is soon shattered when a colossal titan manages to breach the supposedly impregnable outer wall, reigniting the fight for survival against the man-eating abominations.\n\nAfter witnessing a horrific personal loss at the hands of the invading creatures, Eren Yeager dedicates his life to their eradication by enlisting into the Survey Corps, an elite military unit that combats the merciless humanoids outside the protection of the walls. Based on Hajime Isayama's award-winning manga, Shingeki no Kyojin follows Eren, along with his adopted sister Mikasa Ackerman and his childhood friend Armin Arlert, as they join the brutal war against the titans and race to discover a way of defeating them before the last walls are breached.\n\n(Source: MAL Rewrite)" + }, + "startDate": "2013-04-07", + "endDate": "2013-09-29", + "episodeCount": 25, + "episodeLength": 1440, + "totalLength": 36000, + "season": "SPRING", + "sfw": true, + "slug": "attack-on-titan", + "mappings": { + "nodes": [ + { + "externalId": "9541", + "externalSite": "ANIDB" + }, + { + "externalId": "16498", + "externalSite": "ANILIST_ANIME" + }, + { + "externalId": "HgLInLJMbE", + "externalSite": "AOZORA" + }, + { + "externalId": "50011596", + "externalSite": "HULU" + }, + { + "externalId": "16498", + "externalSite": "MYANIMELIST_ANIME" + }, + { + "externalId": "267440/1", + "externalSite": "THETVDB" + }, + { + "externalId": "514060", + "externalSite": "THETVDB_SEASON" + }, + { + "externalId": "267440", + "externalSite": "THETVDB_SERIES" + }, + { + "externalId": "1420", + "externalSite": "TRAKT" + } + ] + }, + "staff": { + "nodes": [ + { + "person": { + "id": "22220", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/22220/original.jpg?1533274286", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Jouji Wada", + "ja_jp": "和田 丈嗣" + } + }, + "slug": "jouji-wada" + }, + "role": "Producer" + }, + { + "person": { + "id": "3976", + "birthday": "1976-11-05", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/3976/original.jpg?1416264991", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Tetsurou Araki", + "ja_jp": "荒木 哲郎" + } + }, + "slug": "tetsurou-araki" + }, + "role": "Director" + }, + { + "person": { + "id": "431", + "birthday": "1962-05-20", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/431/original.jpg?1416260864", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Masafumi Mima", + "ja_jp": "三間 雅文" + } + }, + "slug": "masafumi-mima" + }, + "role": "Sound Director" + }, + { + "person": { + "id": "21476", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Shinpei Ezaki", + "ja_jp": "江崎 慎平" + } + }, + "slug": "shinpei-ezaki" + }, + "role": "Episode Director, Storyboard" + }, + { + "person": { + "id": "21437", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Yoshiyuki Fujiwara", + "ja_jp": "藤原 佳幸" + } + }, + "slug": "yoshiyuki-fujiwara" + }, + "role": "Episode Director, Key Animation" + }, + { + "person": { + "id": "364", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/364/original.jpg?1416260777", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Masashi Ishihama", + "ja_jp": "石浜 真史" + } + }, + "slug": "masashi-ishihama" + }, + "role": "Episode Director, Storyboard, Animation Director, Key Animation, Background Art" + }, + { + "person": { + "id": "3982", + "birthday": "1981-12-02", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/3982/original.jpg?1533272323", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Yuzuru Tachikawa", + "ja_jp": "立川 譲" + } + }, + "slug": "yuzuru-tachikawa" + }, + "role": "Episode Director, Storyboard" + }, + { + "person": { + "id": "9220", + "birthday": "1971-04-22", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/9220/original.jpg?1416270341", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Hiroyuki Tanaka", + "ja_jp": "田中 洋之" + } + }, + "slug": "hiroyuki-tanaka" + }, + "role": "Episode Director, Assistant Director" + }, + { + "person": { + "id": "21396", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/21396/original.jpg?1533273728", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Daisuke Tokudo", + "ja_jp": "徳土 大介" + } + }, + "slug": "daisuke-tokudo" + }, + "role": "Episode Director, Storyboard, Key Animation" + }, + { + "person": { + "id": "1460", + "birthday": "1977-04-13", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/1460/original.jpg?1416262235", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Sayo Yamamoto", + "ja_jp": "山本 沙代" + } + }, + "slug": "sayo-yamamoto" + }, + "role": "Episode Director, Storyboard" + }, + { + "person": { + "id": "1216", + "birthday": "1974-10-24", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/1216/original.jpg?1416261888", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "John Burgmeier" + } + }, + "slug": "john-burgmeier" + }, + "role": "Script" + }, + { + "person": { + "id": "1918", + "birthday": "1965-04-07", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/1918/original.jpg?1416262710", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Yasuko Kobayashi", + "ja_jp": "小林 靖子" + } + }, + "slug": "yasuko-kobayashi" + }, + "role": "Script, Series Composition" + }, + { + "person": { + "id": "7687", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/7687/original.jpg?1416268918", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Tyson Rinehart" + } + }, + "slug": "tyson-rinehart" + }, + "role": "Script" + }, + { + "person": { + "id": "19526", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Hiroshi Seko", + "ja_jp": "瀬古 浩司" + } + }, + "slug": "hiroshi-seko" + }, + "role": "Script" + }, + { + "person": { + "id": "1461", + "birthday": "1968-07-06", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/1461/original.jpg?1416262236", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Noboru Takagi", + "ja_jp": "高木 登" + } + }, + "slug": "noboru-takagi" + }, + "role": "Script" + }, + { + "person": { + "id": "440", + "birthday": "1976-05-25", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/440/original.jpg?1416260875", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "John Michael Tatum" + } + }, + "slug": "john-michael-tatum" + }, + "role": "Script" + }, + { + "person": { + "id": "21721", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/21721/original.jpg?1533274009", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Tomohiro Hirata", + "ja_jp": "平田 智浩" + } + }, + "slug": "tomohiro-hirata" + }, + "role": "Storyboard, Key Animation" + }, + { + "person": { + "id": "24043", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Minoru Oohara", + "ja_jp": "大原 実" + } + }, + "slug": "minoru-oohara" + }, + "role": "Storyboard" + }, + { + "person": { + "id": "21610", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Keiichi Sasajima", + "ja_jp": "笹嶋 啓一" + } + }, + "slug": "keiichi-sasajima" + }, + "role": "Storyboard" + }, + { + "person": { + "id": "18196", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/18196/original.jpg?1533273064", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Cinema Staff" + } + }, + "slug": "cinema-staff" + }, + "role": "Theme Song Performance" + }, + { + "person": { + "id": "6847", + "birthday": "1985-07-16", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/6847/original.jpg?1416268029", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Yoko Hikasa", + "ja_jp": "日笠 陽子" + } + }, + "slug": "yoko-hikasa" + }, + "role": "Theme Song Performance" + }, + { + "person": { + "id": "8718", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/8718/original.jpg?1416270072", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Linked Horizon" + } + }, + "slug": "linked-horizon" + }, + "role": "Theme Song Performance" + }, + { + "person": { + "id": "17299", + "birthday": "1978-06-19", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/17299/original.jpg?1533270886", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Revo", + "ja_jp": "Revo " + } + }, + "slug": "revo" + }, + "role": "Theme Song Lyrics, Theme Song Composition, Theme Song Arrangement" + }, + { + "person": { + "id": "17751", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/17751/original.jpg?1533270888", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "mpi", + "ja_jp": "mpi " + } + }, + "slug": "mpi" + }, + "role": "Theme Song Lyrics, Inserted Song Performance" + }, + { + "person": { + "id": "9491", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Misao Abe", + "ja_jp": "阿部 美佐緒" + } + }, + "slug": "misao-abe" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "9490", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/9490/original.jpg?1533272773", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Kouichi Arai", + "ja_jp": "新井 浩一" + } + }, + "slug": "kouichi-arai" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "3006", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/3006/original.jpg?1533270886", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Kyouji Asano", + "ja_jp": "浅野 恭司" + } + }, + "slug": "kyouji-asano" + }, + "role": "Character Design" + }, + { + "person": { + "id": "9221", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/9221/original.jpg?1416270342", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Aimee Blackschleger" + } + }, + "slug": "aimee-blackschleger" + }, + "role": "Inserted Song Performance" + }, + { + "person": { + "id": "22549", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Takaaki Chiba", + "ja_jp": "千葉 崇明" + } + }, + "slug": "takaaki-chiba" + }, + "role": "Key Animation, Chief Animation Director, Animation Director" + }, + { + "person": { + "id": "9111", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/9111/original.jpg?1416270225", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Cyua" + } + }, + "slug": "cyua" + }, + "role": "Inserted Song Performance" + }, + { + "person": { + "id": "435", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/435/original.jpg?1416260869", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Gen Fukunaga", + "ja_jp": "フクナガ ゲン" + } + }, + "slug": "gen-fukunaga" + }, + "role": "Executive Producer" + }, + { + "person": { + "id": "22444", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Masami Gotou", + "ja_jp": "後藤 雅巳" + } + }, + "slug": "masami-gotou" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "23609", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Takashi Habe", + "ja_jp": "波部 崇" + } + }, + "slug": "takashi-habe" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "9499", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Akira Hamaguchi", + "ja_jp": "浜口 明" + } + }, + "slug": "akira-hamaguchi" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "23292", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Satoshi Hashimoto", + "ja_jp": "橋本 賢" + } + }, + "slug": "satoshi-hashimoto-d5208a27-4ad0-4f06-b53d-eb95fa7105db" + }, + "role": "Color Design" + }, + { + "person": { + "id": "22109", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Aya Hida", + "ja_jp": "肥田 文" + } + }, + "slug": "aya-hida" + }, + "role": "Editing" + }, + { + "person": { + "id": "17186", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Izumi Hirose", + "ja_jp": "広瀬 いづみ" + } + }, + "slug": "izumi-hirose" + }, + "role": "Color Setting" + }, + { + "person": { + "id": "8034", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/8034/original.jpg?1416269308", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Atsushi Ikariya", + "ja_jp": "碇谷 敦" + } + }, + "slug": "atsushi-ikariya" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "23895", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/23895/original.jpg?1486414118", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Arifumi Imai", + "ja_jp": "今井 有文" + } + }, + "slug": "arifumi-imai" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "8719", + "birthday": "1986-08-29", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/8719/original.jpg?1416270073", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Hajime Isayama", + "ja_jp": "諫山 創" + } + }, + "slug": "hajime-isayama" + }, + "role": "Original Creator" + }, + { + "person": { + "id": "2097", + "birthday": "1964-04-28", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/2097/original.jpg?1533271648", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Hiromi Katou", + "ja_jp": "加藤 裕美" + } + }, + "slug": "hiromi-katou" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "8161", + "birthday": "1978-05-31", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/8161/original.jpg?1416269452", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Mika Kobayashi", + "ja_jp": "小林 未郁" + } + }, + "slug": "mika-kobayashi" + }, + "role": "Inserted Song Performance" + }, + { + "person": { + "id": "24522", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Naoki Kobayashi", + "ja_jp": "小林 直樹" + } + }, + "slug": "naoki-kobayashi" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "21400", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/21400/original.jpg?1533270885", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Masashi Koizuka", + "ja_jp": "肥塚 正史" + } + }, + "slug": "masashi-koizuka" + }, + "role": "Assistant Director" + }, + { + "person": { + "id": "22605", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/22605/original.jpg?1533274386", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Tatsuya Koyanagi", + "ja_jp": "小柳 達也" + } + }, + "slug": "tatsuya-koyanagi" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "5639", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Shizuo Kurahashi", + "ja_jp": "倉橋 静男" + } + }, + "slug": "shizuo-kurahashi" + }, + "role": "Sound Effects" + }, + { + "person": { + "id": "466", + "birthday": "1970-07-14", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/466/original.jpg?1416260915", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Mike McFarland" + } + }, + "slug": "mike-mcfarland" + }, + "role": "ADR Director" + }, + { + "person": { + "id": "22417", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Tatsuya Miki", + "ja_jp": "三木 達也" + } + }, + "slug": "tatsuya-miki" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "9486", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/9486/original.jpg?1533273224", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Kazuhiro Miwa", + "ja_jp": "三輪 和宏" + } + }, + "slug": "kazuhiro-miwa" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "22734", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Kana Miyai", + "ja_jp": "宮井 加奈" + } + }, + "slug": "kana-miyai" + }, + "role": "Animation Director" + }, + { + "person": { + "id": "23813", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Jun Okabe", + "ja_jp": "岡部 順" + } + }, + "slug": "jun-okabe" + }, + "role": "Background Art" + }, + { + "person": { + "id": "22705", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Satoshi Sakai", + "ja_jp": "酒井 智史" + } + }, + "slug": "satoshi-sakai" + }, + "role": "Animation Director" + }, + { + "person": { + "id": "5377", + "birthday": "1980-09-12", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/5377/original.jpg?1416266441", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Hiroyuki Sawano", + "ja_jp": "澤野 弘之" + } + }, + "slug": "hiroyuki-sawano" + }, + "role": "Music" + }, + { + "person": { + "id": "3414", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Shirou Shibata", + "ja_jp": "柴田 志朗" + } + }, + "slug": "shirou-shibata" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "23332", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Hideki Takahashi", + "ja_jp": "高橋 英樹" + } + }, + "slug": "hideki-takahashi-4e5a48eb-bac3-40a3-96ce-e19ebb50a6c3" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "254", + "birthday": "1984-06-01", + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Hironori Tanaka", + "ja_jp": "田中 宏紀" + } + }, + "slug": "hironori-tanaka" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "22537", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Kazuhiro Yamada", + "ja_jp": "山田 和弘" + } + }, + "slug": "kazuhiro-yamada" + }, + "role": "Director of Photography" + }, + { + "person": { + "id": "23501", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Naoto Yamatani", + "ja_jp": "山谷 尚人" + } + }, + "slug": "naoto-yamatani" + }, + "role": "Sound Effects" + }, + { + "person": { + "id": "24925", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Yumiko Ishii", + "ja_jp": "石井 ゆみこ" + } + }, + "slug": "yumiko-ishii" + }, + "role": "Animation Director, Key Animation" + }, + { + "person": { + "id": "3577", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Toshiyuki Komaru", + "ja_jp": "小丸 敏之" + } + }, + "slug": "toshiyuki-komaru" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "14999", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Toshiyuki Satou", + "ja_jp": "佐藤 利幸" + } + }, + "slug": "toshiyuki-satou" + }, + "role": "Key Animation, Animation Director, In-Between Animation" + }, + { + "person": { + "id": "23566", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Senbon Umishima", + "ja_jp": "海島 千本" + } + }, + "slug": "senbon-umishima" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "123", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/123/original.jpg?1533271550", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Kenichi Yoshida", + "ja_jp": "吉田 健一" + } + }, + "slug": "kenichi-yoshida" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "30444", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/30444/original.jpg?1533274624", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Shuuhei Yabuta", + "ja_jp": "薮田 修平" + } + }, + "slug": "shuuhei-yabuta" + }, + "role": "Director" + }, + { + "person": { + "id": "31841", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/31841/original.jpg?1533274884", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Tatsuma Minamikawa", + "ja_jp": "南川 達馬" + } + }, + "slug": "tatsuma-minamikawa" + }, + "role": "Episode Director" + }, + { + "person": { + "id": "34959", + "birthday": "1964-06-03", + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/34959/original.jpg?1533275373", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Seiji Kameda", + "ja_jp": "亀田 誠治" + } + }, + "slug": "seiji-kameda" + }, + "role": "Theme Song Arrangement" + }, + { + "person": { + "id": "34195", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/34195/original.jpg?1533275252", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "You Moriyama", + "ja_jp": "森山 洋" + } + }, + "slug": "you-moriyama" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "33987", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Akira Tabata", + "ja_jp": "田畑 昭" + } + }, + "slug": "akira-tabata" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "34806", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Orie Tanaka", + "ja_jp": "田中 織枝" + } + }, + "slug": "orie-tanaka" + }, + "role": "Key Animation" + }, + { + "person": { + "id": "34384", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Kazuhiko Wanibuchi", + "ja_jp": "鰐淵 和彦" + } + }, + "slug": "kazuhiko-wanibuchi" + }, + "role": "Key Animation" + } + ], + "pageInfo": { + "endCursor": "NzA", + "hasNextPage": false, + "hasPreviousPage": false, + "startCursor": "MQ" + } + }, + "status": "FINISHED", + "streamingLinks": { + "nodes": [ + { + "dubs": [ + "ja" + ], + "subs": [ + "en" + ], + "regions": [ + "US" + ], + "streamer": { + "id": "8", + "siteName": "TubiTV" + }, + "url": "https://tubitv.com/series/2318" + }, + { + "dubs": [ + "ja" + ], + "subs": [ + "en" + ], + "regions": [ + "US" + ], + "streamer": { + "id": "3", + "siteName": "Crunchyroll" + }, + "url": "http://www.crunchyroll.com/attack-on-titan" + }, + { + "dubs": [ + "ja" + ], + "subs": [ + "en" + ], + "regions": [ + "US" + ], + "streamer": { + "id": "6", + "siteName": "Netflix" + }, + "url": "https://www.netflix.com/title/70299043" + }, + { + "dubs": [ + "ja" + ], + "subs": [ + "en" + ], + "regions": [ + "US" + ], + "streamer": { + "id": "2", + "siteName": "Funimation" + }, + "url": "https://www.funimation.com/shows/attack-on-titan/" + }, + { + "dubs": [ + "ja" + ], + "subs": [ + "en" + ], + "regions": [ + "US" + ], + "streamer": { + "id": "1", + "siteName": "Hulu" + }, + "url": "https://www.hulu.com/attack-on-titan" + } + ] + }, + "subtype": "TV", + "titles": { + "alternatives": [ + "AoT" + ], + "canonical": "Attack on Titan", + "canonicalLocale": "en", + "localized": { + "en": "Attack on Titan", + "en_jp": "Shingeki no Kyojin", + "en_us": "Attack on Titan", + "ja_jp": "進撃の巨人" + } + }, + "youtubeTrailerVideoId": "LHtdKWJdif4" + } + } } \ No newline at end of file diff --git a/tests/AnimeClient/test_data/Kitsu/animeListItemAfterTransform.json b/tests/AnimeClient/test_data/Kitsu/animeListItemAfterTransform.json deleted file mode 100644 index fddd2a4a..00000000 --- a/tests/AnimeClient/test_data/Kitsu/animeListItemAfterTransform.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": "15839442", - "mal_id": "33206", - "episodes": { - "watched": 0, - "total": "-", - "length": null - }, - "airing": { - "status": "Currently Airing", - "started": "2017-01-12", - "ended": null - }, - "anime": { - "age_rating": null, - "title": "Kobayashi-san Chi no Maid Dragon", - "titles": ["Kobayashi-san Chi no Maid Dragon", "Miss Kobayashi's Dragon Maid", "\u5c0f\u6797\u3055\u3093\u3061\u306e\u30e1\u30a4\u30c9\u30e9\u30b4\u30f3"], - "slug": "kobayashi-san-chi-no-maid-dragon", - "type": "TV", - "image": "https:\/\/media.kitsu.io\/anime\/poster_images\/12243\/small.jpg?1481144116", - "genres": ["Comedy", "Fantasy", "Slice of Life"], - "streaming_links": [] - }, - "watching_status": "current", - "notes": null, - "rewatching": false, - "rewatched": 0, - "user_rating": "-", - "private": false -} \ No newline at end of file diff --git a/tests/AnimeClient/test_data/Kitsu/animeListItemBeforeTransform.json b/tests/AnimeClient/test_data/Kitsu/animeListItemBeforeTransform.json index 223ce859..5a520570 100644 --- a/tests/AnimeClient/test_data/Kitsu/animeListItemBeforeTransform.json +++ b/tests/AnimeClient/test_data/Kitsu/animeListItemBeforeTransform.json @@ -1,1097 +1,178 @@ { - "id": "15839442", - "type": "libraryEntries", - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442" - }, - "attributes": { - "status": "current", - "progress": 0, - "reconsuming": false, - "reconsumeCount": 0, - "notes": null, - "private": false, - "rating": null, - "ratingTwenty": null, - "updatedAt": "2017-01-13T01:32:31.832Z" - }, - "relationships": { - "user": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/relationships\/user", - "related": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/user" - } - }, - "anime": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/relationships\/anime", - "related": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/anime" - } - }, - "manga": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/relationships\/manga", - "related": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/manga" - } - }, - "drama": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/relationships\/drama", - "related": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/drama" - } - }, - "review": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/relationships\/review", - "related": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/review" - } - }, - "media": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/relationships\/media", - "related": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/media" - }, - "data": { - "type": "anime", - "id": "12243" - } - }, - "unit": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/relationships\/unit", - "related": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/unit" - } - }, - "nextUnit": { - "links": { - "self": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/relationships\/next-unit", - "related": "https:\/\/kitsu.io\/api\/edge\/library-entries\/15839442\/next-unit" - } - } - }, - "included": { - "anime": { - "12243": { - "slug": "kobayashi-san-chi-no-maid-dragon", - "synopsis": "Kobayashi lives alone in an apartment, until one day, Tooru appeared and they ended up living together. Tooru looks down on humans as inferior and foolish, but having been saved by Kobayashi-san, she does everything she can to repay the debt and help her with various things, although not everything goes according to plan.\r\n\r\nA mythical everyday life comedy about a hard working office lady living with a dragon girl.", - "coverImageTopOffset": 0, - "titles": { - "en": "Miss Kobayashi's Dragon Maid", - "en_jp": "Kobayashi-san Chi no Maid Dragon", - "ja_jp": "\u5c0f\u6797\u3055\u3093\u3061\u306e\u30e1\u30a4\u30c9\u30e9\u30b4\u30f3" - }, - "canonicalTitle": "Kobayashi-san Chi no Maid Dragon", - "abbreviatedTitles": null, - "averageRating": null, - "ratingFrequencies": { - "0.5": "0", - "1.0": "1", - "1.5": "0", - "2.0": "2", - "2.5": "2", - "3.0": "6", - "3.5": "10", - "4.0": "8", - "4.5": "1", - "5.0": "15", - "nil": "214" - }, - "startDate": "2017-01-12", - "endDate": null, - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/12243\/tiny.jpg?1481144116", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/12243\/small.jpg?1481144116", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/12243\/medium.jpg?1481144116", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/12243\/large.jpg?1481144116", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/12243\/original.jpg?1481144116" - }, - "coverImage": null, - "episodeCount": null, - "episodeLength": null, - "subtype": "TV", - "youtubeVideoId": "Vx-cdrHiGd0", - "ageRating": null, - "ageRatingGuide": "", - "showType": "TV", - "nsfw": false, - "relationships": { - "categories": { - "3": { - "title": "Comedy", - "slug": "comedy", - "description": null - }, - "11": { - "title": "Fantasy", - "slug": "fantasy", - "description": "" - }, - "16": { - "title": "Slice of Life", - "slug": "slice-of-life", - "description": "" - } - }, - "mappings": { - "10780": { - "externalSite": "myanimelist\/anime", - "externalId": "33206", - "relationships": [] - } - } - } - }, - "6687": { - "slug": "smile-precure", - "synopsis": "Once upon a time, there was a kingdom of fairy tales called \"M\u00e4rchenland\", where many fairy tale characters live together in joy. Suddenly, the evil emperor Pierrot made an invasion on M\u00e4rchenland, sealing its Queen in the process. To revive the Queen, the symbol of happiness called Cure Decor, \"the Queen's scattered power of light of happiness\", is required. To collect the Cure Decor, a fairy named Candy searches for the Pretty Cures on Earth. There, Candy meets a girl, who decides to collect the Cure Decor. Now, will the world earn a \"happy ending\"?", - "coverImageTopOffset": 100, - "titles": { - "en": "Glitter Force", - "en_jp": "Smile Precure!", - "ja_jp": "\u30b9\u30de\u30a4\u30eb\u30d7\u30ea\u30ad\u30e5\u30a2\uff01" - }, - "canonicalTitle": "Smile Precure!", - "abbreviatedTitles": null, - "averageRating": 3.6674651842659, - "ratingFrequencies": { - "0.5": "4", - "1.0": "8", - "1.5": "3", - "2.0": "17", - "2.5": "30", - "3.0": "54", - "3.5": "69", - "4.0": "96", - "4.5": "42", - "5.0": "57", - "nil": "594" - }, - "startDate": "2012-02-05", - "endDate": "2013-01-27", - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/6687\/tiny.jpg?1408459122", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/6687\/small.jpg?1408459122", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/6687\/medium.jpg?1408459122", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/6687\/large.jpg?1408459122", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/6687\/original.jpg?1408459122" - }, - "coverImage": { - "small": "https:\/\/media.kitsu.io\/anime\/cover_images\/6687\/small.jpg?1452609041", - "large": "https:\/\/media.kitsu.io\/anime\/cover_images\/6687\/large.jpg?1452609041", - "original": "https:\/\/media.kitsu.io\/anime\/cover_images\/6687\/original.png?1452609041" - }, - "episodeCount": 48, - "episodeLength": 24, - "subtype": "TV", - "youtubeVideoId": "", - "ageRating": "PG", - "ageRatingGuide": "Children", - "showType": "TV", - "nsfw": false, - "relationships": { - "categories": { - "8": { - "title": "Magic", - "slug": "magic", - "description": null - }, - "40": { - "title": "Kids", - "slug": "kids", - "description": null - }, - "47": { - "title": "Mahou Shoujo", - "slug": "mahou-shoujo", - "description": "Magical Girls" - }, - "11": { - "title": "Fantasy", - "slug": "fantasy", - "description": "" - } - }, - "mappings": { - "778": { - "externalSite": "myanimelist\/anime", - "externalId": "12191", - "relationships": [] - }, - "12547": { - "externalSite": "thetvdb\/series", - "externalId": "255904", - "relationships": [] - } - } - } - }, - "12596": { - "slug": "idol-jihen", - "synopsis": "", - "coverImageTopOffset": 0, - "titles": { - "en": null, - "en_jp": "Idol Jihen", - "ja_jp": null - }, - "canonicalTitle": "Idol Jihen", - "abbreviatedTitles": null, - "averageRating": null, - "ratingFrequencies": { - "0.5": "1", - "2.0": "2", - "2.5": "2", - "3.0": "3", - "3.5": "2", - "5.0": "1", - "nil": "19" - }, - "startDate": "2017-01-01", - "endDate": null, - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/12596\/tiny.jpg?1475248797", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/12596\/small.jpg?1475248797", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/12596\/medium.jpg?1475248797", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/12596\/large.jpg?1475248797", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/12596\/original.jpg?1475248797" - }, - "coverImage": null, - "episodeCount": null, - "episodeLength": 0, - "subtype": "TV", - "youtubeVideoId": null, - "ageRating": null, - "ageRatingGuide": null, - "showType": "TV", - "nsfw": false, - "relationships": { - "categories": { - "35": { - "title": "Music", - "slug": "music", - "description": null - } - }, - "mappings": { - "6246": { - "externalSite": "myanimelist\/anime", - "externalId": "34028", - "relationships": [] - } - } - } - }, - "12529": { - "slug": "demi-chan-wa-kataritai", - "synopsis": "Monsters of legend walk among us, going by the name \u201cdemi-humans.\u201d Ever since he's discovered the \u201cdemis,\u201d one young man has become obsessed with them. So when he gets a job as a teacher at a high school for demi-girls, it's a dream come true! But these demis, who include a rambunctious vampire, a bashful headless girl, and a succubus, have all the problems normal teenagers have, on top of their supernatural conditions. How to handle a classroom full of them?!\n\n(Source: Kodansha Comics)", - "coverImageTopOffset": 200, - "titles": { - "en": "", - "en_jp": "Demi-chan wa Kataritai", - "ja_jp": "" - }, - "canonicalTitle": "Demi-chan wa Kataritai", - "abbreviatedTitles": null, - "averageRating": null, - "ratingFrequencies": { - "1.5": "1", - "3.0": "8", - "3.5": "15", - "4.0": "28", - "4.5": "9", - "5.0": "7", - "nil": "201" - }, - "startDate": "2017-01-08", - "endDate": null, - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/12529\/tiny.jpg?1480530358", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/12529\/small.jpg?1480530358", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/12529\/medium.jpg?1480530358", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/12529\/large.jpg?1480530358", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/12529\/original.png?1480530358" - }, - "coverImage": { - "small": "https:\/\/media.kitsu.io\/anime\/cover_images\/12529\/small.jpg?1480537767", - "large": "https:\/\/media.kitsu.io\/anime\/cover_images\/12529\/large.jpg?1480537767", - "original": "https:\/\/media.kitsu.io\/anime\/cover_images\/12529\/original.png?1480537767" - }, - "episodeCount": null, - "episodeLength": null, - "subtype": "TV", - "youtubeVideoId": "", - "ageRating": null, - "ageRatingGuide": "", - "showType": "TV", - "nsfw": false, - "relationships": { - "categories": { - "3": { - "title": "Comedy", - "slug": "comedy", - "description": null - }, - "9": { - "title": "Supernatural", - "slug": "supernatural", - "description": null - }, - "24": { - "title": "School", - "slug": "school", - "description": null - } - }, - "mappings": { - "8667": { - "externalSite": "myanimelist\/anime", - "externalId": "33988", - "relationships": [] - } - } - } - }, - "11937": { - "slug": "kono-subarashii-sekai-ni-shukufuku-wo-2", - "synopsis": "Second season of Kono Subarashii Sekai ni Shukufuku wo!", - "coverImageTopOffset": 240, - "titles": { - "en": "KonoSuba: God's Blessing on This Wonderful World! Second Season", - "en_jp": "Kono Subarashii Sekai ni Shukufuku wo! 2", - "ja_jp": "\u3053\u306e\u7d20\u6674\u3089\u3057\u3044\u4e16\u754c\u306b\u795d\u798f\u3092! 2" - }, - "canonicalTitle": "Kono Subarashii Sekai ni Shukufuku wo! 2", - "abbreviatedTitles": null, - "averageRating": 4.2956263163849, - "ratingFrequencies": { - "0.5": "0", - "1.0": "1", - "1.5": "0", - "2.0": "1", - "2.5": "6", - "3.0": "4", - "3.5": "15", - "4.0": "14", - "4.5": "25", - "5.0": "85", - "nil": "1795" - }, - "startDate": "2017-01-11", - "endDate": null, - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/11937\/tiny.jpg?1480974549", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/11937\/small.jpg?1480974549", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/11937\/medium.jpg?1480974549", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/11937\/large.jpg?1480974549", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/11937\/original.jpg?1480974549" - }, - "coverImage": { - "small": "https:\/\/media.kitsu.io\/anime\/cover_images\/11937\/small.jpg?1480444804", - "large": "https:\/\/media.kitsu.io\/anime\/cover_images\/11937\/large.jpg?1480444804", - "original": "https:\/\/media.kitsu.io\/anime\/cover_images\/11937\/original.png?1480444804" - }, - "episodeCount": null, - "episodeLength": null, - "subtype": "TV", - "youtubeVideoId": "OAnW7RA3tIY", - "ageRating": "PG", - "ageRatingGuide": "Teens 13 or older", - "showType": "TV", - "nsfw": false, - "relationships": { - "categories": { - "2": { - "title": "Adventure", - "slug": "adventure", - "description": null - }, - "3": { - "title": "Comedy", - "slug": "comedy", - "description": null - }, - "8": { - "title": "Magic", - "slug": "magic", - "description": null - }, - "9": { - "title": "Supernatural", - "slug": "supernatural", - "description": null - }, - "11": { - "title": "Fantasy", - "slug": "fantasy", - "description": "" - } - }, - "mappings": { - "2826": { - "externalSite": "myanimelist\/anime", - "externalId": "32937", - "relationships": [] - } - } - } - }, - "12687": { - "slug": "nyanko-days", - "synopsis": "It's an everyday life of a shy girl called Tomoko Konagai and three \"cats\" Maa, Roo, Shii. These cats are girls with cats' ears and can speak human language.\n\n(Source: MAL News)", - "coverImageTopOffset": 0, - "titles": { - "en": null, - "en_jp": "Nyanko Days", - "ja_jp": "\u306b\u3083\u3093\u3053\u30c7\u30a4\u30ba" - }, - "canonicalTitle": "Nyanko Days", - "abbreviatedTitles": null, - "averageRating": null, - "ratingFrequencies": { - "0.5": "1", - "1.0": "1", - "1.5": "1", - "2.0": "1", - "2.5": "1", - "3.0": "6", - "3.5": "1", - "4.0": "3", - "4.5": "1", - "5.0": "2", - "nil": "39" - }, - "startDate": "2017-01-01", - "endDate": null, - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/12687\/tiny.jpg?1477621209", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/12687\/small.jpg?1477621209", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/12687\/medium.jpg?1477621209", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/12687\/large.jpg?1477621209", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/12687\/original.jpg?1477621209" - }, - "coverImage": null, - "episodeCount": null, - "episodeLength": null, - "subtype": "TV", - "youtubeVideoId": "", - "ageRating": null, - "ageRatingGuide": null, - "showType": "TV", - "nsfw": false, - "relationships": { - "categories": { - "3": { - "title": "Comedy", - "slug": "comedy", - "description": null - }, - "16": { - "title": "Slice of Life", - "slug": "slice-of-life", - "description": "" - } - }, - "mappings": { - "10686": { - "externalSite": "myanimelist\/anime", - "externalId": "34148", - "relationships": [] - } - } - } - }, - "12267": { - "slug": "masamune-kun-no-revenge", - "synopsis": "As a child, Masamune Makabe once suffered greatly at the hands of a wealthy and beautiful girl named Aki Adagaki, who nicknamed him \"Piggy\" due to his chubby appearance. Seeking revenge against his tormentor, Masamune works hard to improve himself and returns as an incredibly handsome, albeit narcissistic, high school student. When he encounters Aki once again, he is prepared to exact vengeance.\r\n\r\nWith the aid of the rich girl's maid, Yoshino Koiwai, Masamune slowly begins to build his relationship with Aki, intending to break her heart when the time is right. However, as his friendship with Aki begins to grow, Masamune starts to question the objectives of his devious plans, and if bringing them to fruition is what his heart truly desires.\r\n\r\n(Source: MAL Rewrite)", - "coverImageTopOffset": 100, - "titles": { - "en": "Masamune-kun's Revenge", - "en_jp": "Masamune-kun no Revenge", - "ja_jp": "\u653f\u5b97\u304f\u3093\u306e\u30ea\u30d9\u30f3\u30b8" - }, - "canonicalTitle": "Masamune-kun no Revenge", - "abbreviatedTitles": null, - "averageRating": null, - "ratingFrequencies": { - "0.5": "0", - "1.5": "1", - "2.0": "5", - "2.5": "5", - "3.0": "14", - "3.5": "25", - "4.0": "33", - "4.5": "11", - "5.0": "22", - "nil": "569" - }, - "startDate": "2017-01-05", - "endDate": null, - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/12267\/tiny.jpg?1474666437", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/12267\/small.jpg?1474666437", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/12267\/medium.jpg?1474666437", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/12267\/large.jpg?1474666437", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/12267\/original.png?1474666437" - }, - "coverImage": { - "small": "https:\/\/media.kitsu.io\/anime\/cover_images\/12267\/small.jpg?1466985168", - "large": "https:\/\/media.kitsu.io\/anime\/cover_images\/12267\/large.jpg?1466985168", - "original": "https:\/\/media.kitsu.io\/anime\/cover_images\/12267\/original.jpg?1466985168" - }, - "episodeCount": null, - "episodeLength": null, - "subtype": "TV", - "youtubeVideoId": "XmfXcVLA1d8", - "ageRating": null, - "ageRatingGuide": "", - "showType": "TV", - "nsfw": false, - "relationships": { - "categories": { - "3": { - "title": "Comedy", - "slug": "comedy", - "description": null - }, - "24": { - "title": "School", - "slug": "school", - "description": null - }, - "34": { - "title": "Harem", - "slug": "harem", - "description": null - }, - "14": { - "title": "Romance", - "slug": "romance", - "description": "" - } - }, - "mappings": { - "7026": { - "externalSite": "myanimelist\/anime", - "externalId": "33487", - "relationships": [] - } - } - } - }, - "12497": { - "slug": "gabriel-dropout", - "synopsis": "Chief Angel has come to Earth! However, she became so used to the life on Earth that she skips school and keeps playing online games, thus into self-destruction. It's a school comedy that Gabriel turns into a lazy angel!\r\n\r\n(Source: MAL News)", - "coverImageTopOffset": 0, - "titles": { - "en": null, - "en_jp": "Gabriel DropOut", - "ja_jp": null - }, - "canonicalTitle": "Gabriel DropOut", - "abbreviatedTitles": null, - "averageRating": null, - "ratingFrequencies": { - "1.5": "1", - "2.5": "1", - "3.0": "8", - "3.5": "11", - "4.0": "12", - "4.5": "3", - "5.0": "9", - "nil": "98" - }, - "startDate": "2017-01-09", - "endDate": null, - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/12497\/tiny.jpg?1477681044", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/12497\/small.jpg?1477681044", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/12497\/medium.jpg?1477681044", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/12497\/large.jpg?1477681044", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/12497\/original.jpg?1477681044" - }, - "coverImage": null, - "episodeCount": null, - "episodeLength": null, - "subtype": "TV", - "youtubeVideoId": "4eADGP3b9j0", - "ageRating": null, - "ageRatingGuide": null, - "showType": "TV", - "nsfw": false, - "relationships": { - "categories": { - "3": { - "title": "Comedy", - "slug": "comedy", - "description": null - }, - "9": { - "title": "Supernatural", - "slug": "supernatural", - "description": null - }, - "24": { - "title": "School", - "slug": "school", - "description": null - } - }, - "mappings": { - "9049": { - "externalSite": "myanimelist\/anime", - "externalId": "33731", - "relationships": [] - } - } - } - }, - "12710": { - "slug": "fate-grand-order-first-order", - "synopsis": "The story is set in the year 2015, during the final era over which magic still held sway. The humanity survival and security organization Caldea was established to observe the world that can only be seen by magic and the world that can only be measured by science \u2014 as well as to prevent the final extinction of mankind.\r\n\r\nThanks to the efforts of many researchers, the path of human history has been ensured for 100 years into the future. However, without warning, the realm of the future that was under constant observation by Caldea vanished. The extinction of humanity in 2017 was observed \u2014 no, confirmed.\r\n\r\nThe apparent cause of the extinction was in the Japanese city of Fuyuki in 2004. In that city, there was an \"unobservable realm\" which had never existed until now.\r\n\r\nCaldea issued the Grand Order for a \"Holy Grail Expedition,\" to investigate, uncover, and possibly destroy the singularity that apparently will cause the extinction of humanity.\r\n\r\n(Source: ANN)", - "coverImageTopOffset": 0, - "titles": { - "en": "", - "en_jp": "Fate\/Grand Order -First Order-", - "ja_jp": "" - }, - "canonicalTitle": "Fate\/Grand Order -First Order-", - "abbreviatedTitles": null, - "averageRating": null, - "ratingFrequencies": { - "0.5": "3", - "1.0": "9", - "1.5": "14", - "2.0": "13", - "2.5": "17", - "3.0": "53", - "3.5": "73", - "4.0": "57", - "4.5": "14", - "5.0": "20", - "nil": "120" - }, - "startDate": "2016-12-31", - "endDate": null, - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/12710\/tiny.jpg?1478137267", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/12710\/small.jpg?1478137267", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/12710\/medium.jpg?1478137267", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/12710\/large.jpg?1478137267", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/12710\/original.jpeg?1478137267" - }, - "coverImage": null, - "episodeCount": 1, - "episodeLength": null, - "subtype": "special", - "youtubeVideoId": "gd1gYH8g2Vg", - "ageRating": null, - "ageRatingGuide": "", - "showType": "special", - "nsfw": false, - "relationships": { - "categories": { - "8": { - "title": "Magic", - "slug": "magic", - "description": null - }, - "9": { - "title": "Supernatural", - "slug": "supernatural", - "description": null - }, - "11": { - "title": "Fantasy", - "slug": "fantasy", - "description": "" - }, - "1": { - "title": "Action", - "slug": "action", - "description": "" - } - }, - "mappings": { - "6914": { - "externalSite": "myanimelist\/anime", - "externalId": "34321", - "relationships": [] - } - } - } - }, - "11172": { - "slug": "classicaloid", - "synopsis": "Kanae's got a two oddball houseguests in her beloved grandmother's mansion: Moz and Beetho-san. However, these guys, with their crazy antics and supernatural musical powers, claim to be Classicaloid versions of maestros Mozart and Beethoven! Their powerful \u201cmujik\u201d arrangements evoke more than just emotions: they can make the stars fall, spirits dance, or even summon\u2026 giant robots? Friend or foe, Kanae is stuck with them, even as more classicaloids begin to invade her life. Will their presence usher in a new musical renaissance in her sleepy town, or will their explosive euphonics cut the standing ovation short?\n\n(Source: Sentai Filmworks)", - "coverImageTopOffset": 0, - "titles": { - "en": null, - "en_jp": "Classicaloid", - "ja_jp": null - }, - "canonicalTitle": "Classicaloid", - "abbreviatedTitles": null, - "averageRating": 3.3375220536964, - "ratingFrequencies": { - "0.5": "5", - "1.0": "6", - "1.5": "8", - "2.0": "9", - "2.5": "19", - "3.0": "20", - "3.5": "13", - "4.0": "5", - "4.5": "3", - "5.0": "13", - "nil": "586" - }, - "startDate": "2016-10-08", - "endDate": null, - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/11172\/tiny.jpg?1473684531", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/11172\/small.jpg?1473684531", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/11172\/medium.jpg?1473684531", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/11172\/large.jpg?1473684531", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/11172\/original.jpg?1473684531" - }, - "coverImage": null, - "episodeCount": 25, - "episodeLength": 24, - "subtype": "TV", - "youtubeVideoId": "3U2YT9b4QjI", - "ageRating": null, - "ageRatingGuide": null, - "showType": "TV", - "nsfw": false, - "relationships": { - "categories": { - "3": { - "title": "Comedy", - "slug": "comedy", - "description": null - }, - "35": { - "title": "Music", - "slug": "music", - "description": null - } - }, - "mappings": { - "1113": { - "externalSite": "myanimelist\/anime", - "externalId": "31157", - "relationships": [] - } - } - } - }, - "12260": { - "slug": "shuumatsu-no-izetta", - "synopsis": "The time is pre World War II that looks like Europe in an imaginary world. A large scale war abrupts and bloody battles are taking place through out the world. Eylstadt is a small country without a strong military force or natural resources. Fin\u00e9 who is the crown queen of Eylstadt decides to use a secret weapon against larger countries which was unheard of at that time to battle against larger countries. The secret weapon was using a witch named Izetta and her magical force to fight the war. Izetta is young (same age as Fin\u00e9) and the last surviving witch with burning red hair.\r\n\r\n(Source: Crunchyroll)", - "coverImageTopOffset": 0, - "titles": { - "en": "Izetta: The Last Witch", - "en_jp": "Shuumatsu no Izetta", - "ja_jp": "\u7d42\u672b\u306e\u30a4\u30bc\u30c3\u30bf" - }, - "canonicalTitle": "Shuumatsu no Izetta", - "abbreviatedTitles": null, - "averageRating": 3.6080106339216, - "ratingFrequencies": { - "0.5": "3", - "1.0": "10", - "1.5": "21", - "2.0": "48", - "2.5": "98", - "3.0": "169", - "3.5": "199", - "4.0": "143", - "4.5": "66", - "5.0": "77", - "nil": "2381" - }, - "startDate": "2016-10-01", - "endDate": null, - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/12260\/tiny.jpg?1475958976", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/12260\/small.jpg?1475958976", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/12260\/medium.jpg?1475958976", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/12260\/large.jpg?1475958976", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/12260\/original.png?1475958976" - }, - "coverImage": null, - "episodeCount": 12, - "episodeLength": 25, - "subtype": "TV", - "youtubeVideoId": "piEEGQdBho8", - "ageRating": null, - "ageRatingGuide": "", - "showType": "TV", - "nsfw": false, - "relationships": { - "categories": { - "8": { - "title": "Magic", - "slug": "magic", - "description": null - }, - "27": { - "title": "Historical", - "slug": "historical", - "description": null - }, - "28": { - "title": "Military", - "slug": "military", - "description": null - }, - "4": { - "title": "Drama", - "slug": "drama", - "description": "" - }, - "1": { - "title": "Action", - "slug": "action", - "description": "" - } - }, - "mappings": { - "3376": { - "externalSite": "myanimelist\/anime", - "externalId": "33433", - "relationships": [] - } - } - } - }, - "11945": { - "slug": "nyanbo", - "synopsis": "NHK announced that \"Nyanbo,\" a cat version of the \"Danbo\" cardboard robot character within Kiyohiko Azuma's Yotsuba&! manga, is inspiring a television anime that will premiere on NHK-E TV in October.\r\n\r\n(Source: ANN)", - "coverImageTopOffset": 20, - "titles": { - "en": "", - "en_jp": "Nyanbo!", - "ja_jp": "\u306b\u3083\u3093\u307c\u30fc!" - }, - "canonicalTitle": "Nyanbo!", - "abbreviatedTitles": null, - "averageRating": null, - "ratingFrequencies": { - "0.5": "1", - "1.0": "1", - "1.5": "3", - "2.0": "3", - "2.5": "3", - "3.0": "12", - "3.5": "4", - "4.0": "5", - "4.5": "1", - "5.0": "5", - "nil": "146" - }, - "startDate": "2016-09-27", - "endDate": null, - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/11945\/tiny.jpg?1458335123", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/11945\/small.jpg?1458335123", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/11945\/medium.jpg?1458335123", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/11945\/large.jpg?1458335123", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/11945\/original.png?1458335123" - }, - "coverImage": { - "small": "https:\/\/media.kitsu.io\/anime\/cover_images\/11945\/small.jpg?1458335194", - "large": "https:\/\/media.kitsu.io\/anime\/cover_images\/11945\/large.jpg?1458335194", - "original": "https:\/\/media.kitsu.io\/anime\/cover_images\/11945\/original.jpg?1458335194" - }, - "episodeCount": 26, - "episodeLength": 5, - "subtype": "TV", - "youtubeVideoId": "", - "ageRating": "PG", - "ageRatingGuide": "Children", - "showType": "TV", - "nsfw": false, - "relationships": { - "categories": { - "3": { - "title": "Comedy", - "slug": "comedy", - "description": null - } - }, - "mappings": { - "9580": { - "externalSite": "myanimelist\/anime", - "externalId": "32805", - "relationships": [] - } - } - } - }, - "11882": { - "slug": "bungou-stray-dogs-2", - "synopsis": "Second season of Bungou Stray Dogs.", - "coverImageTopOffset": 80, - "titles": { - "en": "", - "en_jp": "Bungou Stray Dogs 2nd Season", - "ja_jp": "" - }, - "canonicalTitle": "Bungou Stray Dogs 2nd Season", - "abbreviatedTitles": null, - "averageRating": 4.1712266171588, - "ratingFrequencies": { - "0.5": "1", - "1.0": "5", - "1.5": "2", - "2.0": "12", - "2.5": "15", - "3.0": "52", - "3.5": "119", - "4.0": "261", - "4.5": "173", - "5.0": "244", - "nil": "2175" - }, - "startDate": "2016-10-06", - "endDate": null, - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/11882\/tiny.jpg?1466782284", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/11882\/small.jpg?1466782284", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/11882\/medium.jpg?1466782284", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/11882\/large.jpg?1466782284", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/11882\/original.jpg?1466782284" - }, - "coverImage": { - "small": "https:\/\/media.kitsu.io\/anime\/cover_images\/11882\/small.jpg?1462734002", - "large": "https:\/\/media.kitsu.io\/anime\/cover_images\/11882\/large.jpg?1462734002", - "original": "https:\/\/media.kitsu.io\/anime\/cover_images\/11882\/original.jpg?1462734002" - }, - "episodeCount": 12, - "episodeLength": 24, - "subtype": "TV", - "youtubeVideoId": "aeX94e7V0_w", - "ageRating": "R", - "ageRatingGuide": "", - "showType": "TV", - "nsfw": false, - "relationships": { - "categories": { - "7": { - "title": "Mystery", - "slug": "mystery", - "description": null - }, - "9": { - "title": "Supernatural", - "slug": "supernatural", - "description": null - }, - "4": { - "title": "Drama", - "slug": "drama", - "description": "" - }, - "1": { - "title": "Action", - "slug": "action", - "description": "" - } - }, - "mappings": { - "3158": { - "externalSite": "myanimelist\/anime", - "externalId": "32867", - "relationships": [] - } - } - } - }, - "11363": { - "slug": "mahou-shoujo-ikusei-keikaku", - "synopsis": "The highly popular social network game \"Magical Girl Raising Project\" is a miraculous game that produces real Magical Girls with a chance of 1 in 10000 for each person. Girls who are lucky enough to gain the power of magic spend fulfilling days. But one day, the administration arbitrarily announces that \"There are too many magical girls so they will be halved\". The curtain will now be raised on the relentless and merciless survival game between 16 magical girls.\r\n\r\n(Source: Baka-Tsuki)", - "coverImageTopOffset": 300, - "titles": { - "en": "Magical Girl Raising Project", - "en_jp": "Mahou Shoujo Ikusei Keikaku", - "ja_jp": "" - }, - "canonicalTitle": "Mahou Shoujo Ikusei Keikaku", - "abbreviatedTitles": null, - "averageRating": 3.5054257833898, - "ratingFrequencies": { - "0.5": "4", - "1.0": "16", - "1.5": "13", - "2.0": "33", - "2.5": "54", - "3.0": "99", - "3.5": "141", - "4.0": "121", - "4.5": "55", - "5.0": "45", - "nil": "1458" - }, - "startDate": "2016-10-02", - "endDate": null, - "posterImage": { - "tiny": "https:\/\/media.kitsu.io\/anime\/poster_images\/11363\/tiny.jpg?1469134150", - "small": "https:\/\/media.kitsu.io\/anime\/poster_images\/11363\/small.jpg?1469134150", - "medium": "https:\/\/media.kitsu.io\/anime\/poster_images\/11363\/medium.jpg?1469134150", - "large": "https:\/\/media.kitsu.io\/anime\/poster_images\/11363\/large.jpg?1469134150", - "original": "https:\/\/media.kitsu.io\/anime\/poster_images\/11363\/original.jpg?1469134150" - }, - "coverImage": { - "small": "https:\/\/media.kitsu.io\/anime\/cover_images\/11363\/small.jpg?1480567882", - "large": "https:\/\/media.kitsu.io\/anime\/cover_images\/11363\/large.jpg?1480567882", - "original": "https:\/\/media.kitsu.io\/anime\/cover_images\/11363\/original.jpg?1480567882" - }, - "episodeCount": 12, - "episodeLength": 24, - "subtype": "TV", - "youtubeVideoId": "p4YXswlZHrA", - "ageRating": "PG", - "ageRatingGuide": "Teens 13 or older", - "showType": "TV", - "nsfw": false, - "relationships": { - "categories": { - "9": { - "title": "Supernatural", - "slug": "supernatural", - "description": null - }, - "21": { - "title": "Thriller", - "slug": "thriller", - "description": null - }, - "47": { - "title": "Mahou Shoujo", - "slug": "mahou-shoujo", - "description": "Magical Girls" - }, - "11": { - "title": "Fantasy", - "slug": "fantasy", - "description": "" - }, - "1": { - "title": "Action", - "slug": "action", - "description": "" - } - }, - "mappings": { - "342": { - "externalSite": "myanimelist\/anime", - "externalId": "33003", - "relationships": [] - } - } - } - } - } - } + "data": { + "findLibraryEntryById": { + "id": "435513", + "updatedAt": "2020-10-20T16:35:52Z", + "notes": "", + "nsfw": false, + "private": false, + "progress": 7, + "reconsumeCount": 0, + "reconsuming": false, + "status": "CURRENT", + "rating": null, + "media": { + "id": "185", + "slug": "r-o-d", + "ageRating": "PG", + "categories": { + "nodes": [ + { + "title": { + "en": "Science Fiction" + } + }, + { + "title": { + "en": "Japan" + } + }, + { + "title": { + "en": "Action" + } + }, + { + "title": { + "en": "Plot Continuity" + } + }, + { + "title": { + "en": "Present" + } + }, + { + "title": { + "en": "Super Power" + } + }, + { + "title": { + "en": "Adventure" + } + }, + { + "title": { + "en": "Comedy" + } + } + ] + }, + "mappings": { + "nodes": [ + { + "externalId": "894", + "externalSite": "ANIDB" + }, + { + "externalId": "209", + "externalSite": "ANILIST_ANIME" + }, + { + "externalId": "VP75muO4EK", + "externalSite": "AOZORA" + }, + { + "externalId": "209", + "externalSite": "MYANIMELIST_ANIME" + }, + { + "externalId": "82319/1", + "externalSite": "THETVDB" + }, + { + "externalId": "82319", + "externalSite": "THETVDB_SERIES" + }, + { + "externalId": "39995", + "externalSite": "TRAKT" + } + ] + }, + "posterImage": { + "views": [ + { + "width": 110, + "height": 156, + "url": "https://media.kitsu.io/anime/poster_images/185/tiny.jpg?1597697520" + }, + { + "width": 284, + "height": 402, + "url": "https://media.kitsu.io/anime/poster_images/185/small.jpg?1597697520" + }, + { + "width": 390, + "height": 554, + "url": "https://media.kitsu.io/anime/poster_images/185/medium.jpg?1597697520" + }, + { + "width": 550, + "height": 780, + "url": "https://media.kitsu.io/anime/poster_images/185/large.jpg?1597697520" + } + ], + "original": { + "width": 225, + "height": 314, + "url": "https://media.kitsu.io/anime/poster_images/185/original.jpg?1597697520" + } + }, + "startDate": "2003-09-01", + "endDate": "2004-03-16", + "titles": { + "canonical": "R.O.D the TV", + "localized": { + "en": "R.O.D -The TV-", + "en_jp": "R.O.D the TV", + "en_us": "R.O.D -The TV-", + "ja_jp": "アール・オー・ディー ザ・ティーヴィー" + }, + "canonicalLocale": "en_jp" + }, + "type": "Anime", + "episodeCount": 26, + "episodeLength": 1500, + "streamingLinks": { + "nodes": [ + { + "dubs": [ + "ja" + ], + "subs": [ + "en" + ], + "regions": [ + "US" + ], + "streamer": { + "id": "3", + "siteName": "Crunchyroll" + }, + "url": "http://www.crunchyroll.com/rod" + }, + { + "dubs": [ + "ja" + ], + "subs": [ + "en" + ], + "regions": [ + "US" + ], + "streamer": { + "id": "1", + "siteName": "Hulu" + }, + "url": "http://www.hulu.com/rod-the-tv" + } + ] + }, + "subtype": "TV" + } + } + } } \ No newline at end of file diff --git a/tests/AnimeClient/test_data/Kitsu/mangaAfterTransform.json b/tests/AnimeClient/test_data/Kitsu/mangaAfterTransform.json deleted file mode 100644 index 2be310c8..00000000 --- a/tests/AnimeClient/test_data/Kitsu/mangaAfterTransform.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "title": "Bokura wa Minna Kawaisou", - "en_title": null, - "jp_title": "Bokura wa Minna Kawaisou", - "cover_image": "https:\/\/media.kitsu.io\/manga\/poster_images\/20286\/small.jpg?1434293999", - "manga_type": "manga", - "chapter_count": "-", - "volume_count": "-", - "synopsis": "Usa, a high-school student aspiring to begin a bachelor lifestyle, moves into a new apartment only to discover that he not only shares a room with a perverted roommate that has an obsession for underaged girls, but also that another girl, Ritsu, a love-at-first-sight, is living in the same building as well!\n(Source: Kirei Cake)", - "url": "https:\/\/kitsu.io\/manga\/bokura-wa-minna-kawaisou", - "genres": ["Comedy","Romance","School","Slice of Life","Thriller"] -} \ No newline at end of file diff --git a/tests/AnimeClient/test_data/Kitsu/mangaBeforeTransform.json b/tests/AnimeClient/test_data/Kitsu/mangaBeforeTransform.json index 6126fc64..4180c361 100644 --- a/tests/AnimeClient/test_data/Kitsu/mangaBeforeTransform.json +++ b/tests/AnimeClient/test_data/Kitsu/mangaBeforeTransform.json @@ -1,197 +1,465 @@ { - "data": [{ - "id": "20286", - "type": "manga", - "links": { - "self": "https://kitsu.io/api/edge/manga/20286" + "data": { + "findMangaBySlug": { + "id": "20286", + "ageRating": "PG", + "ageRatingGuide": "", + "posterImage": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/manga/poster_images/20286/original.jpg?1434293999", + "width": null }, - "attributes": { - "slug": "bokura-wa-minna-kawaisou", - "synopsis": "Usa, a high-school student aspiring to begin a bachelor lifestyle, moves into a new apartment only to discover that he not only shares a room with a perverted roommate that has an obsession for underaged girls, but also that another girl, Ritsu, a love-at-first-sight, is living in the same building as well!\n(Source: Kirei Cake)", - "coverImageTopOffset": 40, - "titles": { - "en_us": null, - "en_jp": "Bokura wa Minna Kawaisou" - }, - "canonicalTitle": "Bokura wa Minna Kawaisou", - "abbreviatedTitles": null, - "averageRating": 4.12281805954249, - "ratingFrequencies": { - "0.5": "0", - "1.0": "1", - "1.5": "0", - "2.0": "1", - "2.5": "2", - "3.0": "6", - "3.5": "21", - "4.0": "38", - "4.5": "35", - "5.0": "43", - "nil": "16" - }, - "favoritesCount": 0, - "startDate": "2010-01-01", - "endDate": null, - "popularityRank": 262, - "ratingRank": 127, - "ageRating": "PG", - "ageRatingGuide": null, - "posterImage": { - "tiny": "https://media.kitsu.io/manga/poster_images/20286/tiny.jpg?1434293999", - "small": "https://media.kitsu.io/manga/poster_images/20286/small.jpg?1434293999", - "medium": "https://media.kitsu.io/manga/poster_images/20286/medium.jpg?1434293999", - "large": "https://media.kitsu.io/manga/poster_images/20286/large.jpg?1434293999", - "original": "https://media.kitsu.io/manga/poster_images/20286/original.jpg?1434293999" - }, - "coverImage": { - "small": "https://media.kitsu.io/manga/cover_images/20286/small.jpg?1430793688", - "large": "https://media.kitsu.io/manga/cover_images/20286/large.jpg?1430793688", - "original": "https://media.kitsu.io/manga/cover_images/20286/original.jpg?1430793688" - }, - "subtype": "manga", - "chapterCount": null, - "volumeCount": 0, - "serialization": "Young King Ours", - "mangaType": "manga" - }, - "relationships": { - "genres": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/genres", - "related": "https://kitsu.io/api/edge/manga/20286/genres" - }, - "data": [{ - "type": "genres", - "id": "3" - }, { - "type": "genres", - "id": "24" - }, { - "type": "genres", - "id": "16" - }, { - "type": "genres", - "id": "14" - }, { - "type": "genres", - "id": "18" - }] - }, - "castings": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/castings", - "related": "https://kitsu.io/api/edge/manga/20286/castings" - } - }, - "installments": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/installments", - "related": "https://kitsu.io/api/edge/manga/20286/installments" - } - }, - "mappings": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/mappings", - "related": "https://kitsu.io/api/edge/manga/20286/mappings" - }, - "data": [{ - "type": "mappings", - "id": "48014" - }] - }, - "reviews": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/reviews", - "related": "https://kitsu.io/api/edge/manga/20286/reviews" - } - }, - "mediaRelationships": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/media-relationships", - "related": "https://kitsu.io/api/edge/manga/20286/media-relationships" - } + "views": [ + { + "height": null, + "name": "tiny", + "url": "https://media.kitsu.io/manga/poster_images/20286/tiny.jpg?1434293999", + "width": null + }, + { + "height": null, + "name": "small", + "url": "https://media.kitsu.io/manga/poster_images/20286/small.jpg?1434293999", + "width": null + }, + { + "height": null, + "name": "medium", + "url": "https://media.kitsu.io/manga/poster_images/20286/medium.jpg?1434293999", + "width": null + }, + { + "height": null, + "name": "large", + "url": "https://media.kitsu.io/manga/poster_images/20286/large.jpg?1434293999", + "width": null + } + ] + }, + "categories": { + "nodes": [ + { + "title": { + "en": "Comedy" } - } - }], - "included": [{ - "id": "3", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/3" - }, - "attributes": { - "name": "Comedy", - "slug": "comedy", - "description": null - } - }, { - "id": "24", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/24" - }, - "attributes": { - "name": "School", - "slug": "school", - "description": null - } - }, { - "id": "16", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/16" - }, - "attributes": { - "name": "Slice of Life", - "slug": "slice-of-life", - "description": "" - } - }, { - "id": "14", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/14" - }, - "attributes": { - "name": "Romance", - "slug": "romance", - "description": "" - } - }, { - "id": "18", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/18" - }, - "attributes": { - "name": "Thriller", - "slug": "thriller", - "description": null - } - }, { - "id": "48014", - "type": "mappings", - "links": { - "self": "https://kitsu.io/api/edge/mappings/48014" - }, - "attributes": { - "externalSite": "myanimelist/manga", - "externalId": "26769" - }, - "relationships": { - "media": { - "links": { - "self": "https://kitsu.io/api/edge/mappings/48014/relationships/media", - "related": "https://kitsu.io/api/edge/mappings/48014/media" - } + }, + { + "title": { + "en": "School Life" } + }, + { + "title": { + "en": "Slice of Life" + } + }, + { + "title": { + "en": "Romance" + } + } + ] + }, + "chapterCount": 90, + "volumeCount": 10, + "characters": { + "nodes": [ + { + "character": { + "id": "83463", + "names": { + "canonical": "Yoko Mabuchi", + "alternatives": [ + "Yoko-chan" + ] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png", + "width": null + } + }, + "slug": "yoko-mabuchi" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "40540", + "names": { + "canonical": "Ritsu Kawai", + "alternatives": [ + "Ricchan" + ] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/40540/original.jpg?1483096805", + "width": null + } + }, + "slug": "ritsu-kawai" + }, + "role": "MAIN" + }, + { + "character": { + "id": "40541", + "names": { + "canonical": "Kazunari Usa", + "alternatives": [ + "Oddball handler" + ] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/40541/original.jpg?1483096805", + "width": null + } + }, + "slug": "kazunari-usa" + }, + "role": "MAIN" + }, + { + "character": { + "id": "62591", + "names": { + "canonical": "Chinatsu", + "alternatives": [] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/62591/original.jpg?1485073100", + "width": null + } + }, + "slug": "chinatsu" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "72839", + "names": { + "canonical": "Hayashi", + "alternatives": [] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/72839/original.jpg?1485079724", + "width": null + } + }, + "slug": "hayashi-ec3a2705-5d5c-493c-b172-bbee2d04b5b9" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "78362", + "names": { + "canonical": "Houjou", + "alternatives": [ + "Yamamoto" + ] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/78362/original.jpg?1485081676", + "width": null + } + }, + "slug": "houjou" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "55131", + "names": { + "canonical": "Sumiko Kawai", + "alternatives": [] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/55131/original.jpg?1483096805", + "width": null + } + }, + "slug": "sumiko-kawai" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "90353", + "names": { + "canonical": "Kurokawa", + "alternatives": [ + "Saionji" + ] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/90353/original.jpg?1485086356", + "width": null + } + }, + "slug": "kurokawa-a493ddf6-0f02-4abf-8b18-ab6ae2198b6e" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "77996", + "names": { + "canonical": "Maemura", + "alternatives": [] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/77996/original.jpg?1485081552", + "width": null + } + }, + "slug": "maemura" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "55132", + "names": { + "canonical": "Mayumi Nishikino", + "alternatives": [] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/55132/original.jpg?1483096805", + "width": null + } + }, + "slug": "mayumi-nishikino" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "74335", + "names": { + "canonical": "Tae Shinohara", + "alternatives": [] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/74335/original.jpg?1485080245", + "width": null + } + }, + "slug": "tae-shinohara" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "95032", + "names": { + "canonical": "Shirosaki", + "alternatives": [ + "Shiro" + ] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/95032/original.jpg?1485088329", + "width": null + } + }, + "slug": "shirosaki-2ed2e15c-9cee-4756-92f1-027c4820e224" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "55133", + "names": { + "canonical": "Tagami", + "alternatives": [] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/55133/original.jpg?1483096805", + "width": null + } + }, + "slug": "tagami" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "71479", + "names": { + "canonical": "Miharu Tsuneda", + "alternatives": [ + "Tsuneko" + ] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/71479/original.jpg?1485079211", + "width": null + } + }, + "slug": "miharu-tsuneda" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "55134", + "names": { + "canonical": "Mother Usa", + "alternatives": [] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "/images/original/missing.png?1483096805", + "width": null + } + }, + "slug": "mother-usa" + }, + "role": "BACKGROUND" + }, + { + "character": { + "id": "55135", + "names": { + "canonical": "Sayaka Watanabe", + "alternatives": [ + "Nabe" + ] + }, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/characters/images/55135/original.jpg?1483096805", + "width": null + } + }, + "slug": "sayaka-watanabe" + }, + "role": "BACKGROUND" + } + ], + "pageInfo": { + "endCursor": "MTY", + "hasNextPage": false, + "hasPreviousPage": false, + "startCursor": "MQ" } - }], - "meta": { - "count": 1 - }, - "links": { - "first": "https://kitsu.io/api/edge/manga?filter%5Bslug%5D=bokura-wa-minna-kawaisou&include=genres%2Cmappings&page%5Blimit%5D=10&page%5Boffset%5D=0", - "last": "https://kitsu.io/api/edge/manga?filter%5Bslug%5D=bokura-wa-minna-kawaisou&include=genres%2Cmappings&page%5Blimit%5D=10&page%5Boffset%5D=0" + }, + "description": { + "en": "Usa, a high-school student aspiring to begin a bachelor lifestyle, moves into a new apartment only to discover that he not only shares a room with a perverted roommate that has an obsession for underaged girls, but also that another girl, Ritsu, a love-at-first-sight, is living in the same building as well!\r\n(Source: Kirei Cake)" + }, + "startDate": "2010-04-30", + "endDate": "2017-12-28", + "mappings": { + "nodes": [ + { + "externalId": "56769", + "externalSite": "ANILIST_MANGA" + }, + { + "externalId": "26769", + "externalSite": "MYANIMELIST_MANGA" + } + ] + }, + "sfw": true, + "slug": "bokura-wa-minna-kawaisou", + "staff": { + "nodes": [ + { + "person": { + "id": "8712", + "birthday": null, + "image": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/people/images/8712/original.jpg?1533271952", + "width": null + }, + "views": [] + }, + "names": { + "alternatives": [], + "canonical": "en", + "localized": { + "en": "Ruri Miyahara", + "ja_jp": "宮原 るり" + } + }, + "slug": "ruri-miyahara" + }, + "role": "Story \u0026 Art" + } + ], + "pageInfo": { + "endCursor": "MQ", + "hasNextPage": false, + "hasPreviousPage": false, + "startCursor": "MQ" + } + }, + "status": "FINISHED", + "subtype": "MANGA", + "titles": { + "canonical": "Bokura wa Minna Kawai-sou", + "canonicalLocale": "en_jp", + "localized": { + "en": "The Kawai Complex Guide to Manors and Hostel", + "en_jp": "Bokura wa Minna Kawai-sou", + "en_us": "The Kawai Complex Guide to Manors and Hostel", + "ja_jp": "僕らはみんな河合荘" + } + } } + } } \ No newline at end of file diff --git a/tests/AnimeClient/test_data/Kitsu/mangaListAfterTransform.json b/tests/AnimeClient/test_data/Kitsu/mangaListAfterTransform.json deleted file mode 100644 index 50ab7a9c..00000000 --- a/tests/AnimeClient/test_data/Kitsu/mangaListAfterTransform.json +++ /dev/null @@ -1,126 +0,0 @@ -[{ - "id": "15084773", - "mal_id": "26769", - "chapters": { - "read": 67, - "total": "-" - }, - "volumes": { - "read": "-", - "total": "-" - }, - "manga": { - "titles": ["Bokura wa Minna Kawaisou"], - "alternate_title": null, - "slug": "bokura-wa-minna-kawaisou", - "url": "https:\/\/kitsu.io\/manga\/bokura-wa-minna-kawaisou", - "type": "manga", - "image": "https:\/\/media.kitsu.io\/manga\/poster_images\/20286\/small.jpg?1434293999", - "genres": ["Comedy", "Romance", "School", "Slice of Life", "Thriller"] - }, - "reading_status": "current", - "notes": "", - "rereading": false, - "reread": 0, - "user_rating": 9 -}, { - "id": "15085607", - "mal_id": "16", - "chapters": { - "read": 17, - "total": 120 - }, - "volumes": { - "read": "-", - "total": 14 - }, - "manga": { - "titles": ["Love Hina"], - "alternate_title": null, - "slug": "love-hina", - "url": "https:\/\/kitsu.io\/manga\/love-hina", - "type": "manga", - "image": "https:\/\/media.kitsu.io\/manga\/poster_images\/47\/small.jpg?1434249493", - "genres": ["Comedy", "Ecchi", "Harem", "Romance", "Sports"] - }, - "reading_status": "current", - "notes": "", - "rereading": false, - "reread": 0, - "user_rating": 7 -}, { - "id": "15084529", - "mal_id": "35003", - "chapters": { - "read": 16, - "total": "-" - }, - "volumes": { - "read": "-", - "total": "-" - }, - "manga": { - "titles": ["Yamada-kun to 7-nin no Majo", "Yamada-kun and the Seven Witches"], - "alternate_title": null, - "slug": "yamada-kun-to-7-nin-no-majo", - "url": "https:\/\/kitsu.io\/manga\/yamada-kun-to-7-nin-no-majo", - "type": "manga", - "image": "https:\/\/media.kitsu.io\/manga\/poster_images\/11777\/small.jpg?1438784325", - "genres": ["Comedy", "Ecchi", "Gender Bender", "Romance", "School", "Sports", "Supernatural"] - }, - "reading_status": "current", - "notes": "", - "rereading": false, - "reread": 0, - "user_rating": 9 -}, { - "id": "15312827", - "mal_id": "78523", - "chapters": { - "read": 68, - "total": "-" - }, - "volumes": { - "read": "-", - "total": "-" - }, - "manga": { - "titles": ["ReLIFE"], - "alternate_title": null, - "slug": "relife", - "url": "https:\/\/kitsu.io\/manga\/relife", - "type": "manga", - "image": "https:\/\/media.kitsu.io\/manga\/poster_images\/27175\/small.jpg?1464379411", - "genres": ["Romance", "School", "Slice of Life"] - }, - "reading_status": "current", - "notes": "", - "rereading": false, - "reread": 0, - "user_rating": "-" -}, { - "id": "15084769", - "mal_id": "60815", - "chapters": { - "read": 43, - "total": "-" - }, - "volumes": { - "read": "-", - "total": "-" - }, - "manga": { - "titles": ["Joshikausei"], - "alternate_title": null, - "slug": "joshikausei", - "url": "https:\/\/kitsu.io\/manga\/joshikausei", - "type": "manga", - "image": "https:\/\/media.kitsu.io\/manga\/poster_images\/25491\/small.jpg?1434305043", - "genres": ["Comedy", "School", "Slice of Life"] - }, - "reading_status": "current", - "notes": "", - "rereading": false, - "reread": 0, - "user_rating": 8 -}] \ No newline at end of file diff --git a/tests/AnimeClient/test_data/Kitsu/mangaListBeforeTransform.json b/tests/AnimeClient/test_data/Kitsu/mangaListBeforeTransform.json index 585921e5..4090e25c 100644 --- a/tests/AnimeClient/test_data/Kitsu/mangaListBeforeTransform.json +++ b/tests/AnimeClient/test_data/Kitsu/mangaListBeforeTransform.json @@ -1,1250 +1,189 @@ { - "data": [ - { - "id": "15084773", - "type": "libraryEntries", - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084773" - }, - "attributes": { - "status": "current", - "progress": 67, - "reconsuming": false, - "reconsumeCount": 0, - "notes": "", - "private": false, - "rating": "4.5", - "ratingTwenty": "18", - "updatedAt": "2017-01-09T17:51:16.691Z" - }, - "relationships": { - "user": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084773/relationships/user", - "related": "https://kitsu.io/api/edge/library-entries/15084773/user" - } - }, - "anime": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084773/relationships/anime", - "related": "https://kitsu.io/api/edge/library-entries/15084773/anime" - } - }, - "manga": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084773/relationships/manga", - "related": "https://kitsu.io/api/edge/library-entries/15084773/manga" - } - }, - "drama": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084773/relationships/drama", - "related": "https://kitsu.io/api/edge/library-entries/15084773/drama" - } - }, - "review": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084773/relationships/review", - "related": "https://kitsu.io/api/edge/library-entries/15084773/review" - } - }, - "media": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084773/relationships/media", - "related": "https://kitsu.io/api/edge/library-entries/15084773/media" - }, - "data": { - "type": "manga", - "id": "20286" - } - }, - "unit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084773/relationships/unit", - "related": "https://kitsu.io/api/edge/library-entries/15084773/unit" - } - }, - "nextUnit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084773/relationships/next-unit", - "related": "https://kitsu.io/api/edge/library-entries/15084773/next-unit" - } - } - } - }, - { - "id": "15085607", - "type": "libraryEntries", - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15085607" - }, - "attributes": { - "status": "current", - "progress": 17, - "reconsuming": false, - "reconsumeCount": 0, - "notes": "", - "private": false, - "rating": "3.5", - "ratingTwenty": "14", - "updatedAt": "2017-01-09T17:50:19.594Z" - }, - "relationships": { - "user": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15085607/relationships/user", - "related": "https://kitsu.io/api/edge/library-entries/15085607/user" - } - }, - "anime": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15085607/relationships/anime", - "related": "https://kitsu.io/api/edge/library-entries/15085607/anime" - } - }, - "manga": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15085607/relationships/manga", - "related": "https://kitsu.io/api/edge/library-entries/15085607/manga" - } - }, - "drama": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15085607/relationships/drama", - "related": "https://kitsu.io/api/edge/library-entries/15085607/drama" - } - }, - "review": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15085607/relationships/review", - "related": "https://kitsu.io/api/edge/library-entries/15085607/review" - } - }, - "media": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15085607/relationships/media", - "related": "https://kitsu.io/api/edge/library-entries/15085607/media" - }, - "data": { - "type": "manga", - "id": "47" - } - }, - "unit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15085607/relationships/unit", - "related": "https://kitsu.io/api/edge/library-entries/15085607/unit" - } - }, - "nextUnit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15085607/relationships/next-unit", - "related": "https://kitsu.io/api/edge/library-entries/15085607/next-unit" - } - } - } - }, - { - "id": "15084529", - "type": "libraryEntries", - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084529" - }, - "attributes": { - "status": "current", - "progress": 16, - "reconsuming": false, - "reconsumeCount": 0, - "notes": "", - "private": false, - "rating": "4.5", - "ratingTwenty": "18", - "updatedAt": "2016-04-07T17:10:13.022Z" - }, - "relationships": { - "user": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084529/relationships/user", - "related": "https://kitsu.io/api/edge/library-entries/15084529/user" - } - }, - "anime": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084529/relationships/anime", - "related": "https://kitsu.io/api/edge/library-entries/15084529/anime" - } - }, - "manga": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084529/relationships/manga", - "related": "https://kitsu.io/api/edge/library-entries/15084529/manga" - } - }, - "drama": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084529/relationships/drama", - "related": "https://kitsu.io/api/edge/library-entries/15084529/drama" - } - }, - "review": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084529/relationships/review", - "related": "https://kitsu.io/api/edge/library-entries/15084529/review" - } - }, - "media": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084529/relationships/media", - "related": "https://kitsu.io/api/edge/library-entries/15084529/media" - }, - "data": { - "type": "manga", - "id": "11777" - } - }, - "unit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084529/relationships/unit", - "related": "https://kitsu.io/api/edge/library-entries/15084529/unit" - } - }, - "nextUnit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084529/relationships/next-unit", - "related": "https://kitsu.io/api/edge/library-entries/15084529/next-unit" - } - } - } - }, - { - "id": "15312827", - "type": "libraryEntries", - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15312827" - }, - "attributes": { - "status": "current", - "progress": 68, - "reconsuming": false, - "reconsumeCount": 0, - "notes": "", - "private": false, - "rating": null, - "ratingTwenty": null, - "updatedAt": "2016-03-08T15:45:45.818Z" - }, - "relationships": { - "user": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15312827/relationships/user", - "related": "https://kitsu.io/api/edge/library-entries/15312827/user" - } - }, - "anime": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15312827/relationships/anime", - "related": "https://kitsu.io/api/edge/library-entries/15312827/anime" - } - }, - "manga": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15312827/relationships/manga", - "related": "https://kitsu.io/api/edge/library-entries/15312827/manga" - } - }, - "drama": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15312827/relationships/drama", - "related": "https://kitsu.io/api/edge/library-entries/15312827/drama" - } - }, - "review": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15312827/relationships/review", - "related": "https://kitsu.io/api/edge/library-entries/15312827/review" - } - }, - "media": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15312827/relationships/media", - "related": "https://kitsu.io/api/edge/library-entries/15312827/media" - }, - "data": { - "type": "manga", - "id": "27175" - } - }, - "unit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15312827/relationships/unit", - "related": "https://kitsu.io/api/edge/library-entries/15312827/unit" - } - }, - "nextUnit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15312827/relationships/next-unit", - "related": "https://kitsu.io/api/edge/library-entries/15312827/next-unit" - } - } - } - }, - { - "id": "15084769", - "type": "libraryEntries", - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084769" - }, - "attributes": { - "status": "current", - "progress": 43, - "reconsuming": false, - "reconsumeCount": 0, - "notes": "", - "private": false, - "rating": "4.0", - "ratingTwenty": "16", - "updatedAt": "2016-02-02T15:06:07.166Z" - }, - "relationships": { - "user": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084769/relationships/user", - "related": "https://kitsu.io/api/edge/library-entries/15084769/user" - } - }, - "anime": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084769/relationships/anime", - "related": "https://kitsu.io/api/edge/library-entries/15084769/anime" - } - }, - "manga": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084769/relationships/manga", - "related": "https://kitsu.io/api/edge/library-entries/15084769/manga" - } - }, - "drama": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084769/relationships/drama", - "related": "https://kitsu.io/api/edge/library-entries/15084769/drama" - } - }, - "review": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084769/relationships/review", - "related": "https://kitsu.io/api/edge/library-entries/15084769/review" - } - }, - "media": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084769/relationships/media", - "related": "https://kitsu.io/api/edge/library-entries/15084769/media" - }, - "data": { - "type": "manga", - "id": "25491" - } - }, - "unit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084769/relationships/unit", - "related": "https://kitsu.io/api/edge/library-entries/15084769/unit" - } - }, - "nextUnit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/15084769/relationships/next-unit", - "related": "https://kitsu.io/api/edge/library-entries/15084769/next-unit" - } - } - } - } - ], - "included": [ - { - "id": "20286", - "type": "manga", - "links": { - "self": "https://kitsu.io/api/edge/manga/20286" - }, - "attributes": { - "slug": "bokura-wa-minna-kawaisou", - "synopsis": "Usa, a high-school student aspiring to begin a bachelor lifestyle, moves into a new apartment only to discover that he not only shares a room with a perverted roommate that has an obsession for underaged girls, but also that another girl, Ritsu, a love-at-first-sight, is living in the same building as well!\n(Source: Kirei Cake)", - "coverImageTopOffset": 40, - "titles": { - "en": null, - "en_jp": "Bokura wa Minna Kawaisou" - }, - "canonicalTitle": "Bokura wa Minna Kawaisou", - "abbreviatedTitles": null, - "averageRating": 4.12518266974679, - "ratingFrequencies": { - "0.5": "0", - "1.0": "1", - "1.5": "0", - "2.0": "1", - "2.5": "2", - "3.0": "6", - "3.5": "22", - "4.0": "39", - "4.5": "39", - "5.0": "44", - "nil": "16" - }, - "favoritesCount": 32, - "startDate": "2010-01-01", - "endDate": null, - "popularityRank": 263, - "ratingRank": 124, - "ageRating": "PG", - "ageRatingGuide": null, - "subtype": "manga", - "posterImage": { - "tiny": "https://media.kitsu.io/manga/poster_images/20286/tiny.jpg?1434293999", - "small": "https://media.kitsu.io/manga/poster_images/20286/small.jpg?1434293999", - "medium": "https://media.kitsu.io/manga/poster_images/20286/medium.jpg?1434293999", - "large": "https://media.kitsu.io/manga/poster_images/20286/large.jpg?1434293999", - "original": "https://media.kitsu.io/manga/poster_images/20286/original.jpg?1434293999" - }, - "coverImage": { - "tiny": "https://media.kitsu.io/manga/cover_images/20286/tiny.jpg?1430793688", - "small": "https://media.kitsu.io/manga/cover_images/20286/small.jpg?1430793688", - "large": "https://media.kitsu.io/manga/cover_images/20286/large.jpg?1430793688", - "original": "https://media.kitsu.io/manga/cover_images/20286/original.jpg?1430793688" - }, - "chapterCount": null, - "volumeCount": 0, - "serialization": "Young King Ours", - "mangaType": "manga" - }, - "relationships": { - "categories": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/categories", - "related": "https://kitsu.io/api/edge/manga/20286/categories" - }, - "data": [ - { - "type": "categories", - "id": "3" - }, - { - "type": "categories", - "id": "21" - }, - { - "type": "categories", - "id": "24" - }, - { - "type": "categories", - "id": "16" - }, - { - "type": "categories", - "id": "14" - } - ] - }, - "castings": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/castings", - "related": "https://kitsu.io/api/edge/manga/20286/castings" - } - }, - "installments": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/installments", - "related": "https://kitsu.io/api/edge/manga/20286/installments" - } - }, - "mappings": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/mappings", - "related": "https://kitsu.io/api/edge/manga/20286/mappings" - }, - "data": [ - { - "type": "mappings", - "id": "48014" - } - ] - }, - "reviews": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/reviews", - "related": "https://kitsu.io/api/edge/manga/20286/reviews" - } - }, - "mediaRelationships": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/media-relationships", - "related": "https://kitsu.io/api/edge/manga/20286/media-relationships" - } - }, - "mangaCharacters": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/manga-characters", - "related": "https://kitsu.io/api/edge/manga/20286/manga-characters" - } - }, - "mangaStaff": { - "links": { - "self": "https://kitsu.io/api/edge/manga/20286/relationships/manga-staff", - "related": "https://kitsu.io/api/edge/manga/20286/manga-staff" - } - } - } - }, - { - "id": "47", - "type": "manga", - "links": { - "self": "https://kitsu.io/api/edge/manga/47" - }, - "attributes": { - "slug": "love-hina", - "synopsis": "Keitaro has had great difficulty getting into the university of his choice and no luck in meeting women. In a desperate effort to go into seclusion and study for his entrance exams, he volunteers to take over running his grandmother's hotel. His plans are ruined when he discovers that the \"hotel\" is actually an all-girls dormitory ... and some serious distractions ensue.\r\n(Source: Tokyopop)", - "coverImageTopOffset": 75, - "titles": { - "en": null, - "en_jp": "Love Hina" - }, - "canonicalTitle": "Love Hina", - "abbreviatedTitles": null, - "averageRating": 3.90477702884008, - "ratingFrequencies": { - "0.5": "1", - "1.0": "6", - "1.5": "4", - "2.0": "16", - "2.5": "24", - "3.0": "40", - "3.5": "79", - "4.0": "93", - "4.5": "73", - "5.0": "104", - "nil": "19" - }, - "favoritesCount": 64, - "startDate": "1998-10-21", - "endDate": "2001-10-31", - "popularityRank": 145, - "ratingRank": 420, - "ageRating": "R", - "ageRatingGuide": "Ecchi", - "subtype": "manga", - "posterImage": { - "tiny": "https://media.kitsu.io/manga/poster_images/47/tiny.jpg?1434249493", - "small": "https://media.kitsu.io/manga/poster_images/47/small.jpg?1434249493", - "medium": "https://media.kitsu.io/manga/poster_images/47/medium.jpg?1434249493", - "large": "https://media.kitsu.io/manga/poster_images/47/large.jpg?1434249493", - "original": "https://media.kitsu.io/manga/poster_images/47/original.jpg?1434249493" - }, - "coverImage": { - "tiny": "https://media.kitsu.io/manga/cover_images/47/tiny.jpg?1446826380", - "small": "https://media.kitsu.io/manga/cover_images/47/small.jpg?1446826380", - "large": "https://media.kitsu.io/manga/cover_images/47/large.jpg?1446826380", - "original": "https://media.kitsu.io/manga/cover_images/47/original.jpg?1446826380" - }, - "chapterCount": 120, - "volumeCount": 14, - "serialization": "Shounen Magazine (Weekly)", - "mangaType": "manga" - }, - "relationships": { - "categories": { - "links": { - "self": "https://kitsu.io/api/edge/manga/47/relationships/categories", - "related": "https://kitsu.io/api/edge/manga/47/categories" - }, - "data": [ - { - "type": "categories", - "id": "3" - }, - { - "type": "categories", - "id": "13" - }, - { - "type": "categories", - "id": "34" - }, - { - "type": "categories", - "id": "14" - }, - { - "type": "categories", - "id": "25" - } - ] - }, - "castings": { - "links": { - "self": "https://kitsu.io/api/edge/manga/47/relationships/castings", - "related": "https://kitsu.io/api/edge/manga/47/castings" - } - }, - "installments": { - "links": { - "self": "https://kitsu.io/api/edge/manga/47/relationships/installments", - "related": "https://kitsu.io/api/edge/manga/47/installments" - } - }, - "mappings": { - "links": { - "self": "https://kitsu.io/api/edge/manga/47/relationships/mappings", - "related": "https://kitsu.io/api/edge/manga/47/mappings" - }, - "data": [ - { - "type": "mappings", - "id": "27633" - } - ] - }, - "reviews": { - "links": { - "self": "https://kitsu.io/api/edge/manga/47/relationships/reviews", - "related": "https://kitsu.io/api/edge/manga/47/reviews" - } - }, - "mediaRelationships": { - "links": { - "self": "https://kitsu.io/api/edge/manga/47/relationships/media-relationships", - "related": "https://kitsu.io/api/edge/manga/47/media-relationships" - } - }, - "mangaCharacters": { - "links": { - "self": "https://kitsu.io/api/edge/manga/47/relationships/manga-characters", - "related": "https://kitsu.io/api/edge/manga/47/manga-characters" - } - }, - "mangaStaff": { - "links": { - "self": "https://kitsu.io/api/edge/manga/47/relationships/manga-staff", - "related": "https://kitsu.io/api/edge/manga/47/manga-staff" - } - } - } - }, - { - "id": "11777", - "type": "manga", - "links": { - "self": "https://kitsu.io/api/edge/manga/11777" - }, - "attributes": { - "slug": "yamada-kun-to-7-nin-no-majo", - "synopsis": "Ryuu Yamada is a second-year student at Suzaku High. Ryuu is always late for school, naps in class and gets abysmal grades. His life is a dead bore. The beautiful Urara Shiraishi, on the other hand, is Suzaku High's brightest student. One day, without explanation, their bodies are swapped! Ryuu ends up in Urara's body, and Urara in Ryuu's.\r\n\r\n(Source: MU)", - "coverImageTopOffset": 75, - "titles": { - "en": "Yamada-kun and the Seven Witches", - "en_jp": "Yamada-kun to 7-nin no Majo" - }, - "canonicalTitle": "Yamada-kun to 7-nin no Majo", - "abbreviatedTitles": null, - "averageRating": 4.08701725994085, - "ratingFrequencies": { - "0.5": "3", - "1.0": "4", - "1.5": "2", - "2.0": "5", - "2.5": "20", - "3.0": "51", - "3.5": "98", - "4.0": "167", - "4.5": "146", - "5.0": "170", - "nil": "31" - }, - "favoritesCount": 156, - "startDate": "2012-02-22", - "endDate": null, - "popularityRank": 34, - "ratingRank": 156, - "ageRating": "R", - "ageRatingGuide": "Ecchi", - "subtype": "manga", - "posterImage": { - "tiny": "https://media.kitsu.io/manga/poster_images/11777/tiny.jpg?1438784325", - "small": "https://media.kitsu.io/manga/poster_images/11777/small.jpg?1438784325", - "medium": "https://media.kitsu.io/manga/poster_images/11777/medium.jpg?1438784325", - "large": "https://media.kitsu.io/manga/poster_images/11777/large.jpg?1438784325", - "original": "https://media.kitsu.io/manga/poster_images/11777/original.jpg?1438784325" - }, - "coverImage": { - "tiny": "https://media.kitsu.io/manga/cover_images/11777/tiny.jpg?1438784293", - "small": "https://media.kitsu.io/manga/cover_images/11777/small.jpg?1438784293", - "large": "https://media.kitsu.io/manga/cover_images/11777/large.jpg?1438784293", - "original": "https://media.kitsu.io/manga/cover_images/11777/original.jpg?1438784293" - }, - "chapterCount": null, - "volumeCount": 0, - "serialization": "Shounen Magazine (Weekly)", - "mangaType": "manga" - }, - "relationships": { - "categories": { - "links": { - "self": "https://kitsu.io/api/edge/manga/11777/relationships/categories", - "related": "https://kitsu.io/api/edge/manga/11777/categories" - }, - "data": [ - { - "type": "categories", - "id": "3" - }, - { - "type": "categories", - "id": "9" - }, - { - "type": "categories", - "id": "13" - }, - { - "type": "categories", - "id": "24" - }, - { - "type": "categories", - "id": "45" - }, - { - "type": "categories", - "id": "14" - }, - { - "type": "categories", - "id": "25" - } - ] - }, - "castings": { - "links": { - "self": "https://kitsu.io/api/edge/manga/11777/relationships/castings", - "related": "https://kitsu.io/api/edge/manga/11777/castings" - } - }, - "installments": { - "links": { - "self": "https://kitsu.io/api/edge/manga/11777/relationships/installments", - "related": "https://kitsu.io/api/edge/manga/11777/installments" - } - }, - "mappings": { - "links": { - "self": "https://kitsu.io/api/edge/manga/11777/relationships/mappings", - "related": "https://kitsu.io/api/edge/manga/11777/mappings" - }, - "data": [ - { - "type": "mappings", - "id": "19012" - } - ] - }, - "reviews": { - "links": { - "self": "https://kitsu.io/api/edge/manga/11777/relationships/reviews", - "related": "https://kitsu.io/api/edge/manga/11777/reviews" - } - }, - "mediaRelationships": { - "links": { - "self": "https://kitsu.io/api/edge/manga/11777/relationships/media-relationships", - "related": "https://kitsu.io/api/edge/manga/11777/media-relationships" - } - }, - "mangaCharacters": { - "links": { - "self": "https://kitsu.io/api/edge/manga/11777/relationships/manga-characters", - "related": "https://kitsu.io/api/edge/manga/11777/manga-characters" - } - }, - "mangaStaff": { - "links": { - "self": "https://kitsu.io/api/edge/manga/11777/relationships/manga-staff", - "related": "https://kitsu.io/api/edge/manga/11777/manga-staff" - } - } - } - }, - { - "id": "27175", - "type": "manga", - "links": { - "self": "https://kitsu.io/api/edge/manga/27175" - }, - "attributes": { - "slug": "relife", - "synopsis": "The story follows Kaizaki Arata, a 27-year-old jobless man, who fails at every job interview he had after quitting his last company. His life changes after he met Yoake Ryou of the ReLife Research Institute, who offered him a drug that can change his appearance to 17-years-old and to become a subject in an experiment for one year. Thus, he begins his life as a high school student once more.\n\n(Source: MU)", - "coverImageTopOffset": 0, - "titles": { - "en": null, - "en_jp": "ReLIFE" - }, - "canonicalTitle": "ReLIFE", - "abbreviatedTitles": null, - "averageRating": 4.23866998116768, - "ratingFrequencies": { - "0.5": "0", - "1.0": "1", - "1.5": "1", - "2.0": "1", - "2.5": "10", - "3.0": "14", - "3.5": "41", - "4.0": "103", - "4.5": "95", - "5.0": "127", - "nil": "60" - }, - "favoritesCount": 127, - "startDate": "2013-10-12", - "endDate": null, - "popularityRank": 92, - "ratingRank": 58, - "ageRating": "PG", - "ageRatingGuide": null, - "subtype": "manga", - "posterImage": { - "tiny": "https://media.kitsu.io/manga/poster_images/27175/tiny.jpg?1464379411", - "small": "https://media.kitsu.io/manga/poster_images/27175/small.jpg?1464379411", - "medium": "https://media.kitsu.io/manga/poster_images/27175/medium.jpg?1464379411", - "large": "https://media.kitsu.io/manga/poster_images/27175/large.jpg?1464379411", - "original": "https://media.kitsu.io/manga/poster_images/27175/original.jpg?1464379411" - }, - "coverImage": { - "tiny": "https://media.kitsu.io/manga/cover_images/27175/tiny.jpg?1464379413", - "small": "https://media.kitsu.io/manga/cover_images/27175/small.jpg?1464379413", - "large": "https://media.kitsu.io/manga/cover_images/27175/large.jpg?1464379413", - "original": "https://media.kitsu.io/manga/cover_images/27175/original.jpg?1464379413" - }, - "chapterCount": null, - "volumeCount": 0, - "serialization": null, - "mangaType": "manga" - }, - "relationships": { - "categories": { - "links": { - "self": "https://kitsu.io/api/edge/manga/27175/relationships/categories", - "related": "https://kitsu.io/api/edge/manga/27175/categories" - }, - "data": [ - { - "type": "categories", - "id": "24" - }, - { - "type": "categories", - "id": "16" - }, - { - "type": "categories", - "id": "14" - } - ] - }, - "castings": { - "links": { - "self": "https://kitsu.io/api/edge/manga/27175/relationships/castings", - "related": "https://kitsu.io/api/edge/manga/27175/castings" - } - }, - "installments": { - "links": { - "self": "https://kitsu.io/api/edge/manga/27175/relationships/installments", - "related": "https://kitsu.io/api/edge/manga/27175/installments" - } - }, - "mappings": { - "links": { - "self": "https://kitsu.io/api/edge/manga/27175/relationships/mappings", - "related": "https://kitsu.io/api/edge/manga/27175/mappings" - }, - "data": [ - { - "type": "mappings", - "id": "19896" - } - ] - }, - "reviews": { - "links": { - "self": "https://kitsu.io/api/edge/manga/27175/relationships/reviews", - "related": "https://kitsu.io/api/edge/manga/27175/reviews" - } - }, - "mediaRelationships": { - "links": { - "self": "https://kitsu.io/api/edge/manga/27175/relationships/media-relationships", - "related": "https://kitsu.io/api/edge/manga/27175/media-relationships" - } - }, - "mangaCharacters": { - "links": { - "self": "https://kitsu.io/api/edge/manga/27175/relationships/manga-characters", - "related": "https://kitsu.io/api/edge/manga/27175/manga-characters" - } - }, - "mangaStaff": { - "links": { - "self": "https://kitsu.io/api/edge/manga/27175/relationships/manga-staff", - "related": "https://kitsu.io/api/edge/manga/27175/manga-staff" - } - } - } - }, - { - "id": "25491", - "type": "manga", - "links": { - "self": "https://kitsu.io/api/edge/manga/25491" - }, - "attributes": { - "slug": "joshikausei", - "synopsis": "Who needs dialog when you're this cute? The beautiful (but unlucky) Momoko, the cool, collected Shibumi, and the refreshingly innocent Mayumi star in a \"silent manga.\" No speeches, no dialog! Just pictures, sound effects, and three high school girls living their daily lives.\r\n\r\n(Source: Crunchyroll)", - "coverImageTopOffset": 0, - "titles": { - "en": "Joshi Kausei", - "en_jp": "Joshikausei" - }, - "canonicalTitle": "Joshikausei", - "abbreviatedTitles": null, - "averageRating": 3.75321939030155, - "ratingFrequencies": { - "0.5": "0", - "1.0": "1", - "1.5": "0", - "2.0": "1", - "2.5": "5", - "3.0": "13", - "3.5": "17", - "4.0": "23", - "4.5": "11", - "5.0": "9", - "nil": "11" - }, - "favoritesCount": 3, - "startDate": "2013-09-27", - "endDate": null, - "popularityRank": 621, - "ratingRank": 750, - "ageRating": null, - "ageRatingGuide": null, - "subtype": "manga", - "posterImage": { - "tiny": "https://media.kitsu.io/manga/poster_images/25491/tiny.jpg?1434305043", - "small": "https://media.kitsu.io/manga/poster_images/25491/small.jpg?1434305043", - "medium": "https://media.kitsu.io/manga/poster_images/25491/medium.jpg?1434305043", - "large": "https://media.kitsu.io/manga/poster_images/25491/large.jpg?1434305043", - "original": "https://media.kitsu.io/manga/poster_images/25491/original.jpg?1434305043" - }, - "coverImage": null, - "chapterCount": null, - "volumeCount": 0, - "serialization": "Web Comic Action", - "mangaType": "manga" - }, - "relationships": { - "categories": { - "links": { - "self": "https://kitsu.io/api/edge/manga/25491/relationships/categories", - "related": "https://kitsu.io/api/edge/manga/25491/categories" - }, - "data": [ - { - "type": "categories", - "id": "3" - }, - { - "type": "categories", - "id": "24" - }, - { - "type": "categories", - "id": "16" - } - ] - }, - "castings": { - "links": { - "self": "https://kitsu.io/api/edge/manga/25491/relationships/castings", - "related": "https://kitsu.io/api/edge/manga/25491/castings" - } - }, - "installments": { - "links": { - "self": "https://kitsu.io/api/edge/manga/25491/relationships/installments", - "related": "https://kitsu.io/api/edge/manga/25491/installments" - } - }, - "mappings": { - "links": { - "self": "https://kitsu.io/api/edge/manga/25491/relationships/mappings", - "related": "https://kitsu.io/api/edge/manga/25491/mappings" - }, - "data": [ - { - "type": "mappings", - "id": "29065" - } - ] - }, - "reviews": { - "links": { - "self": "https://kitsu.io/api/edge/manga/25491/relationships/reviews", - "related": "https://kitsu.io/api/edge/manga/25491/reviews" - } - }, - "mediaRelationships": { - "links": { - "self": "https://kitsu.io/api/edge/manga/25491/relationships/media-relationships", - "related": "https://kitsu.io/api/edge/manga/25491/media-relationships" - } - }, - "mangaCharacters": { - "links": { - "self": "https://kitsu.io/api/edge/manga/25491/relationships/manga-characters", - "related": "https://kitsu.io/api/edge/manga/25491/manga-characters" - } - }, - "mangaStaff": { - "links": { - "self": "https://kitsu.io/api/edge/manga/25491/relationships/manga-staff", - "related": "https://kitsu.io/api/edge/manga/25491/manga-staff" - } - } - } - }, - { - "id": "3", - "type": "categories", - "links": { - "self": "https://kitsu.io/api/edge/categories/3" - }, - "attributes": { - "title": "Comedy", - "slug": "comedy", - "description": null - } - }, - { - "id": "21", - "type": "categories", - "links": { - "self": "https://kitsu.io/api/edge/categories/21" - }, - "attributes": { - "title": "Thriller", - "slug": "thriller", - "description": null - } - }, - { - "id": "24", - "type": "categories", - "links": { - "self": "https://kitsu.io/api/edge/categories/24" - }, - "attributes": { - "title": "School", - "slug": "school", - "description": null - } - }, - { - "id": "16", - "type": "categories", - "links": { - "self": "https://kitsu.io/api/edge/categories/16" - }, - "attributes": { - "title": "Slice of Life", - "slug": "slice-of-life", - "description": "" - } - }, - { - "id": "14", - "type": "categories", - "links": { - "self": "https://kitsu.io/api/edge/categories/14" - }, - "attributes": { - "title": "Romance", - "slug": "romance", - "description": "" - } - }, - { - "id": "13", - "type": "categories", - "links": { - "self": "https://kitsu.io/api/edge/categories/13" - }, - "attributes": { - "title": "Sports", - "slug": "sports", - "description": null - } - }, - { - "id": "34", - "type": "categories", - "links": { - "self": "https://kitsu.io/api/edge/categories/34" - }, - "attributes": { - "title": "Harem", - "slug": "harem", - "description": null - } - }, - { - "id": "25", - "type": "categories", - "links": { - "self": "https://kitsu.io/api/edge/categories/25" - }, - "attributes": { - "title": "Ecchi", - "slug": "ecchi", - "description": "" - } - }, - { - "id": "9", - "type": "categories", - "links": { - "self": "https://kitsu.io/api/edge/categories/9" - }, - "attributes": { - "title": "Supernatural", - "slug": "supernatural", - "description": null - } - }, - { - "id": "45", - "type": "categories", - "links": { - "self": "https://kitsu.io/api/edge/categories/45" - }, - "attributes": { - "title": "Gender Bender", - "slug": "gender-bender", - "description": "" - } - }, - { - "id": "48014", - "type": "mappings", - "links": { - "self": "https://kitsu.io/api/edge/mappings/48014" - }, - "attributes": { - "externalSite": "myanimelist/manga", - "externalId": "26769" - }, - "relationships": { - "media": { - "links": { - "self": "https://kitsu.io/api/edge/mappings/48014/relationships/media", - "related": "https://kitsu.io/api/edge/mappings/48014/media" - } - } - } - }, - { - "id": "27633", - "type": "mappings", - "links": { - "self": "https://kitsu.io/api/edge/mappings/27633" - }, - "attributes": { - "externalSite": "myanimelist/manga", - "externalId": "16" - }, - "relationships": { - "media": { - "links": { - "self": "https://kitsu.io/api/edge/mappings/27633/relationships/media", - "related": "https://kitsu.io/api/edge/mappings/27633/media" - } - } - } - }, - { - "id": "19012", - "type": "mappings", - "links": { - "self": "https://kitsu.io/api/edge/mappings/19012" - }, - "attributes": { - "externalSite": "myanimelist/manga", - "externalId": "35003" - }, - "relationships": { - "media": { - "links": { - "self": "https://kitsu.io/api/edge/mappings/19012/relationships/media", - "related": "https://kitsu.io/api/edge/mappings/19012/media" - } - } - } - }, - { - "id": "19896", - "type": "mappings", - "links": { - "self": "https://kitsu.io/api/edge/mappings/19896" - }, - "attributes": { - "externalSite": "myanimelist/manga", - "externalId": "78523" - }, - "relationships": { - "media": { - "links": { - "self": "https://kitsu.io/api/edge/mappings/19896/relationships/media", - "related": "https://kitsu.io/api/edge/mappings/19896/media" - } - } - } - }, - { - "id": "29065", - "type": "mappings", - "links": { - "self": "https://kitsu.io/api/edge/mappings/29065" - }, - "attributes": { - "externalSite": "myanimelist/manga", - "externalId": "60815" - }, - "relationships": { - "media": { - "links": { - "self": "https://kitsu.io/api/edge/mappings/29065/relationships/media", - "related": "https://kitsu.io/api/edge/mappings/29065/media" - } - } - } - } - ], - "meta": { - "count": 5 - }, - "links": { - "first": "https://kitsu.io/api/edge/library-entries?fields%5Busers%5D=id&filter%5Bmedia_type%5D=Manga&filter%5Bstatus%5D=1&filter%5Buser_id%5D=2644&include=media%2Cmedia.categories%2Cmedia.mappings&page%5Blimit%5D=200&page%5Boffset%5D=0&sort=-updated_at", - "last": "https://kitsu.io/api/edge/library-entries?fields%5Busers%5D=id&filter%5Bmedia_type%5D=Manga&filter%5Bstatus%5D=1&filter%5Buser_id%5D=2644&include=media%2Cmedia.categories%2Cmedia.mappings&page%5Blimit%5D=200&page%5Boffset%5D=0&sort=-updated_at" + "data": { + "findProfileBySlug": { + "library": { + "all": { + "pageInfo": { + "endCursor": "Mg", + "hasNextPage": false, + "hasPreviousPage": false, + "startCursor": "MQ" + }, + "totalCount": 2, + "nodes": [ + { + "id": "15288185", + "notes": "", + "nsfw": false, + "private": false, + "progress": 94, + "progressedAt": "2020-10-12T15:52:01Z", + "rating": 16, + "reconsumeCount": 0, + "reconsuming": false, + "status": "CURRENT", + "media": { + "id": "21733", + "ageRating": null, + "ageRatingGuide": "", + "mappings": { + "nodes": [ + { + "externalId": "58091", + "externalSite": "ANILIST_MANGA" + }, + { + "externalId": "28091", + "externalSite": "MYANIMELIST_MANGA" + } + ] + }, + "posterImage": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/manga/poster_images/21733/original.jpg?1496845097", + "width": null + }, + "views": [ + { + "height": null, + "name": "tiny", + "url": "https://media.kitsu.io/manga/poster_images/21733/tiny.jpg?1496845097", + "width": null + }, + { + "height": null, + "name": "small", + "url": "https://media.kitsu.io/manga/poster_images/21733/small.jpg?1496845097", + "width": null + }, + { + "height": null, + "name": "medium", + "url": "https://media.kitsu.io/manga/poster_images/21733/medium.jpg?1496845097", + "width": null + }, + { + "height": null, + "name": "large", + "url": "https://media.kitsu.io/manga/poster_images/21733/large.jpg?1496845097", + "width": null + } + ] + }, + "sfw": true, + "slug": "tonari-no-seki-kun", + "status": "CURRENT", + "startDate": "2010-07-05", + "endDate": null, + "type": "Manga", + "titles": { + "canonical": "Tonari no Seki-kun", + "localized": { + "en": "My Neighbour Seki", + "en_jp": "Tonari no Seki-kun", + "en_us": "My Neighbour Seki", + "ja_jp": "となりの関くん" + }, + "alternatives": [] + }, + "chapterCount": null, + "volumeCount": 0, + "subtype": "MANGA" + } + }, + { + "id": "15084769", + "notes": "Wordless, and it works.", + "nsfw": false, + "private": false, + "progress": 87, + "progressedAt": "2020-08-04T13:18:45Z", + "rating": 16, + "reconsumeCount": 0, + "reconsuming": false, + "status": "CURRENT", + "media": { + "id": "25491", + "ageRating": null, + "ageRatingGuide": "", + "mappings": { + "nodes": [ + { + "externalId": "85178", + "externalSite": "ANILIST_MANGA" + }, + { + "externalId": "16567", + "externalSite": "ANIMENEWSNETWORK" + }, + { + "externalId": "60815", + "externalSite": "MYANIMELIST_MANGA" + } + ] + }, + "posterImage": { + "original": { + "height": null, + "name": "original", + "url": "https://media.kitsu.io/manga/poster_images/25491/original.jpg?1499026452", + "width": null + }, + "views": [ + { + "height": null, + "name": "tiny", + "url": "https://media.kitsu.io/manga/poster_images/25491/tiny.jpg?1499026452", + "width": null + }, + { + "height": null, + "name": "small", + "url": "https://media.kitsu.io/manga/poster_images/25491/small.jpg?1499026452", + "width": null + }, + { + "height": null, + "name": "medium", + "url": "https://media.kitsu.io/manga/poster_images/25491/medium.jpg?1499026452", + "width": null + }, + { + "height": null, + "name": "large", + "url": "https://media.kitsu.io/manga/poster_images/25491/large.jpg?1499026452", + "width": null + } + ] + }, + "sfw": true, + "slug": "joshikausei", + "status": "CURRENT", + "startDate": "2013-09-27", + "endDate": null, + "type": "Manga", + "titles": { + "canonical": "Joshikausei", + "localized": { + "en": "Joshi Kausei", + "en_jp": "Joshikausei", + "en_us": "Joshi Kausei", + "ja_jp": "女子かう生" + }, + "alternatives": [ + "Jyoshi Kausei" + ] + }, + "chapterCount": null, + "volumeCount": 0, + "subtype": "MANGA" + } + } + ] + } + } + } } } \ No newline at end of file