diff --git a/CHANGELOG.md b/CHANGELOG.md index 95e39fa7..f20fc455 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Version 5.1 * Added session check, so when coming back to a page, if the session is expired, the page will refresh. * Updated logging config so that much fewer, much smaller files are generated. +* Updated Kitsu integration to use GraphQL API, reducing a lot of internal complexity. ## Version 5 * Updated PHP requirement to 7.4 diff --git a/src/AnimeClient/API/CacheTrait.php b/src/AnimeClient/API/CacheTrait.php index 87a58f58..20c9475d 100644 --- a/src/AnimeClient/API/CacheTrait.php +++ b/src/AnimeClient/API/CacheTrait.php @@ -57,7 +57,7 @@ trait CacheTrait { * * @param string $key * @param callable $primer - * @param array $primeArgs + * @param array|null $primeArgs * @return mixed|null * @throws InvalidArgumentException */ @@ -78,22 +78,4 @@ trait CacheTrait { return $value; } - - /** - * Generate a hash as a cache key from the current method call - * - * @param mixed $object - * @param string $method - * @param array $args - * @return string - */ - public function getHashForMethodCall($object, string $method, array $args = []): string - { - $keyObj = [ - 'class' => get_class($object), - 'method' => $method, - 'args' => $args, - ]; - return sha1(json_encode($keyObj)); - } } \ No newline at end of file diff --git a/src/AnimeClient/Kitsu.php b/src/AnimeClient/Kitsu.php index 34922c87..09514338 100644 --- a/src/AnimeClient/Kitsu.php +++ b/src/AnimeClient/Kitsu.php @@ -33,7 +33,6 @@ final class Kitsu { public const MANGA_HISTORY_LIST_CACHE_KEY = 'kitsu-manga-history-list'; public const GRAPHQL_ENDPOINT = 'https://kitsu.io/api/graphql'; - public const JSON_API_ENDPOINT = 'https://kitsu.io/api/edge/'; public const SECONDS_IN_MINUTE = 60; public const MINUTES_IN_HOUR = 60; diff --git a/tests/AnimeClient/API/CacheTraitTest.php b/tests/AnimeClient/API/CacheTraitTest.php index 9330df99..6eb408c3 100644 --- a/tests/AnimeClient/API/CacheTraitTest.php +++ b/tests/AnimeClient/API/CacheTraitTest.php @@ -36,10 +36,4 @@ class CacheTraitTest extends AnimeClientTestCase { $this->testClass->setCache($cachePool); $this->assertEquals($cachePool, $this->testClass->getCache()); } - - public function testGetHashForMethodCall() - { - $hash = $this->testClass->getHashForMethodCall($this, __METHOD__, []); - $this->assertEquals('684ba0a5c29ffec452c5f6a07d2eee6932575490', $hash); - } } \ No newline at end of file diff --git a/tests/AnimeClient/RequirementsTest.php b/tests/AnimeClient/RequirementsTest.php index 9a09f171..6cb3d622 100644 --- a/tests/AnimeClient/RequirementsTest.php +++ b/tests/AnimeClient/RequirementsTest.php @@ -22,7 +22,7 @@ class RequirementsTest extends AnimeClientTestCase { public function testPHPVersion(): void { - $this->assertTrue(version_compare(PHP_VERSION, "5.4", "ge")); + $this->assertTrue(version_compare(PHP_VERSION, "7.4", "ge")); } public function testHasPDO(): void diff --git a/tests/AnimeClient/test_data/JsonAPI/inlineIncluded.json b/tests/AnimeClient/test_data/JsonAPI/inlineIncluded.json deleted file mode 100644 index a2ec42f5..00000000 --- a/tests/AnimeClient/test_data/JsonAPI/inlineIncluded.json +++ /dev/null @@ -1 +0,0 @@ -{"anime":{"11474":{"slug":"hibike-euphonium-2","synopsis":"Second season of Hibike! Euphonium.","coverImageTopOffset":120,"titles":{"en":"Sound! Euphonium 2","en_jp":"Hibike! Euphonium 2","ja_jp":"\u97ff\u3051\uff01\u30e6\u30fc\u30d5\u30a9\u30cb\u30a2\u30e0 \uff12"},"canonicalTitle":"Hibike! Euphonium 2","abbreviatedTitles":null,"averageRating":4.1684326428476197,"ratingFrequencies":{"0.5":"1","1.0":"1","1.5":"2","2.0":"8","2.5":"13","3.0":"42","3.5":"90","4.0":"193","4.5":"180","5.0":"193","nil":"1972"},"startDate":"2016-10-06","endDate":null,"posterImage":{"tiny":"https:\/\/media.kitsu.io\/anime\/poster_images\/11474\/tiny.jpg?1470781430","small":"https:\/\/media.kitsu.io\/anime\/poster_images\/11474\/small.jpg?1470781430","medium":"https:\/\/media.kitsu.io\/anime\/poster_images\/11474\/medium.jpg?1470781430","large":"https:\/\/media.kitsu.io\/anime\/poster_images\/11474\/large.jpg?1470781430","original":"https:\/\/media.kitsu.io\/anime\/poster_images\/11474\/original.jpg?1470781430"},"coverImage":{"small":"https:\/\/media.kitsu.io\/anime\/cover_images\/11474\/small.jpg?1476203965","large":"https:\/\/media.kitsu.io\/anime\/cover_images\/11474\/large.jpg?1476203965","original":"https:\/\/media.kitsu.io\/anime\/cover_images\/11474\/original.jpg?1476203965"},"episodeCount":13,"episodeLength":25,"subtype":"TV","youtubeVideoId":"d2Di5swwzxg","ageRating":"PG","ageRatingGuide":"","showType":"TV","nsfw":false,"relationships":{"genres":{"24":{"name":"School","slug":"school","description":null},"35":{"name":"Music","slug":"music","description":null},"4":{"name":"Drama","slug":"drama","description":""}},"castings":[],"installments":[],"mappings":{"3155":{"externalSite":"myanimelist\/anime","externalId":"31988","relationships":{"media":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/mappings\/3155\/relationships\/media","related":"https:\/\/kitsu.io\/api\/edge\/mappings\/3155\/media"}}}}},"reviews":[],"episodes":[],"streamingLinks":[]}},"10802":{"slug":"nisekoimonogatari","synopsis":"Trailer for a fake anime created by Shaft as an April Fool's Day joke.","coverImageTopOffset":80,"titles":{"en":"","en_jp":"Nisekoimonogatari","ja_jp":""},"canonicalTitle":"Nisekoimonogatari","abbreviatedTitles":null,"averageRating":3.48579934352873,"ratingFrequencies":{"0.5":"22","1.0":"10","1.5":"16","2.0":"32","2.5":"74","3.0":"97","3.5":"118","4.0":"72","4.5":"34","5.0":"136","nil":"597","0.89":"-1","3.63":"-1","4.11":"-1","0.068":"-1","0.205":"-1","0.274":"-2","0.479":"-1","0.548":"-1","1.096":"-2","1.164":"-1","1.438":"-1","1.918":"-1","2.055":"-1","3.973":"-1","4.178":"-3","4.247":"-1","4.726":"-1","4.932":"-3","1.0958904109589":"3","0.89041095890411":"2","1.02739726027397":"1","1.16438356164384":"2","1.43835616438356":"2","1.57534246575342":"1","1.91780821917808":"1","2.05479452054794":"2","2.12328767123288":"1","2.73972602739726":"1","2.80821917808219":"2","2.94520547945205":"1","3.15068493150685":"1","3.35616438356164":"2","3.63013698630137":"2","3.97260273972603":"1","4.10958904109589":"2","4.17808219178082":"3","4.24657534246575":"1","4.38356164383562":"2","4.65753424657534":"1","4.72602739726027":"2","4.86301369863014":"1","4.93150684931507":"10","0.205479452054795":"1","0.273972602739726":"2","0.479452054794521":"2","0.547945205479452":"2","0.753424657534246":"1","0.0684931506849315":"1"},"startDate":"2015-04-01","endDate":null,"posterImage":{"tiny":"https:\/\/media.kitsu.io\/anime\/poster_images\/10802\/tiny.jpg?1427974534","small":"https:\/\/media.kitsu.io\/anime\/poster_images\/10802\/small.jpg?1427974534","medium":"https:\/\/media.kitsu.io\/anime\/poster_images\/10802\/medium.jpg?1427974534","large":"https:\/\/media.kitsu.io\/anime\/poster_images\/10802\/large.jpg?1427974534","original":"https:\/\/media.kitsu.io\/anime\/poster_images\/10802\/original.jpg?1427974534"},"coverImage":{"small":"https:\/\/media.kitsu.io\/anime\/cover_images\/10802\/small.jpg?1427928458","large":"https:\/\/media.kitsu.io\/anime\/cover_images\/10802\/large.jpg?1427928458","original":"https:\/\/media.kitsu.io\/anime\/cover_images\/10802\/original.jpg?1427928458"},"episodeCount":1,"episodeLength":1,"subtype":"ONA","youtubeVideoId":"","ageRating":"PG","ageRatingGuide":"Teens 13 or older","showType":"ONA","nsfw":false,"relationships":{"genres":{"3":{"name":"Comedy","slug":"comedy","description":null}},"castings":[],"installments":[],"mappings":{"1755":{"externalSite":"myanimelist\/anime","externalId":"30514","relationships":{"media":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/mappings\/1755\/relationships\/media","related":"https:\/\/kitsu.io\/api\/edge\/mappings\/1755\/media"}}}}},"reviews":[],"episodes":[],"streamingLinks":[]}},"11887":{"slug":"brave-witches","synopsis":"In September 1944, allied forces led by the 501st Joint Fighter Wing \"Strike Witches\" successfully eliminate the Neuroi threat from the skies of the Republic of Gallia, thus ensuring the security of western Europe. Taking advantage of this victory, allied forces begin a full-fledged push toward central and eastern Europe. From a base in Petersburg in the Empire of Orussia, the 502nd Joint Fighter Wing \"Brave Witches,\" upon whom mankind has placed its hopes, flies with courage in the cold skies of eastern Europe.\n\n(Source: MAL News)","coverImageTopOffset":380,"titles":{"en":"","en_jp":"Brave Witches","ja_jp":"\u30d6\u30ec\u30a4\u30d6\u30a6\u30a3\u30c3\u30c1\u30fc\u30ba"},"canonicalTitle":"Brave Witches","abbreviatedTitles":null,"averageRating":3.5846888163849102,"ratingFrequencies":{"0.5":"1","1.0":"4","1.5":"8","2.0":"12","2.5":"17","3.0":"33","3.5":"41","4.0":"32","4.5":"9","5.0":"19","nil":"620"},"startDate":"2016-10-06","endDate":null,"posterImage":{"tiny":"https:\/\/media.kitsu.io\/anime\/poster_images\/11887\/tiny.jpg?1476481854","small":"https:\/\/media.kitsu.io\/anime\/poster_images\/11887\/small.jpg?1476481854","medium":"https:\/\/media.kitsu.io\/anime\/poster_images\/11887\/medium.jpg?1476481854","large":"https:\/\/media.kitsu.io\/anime\/poster_images\/11887\/large.jpg?1476481854","original":"https:\/\/media.kitsu.io\/anime\/poster_images\/11887\/original.png?1476481854"},"coverImage":{"small":"https:\/\/media.kitsu.io\/anime\/cover_images\/11887\/small.jpg?1479834725","large":"https:\/\/media.kitsu.io\/anime\/cover_images\/11887\/large.jpg?1479834725","original":"https:\/\/media.kitsu.io\/anime\/cover_images\/11887\/original.jpg?1479834725"},"episodeCount":12,"episodeLength":24,"subtype":"TV","youtubeVideoId":"VLUqd-jEBuE","ageRating":"R","ageRatingGuide":"Mild Nudity","showType":"TV","nsfw":false,"relationships":{"genres":{"5":{"name":"Sci-Fi","slug":"sci-fi","description":null},"8":{"name":"Magic","slug":"magic","description":null},"28":{"name":"Military","slug":"military","description":null},"1":{"name":"Action","slug":"action","description":""},"25":{"name":"Ecchi","slug":"ecchi","description":""}},"castings":[],"installments":[],"mappings":{"2593":{"externalSite":"myanimelist\/anime","externalId":"32866","relationships":{"media":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/mappings\/2593\/relationships\/media","related":"https:\/\/kitsu.io\/api\/edge\/mappings\/2593\/media"}}}}},"reviews":[],"episodes":[],"streamingLinks":[]}},"12024":{"slug":"www-working","synopsis":"Daisuke Higashida is a serious first-year student at Higashizaka High School. He lives a peaceful everyday life even though he is not satisfied with the family who doesn't laugh at all and makes him tired. However, his father's company goes bankrupt one day, and he can no longer afford allowances, cellphone bills, and commuter tickets. When his father orders him to take up a part-time job, Daisuke decides to work at a nearby family restaurant in order to avoid traveling 15 kilometers to school by bicycle.","coverImageTopOffset":165,"titles":{"en":"WWW.WAGNARIA!!","en_jp":"WWW.Working!!","ja_jp":""},"canonicalTitle":"WWW.Working!!","abbreviatedTitles":null,"averageRating":3.8238374224378302,"ratingFrequencies":{"1.0":"2","1.5":"7","2.0":"19","2.5":"28","3.0":"68","3.5":"114","4.0":"144","4.5":"78","5.0":"74","nil":"1182"},"startDate":"2016-10-01","endDate":"2016-12-24","posterImage":{"tiny":"https:\/\/media.kitsu.io\/anime\/poster_images\/12024\/tiny.jpg?1473990267","small":"https:\/\/media.kitsu.io\/anime\/poster_images\/12024\/small.jpg?1473990267","medium":"https:\/\/media.kitsu.io\/anime\/poster_images\/12024\/medium.jpg?1473990267","large":"https:\/\/media.kitsu.io\/anime\/poster_images\/12024\/large.jpg?1473990267","original":"https:\/\/media.kitsu.io\/anime\/poster_images\/12024\/original.jpg?1473990267"},"coverImage":{"small":"https:\/\/media.kitsu.io\/anime\/cover_images\/12024\/small.jpg?1479834612","large":"https:\/\/media.kitsu.io\/anime\/cover_images\/12024\/large.jpg?1479834612","original":"https:\/\/media.kitsu.io\/anime\/cover_images\/12024\/original.png?1479834612"},"episodeCount":13,"episodeLength":23,"subtype":"TV","youtubeVideoId":"","ageRating":"PG","ageRatingGuide":"Teens 13 or older","showType":"TV","nsfw":false,"relationships":{"genres":{"3":{"name":"Comedy","slug":"comedy","description":null},"16":{"name":"Slice of Life","slug":"slice-of-life","description":""}},"castings":[],"installments":[],"mappings":{"2538":{"externalSite":"myanimelist\/anime","externalId":"33094","relationships":{"media":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/mappings\/2538\/relationships\/media","related":"https:\/\/kitsu.io\/api\/edge\/mappings\/2538\/media"}}}}},"reviews":[],"episodes":[],"streamingLinks":[]}},"12465":{"slug":"bishoujo-yuugi-unit-crane-game-girls-galaxy","synopsis":"Second season of Bishoujo Yuugi Unit Crane Game Girls.","coverImageTopOffset":0,"titles":{"en":"Crane Game Girls Galaxy","en_jp":"Bishoujo Yuugi Unit Crane Game Girls Galaxy","ja_jp":"\u7f8e\u5c11\u5973\u904a\u622f\u30e6\u30cb\u30c3\u30c8 \u30af\u30ec\u30fc\u30f3\u30b2\u30fc\u30eb\u30ae\u30e3\u30e9\u30af\u30b7\u30fc"},"canonicalTitle":"Bishoujo Yuugi Unit Crane Game Girls Galaxy","abbreviatedTitles":null,"averageRating":null,"ratingFrequencies":{"0.5":"2","1.0":"2","1.5":"0","2.0":"4","2.5":"6","3.0":"2","3.5":"4","4.0":"1","4.5":"2","nil":"66"},"startDate":"2016-10-05","endDate":null,"posterImage":{"tiny":"https:\/\/media.kitsu.io\/anime\/poster_images\/12465\/tiny.jpg?1473601756","small":"https:\/\/media.kitsu.io\/anime\/poster_images\/12465\/small.jpg?1473601756","medium":"https:\/\/media.kitsu.io\/anime\/poster_images\/12465\/medium.jpg?1473601756","large":"https:\/\/media.kitsu.io\/anime\/poster_images\/12465\/large.jpg?1473601756","original":"https:\/\/media.kitsu.io\/anime\/poster_images\/12465\/original.png?1473601756"},"coverImage":null,"episodeCount":null,"episodeLength":13,"subtype":"TV","youtubeVideoId":"","ageRating":"PG","ageRatingGuide":"Children","showType":"TV","nsfw":false,"relationships":{"genres":{"3":{"name":"Comedy","slug":"comedy","description":null}},"castings":[],"installments":[],"mappings":{"9871":{"externalSite":"myanimelist\/anime","externalId":"33541","relationships":{"media":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/mappings\/9871\/relationships\/media","related":"https:\/\/kitsu.io\/api\/edge\/mappings\/9871\/media"}}}}},"reviews":[],"episodes":[],"streamingLinks":[]}}}} \ No newline at end of file diff --git a/tests/AnimeClient/test_data/JsonAPI/jsonApiExample.json b/tests/AnimeClient/test_data/JsonAPI/jsonApiExample.json deleted file mode 100644 index 9edb991d..00000000 --- a/tests/AnimeClient/test_data/JsonAPI/jsonApiExample.json +++ /dev/null @@ -1,1152 +0,0 @@ -{ - "data": [{ - "id": "13016665", - "type": "libraryEntries", - "links": { - "self": "https://kitsu.io/api/edge/library-entries/13016665" - }, - "attributes": { - "status": "completed", - "progress": 13, - "reconsuming": false, - "reconsumeCount": 0, - "notes": "", - "private": false, - "rating": "4.5", - "updatedAt": "2017-01-10T02:00:25.890Z" - }, - "relationships": { - "user": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/13016665/relationships/user", - "related": "https://kitsu.io/api/edge/library-entries/13016665/user" - } - }, - "anime": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/13016665/relationships/anime", - "related": "https://kitsu.io/api/edge/library-entries/13016665/anime" - } - }, - "manga": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/13016665/relationships/manga", - "related": "https://kitsu.io/api/edge/library-entries/13016665/manga" - } - }, - "drama": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/13016665/relationships/drama", - "related": "https://kitsu.io/api/edge/library-entries/13016665/drama" - } - }, - "review": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/13016665/relationships/review", - "related": "https://kitsu.io/api/edge/library-entries/13016665/review" - } - }, - "media": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/13016665/relationships/media", - "related": "https://kitsu.io/api/edge/library-entries/13016665/media" - }, - "data": { - "type": "anime", - "id": "11474" - } - }, - "unit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/13016665/relationships/unit", - "related": "https://kitsu.io/api/edge/library-entries/13016665/unit" - } - }, - "nextUnit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/13016665/relationships/next-unit", - "related": "https://kitsu.io/api/edge/library-entries/13016665/next-unit" - } - } - } - }, { - "id": "9825168", - "type": "libraryEntries", - "links": { - "self": "https://kitsu.io/api/edge/library-entries/9825168" - }, - "attributes": { - "status": "completed", - "progress": 1, - "reconsuming": false, - "reconsumeCount": 0, - "notes": null, - "private": false, - "rating": "3.5", - "updatedAt": "2017-01-06T02:56:23.973Z" - }, - "relationships": { - "user": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/9825168/relationships/user", - "related": "https://kitsu.io/api/edge/library-entries/9825168/user" - } - }, - "anime": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/9825168/relationships/anime", - "related": "https://kitsu.io/api/edge/library-entries/9825168/anime" - } - }, - "manga": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/9825168/relationships/manga", - "related": "https://kitsu.io/api/edge/library-entries/9825168/manga" - } - }, - "drama": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/9825168/relationships/drama", - "related": "https://kitsu.io/api/edge/library-entries/9825168/drama" - } - }, - "review": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/9825168/relationships/review", - "related": "https://kitsu.io/api/edge/library-entries/9825168/review" - } - }, - "media": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/9825168/relationships/media", - "related": "https://kitsu.io/api/edge/library-entries/9825168/media" - }, - "data": { - "type": "anime", - "id": "10802" - } - }, - "unit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/9825168/relationships/unit", - "related": "https://kitsu.io/api/edge/library-entries/9825168/unit" - } - }, - "nextUnit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/9825168/relationships/next-unit", - "related": "https://kitsu.io/api/edge/library-entries/9825168/next-unit" - } - } - } - }, { - "id": "14341603", - "type": "libraryEntries", - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341603" - }, - "attributes": { - "status": "completed", - "progress": 12, - "reconsuming": false, - "reconsumeCount": 0, - "notes": null, - "private": false, - "rating": "4.0", - "updatedAt": "2017-01-01T21:54:17.368Z" - }, - "relationships": { - "user": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341603/relationships/user", - "related": "https://kitsu.io/api/edge/library-entries/14341603/user" - } - }, - "anime": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341603/relationships/anime", - "related": "https://kitsu.io/api/edge/library-entries/14341603/anime" - } - }, - "manga": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341603/relationships/manga", - "related": "https://kitsu.io/api/edge/library-entries/14341603/manga" - } - }, - "drama": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341603/relationships/drama", - "related": "https://kitsu.io/api/edge/library-entries/14341603/drama" - } - }, - "review": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341603/relationships/review", - "related": "https://kitsu.io/api/edge/library-entries/14341603/review" - } - }, - "media": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341603/relationships/media", - "related": "https://kitsu.io/api/edge/library-entries/14341603/media" - }, - "data": { - "type": "anime", - "id": "11887" - } - }, - "unit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341603/relationships/unit", - "related": "https://kitsu.io/api/edge/library-entries/14341603/unit" - } - }, - "nextUnit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341603/relationships/next-unit", - "related": "https://kitsu.io/api/edge/library-entries/14341603/next-unit" - } - } - } - }, { - "id": "14341572", - "type": "libraryEntries", - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341572" - }, - "attributes": { - "status": "completed", - "progress": 13, - "reconsuming": false, - "reconsumeCount": 0, - "notes": "", - "private": false, - "rating": "4.5", - "updatedAt": "2017-01-01T21:04:03.487Z" - }, - "relationships": { - "user": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341572/relationships/user", - "related": "https://kitsu.io/api/edge/library-entries/14341572/user" - } - }, - "anime": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341572/relationships/anime", - "related": "https://kitsu.io/api/edge/library-entries/14341572/anime" - } - }, - "manga": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341572/relationships/manga", - "related": "https://kitsu.io/api/edge/library-entries/14341572/manga" - } - }, - "drama": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341572/relationships/drama", - "related": "https://kitsu.io/api/edge/library-entries/14341572/drama" - } - }, - "review": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341572/relationships/review", - "related": "https://kitsu.io/api/edge/library-entries/14341572/review" - } - }, - "media": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341572/relationships/media", - "related": "https://kitsu.io/api/edge/library-entries/14341572/media" - }, - "data": { - "type": "anime", - "id": "12024" - } - }, - "unit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341572/relationships/unit", - "related": "https://kitsu.io/api/edge/library-entries/14341572/unit" - } - }, - "nextUnit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341572/relationships/next-unit", - "related": "https://kitsu.io/api/edge/library-entries/14341572/next-unit" - } - } - } - }, { - "id": "14341590", - "type": "libraryEntries", - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341590" - }, - "attributes": { - "status": "completed", - "progress": 12, - "reconsuming": false, - "reconsumeCount": 0, - "notes": null, - "private": false, - "rating": "4.0", - "updatedAt": "2017-01-01T20:58:23.974Z" - }, - "relationships": { - "user": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341590/relationships/user", - "related": "https://kitsu.io/api/edge/library-entries/14341590/user" - } - }, - "anime": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341590/relationships/anime", - "related": "https://kitsu.io/api/edge/library-entries/14341590/anime" - } - }, - "manga": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341590/relationships/manga", - "related": "https://kitsu.io/api/edge/library-entries/14341590/manga" - } - }, - "drama": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341590/relationships/drama", - "related": "https://kitsu.io/api/edge/library-entries/14341590/drama" - } - }, - "review": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341590/relationships/review", - "related": "https://kitsu.io/api/edge/library-entries/14341590/review" - } - }, - "media": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341590/relationships/media", - "related": "https://kitsu.io/api/edge/library-entries/14341590/media" - }, - "data": { - "type": "anime", - "id": "12465" - } - }, - "unit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341590/relationships/unit", - "related": "https://kitsu.io/api/edge/library-entries/14341590/unit" - } - }, - "nextUnit": { - "links": { - "self": "https://kitsu.io/api/edge/library-entries/14341590/relationships/next-unit", - "related": "https://kitsu.io/api/edge/library-entries/14341590/next-unit" - } - } - } - }], - "included": [{ - "id": "11474", - "type": "anime", - "links": { - "self": "https://kitsu.io/api/edge/anime/11474" - }, - "attributes": { - "slug": "hibike-euphonium-2", - "synopsis": "Second season of Hibike! Euphonium.", - "coverImageTopOffset": 120, - "titles": { - "en": "Sound! Euphonium 2", - "en_jp": "Hibike! Euphonium 2", - "ja_jp": "響け!ユーフォニアム 2" - }, - "canonicalTitle": "Hibike! Euphonium 2", - "abbreviatedTitles": null, - "averageRating": 4.16843264284762, - "ratingFrequencies": { - "0.5": "1", - "1.0": "1", - "1.5": "2", - "2.0": "8", - "2.5": "13", - "3.0": "42", - "3.5": "90", - "4.0": "193", - "4.5": "180", - "5.0": "193", - "nil": "1972" - }, - "startDate": "2016-10-06", - "endDate": null, - "posterImage": { - "tiny": "https://media.kitsu.io/anime/poster_images/11474/tiny.jpg?1470781430", - "small": "https://media.kitsu.io/anime/poster_images/11474/small.jpg?1470781430", - "medium": "https://media.kitsu.io/anime/poster_images/11474/medium.jpg?1470781430", - "large": "https://media.kitsu.io/anime/poster_images/11474/large.jpg?1470781430", - "original": "https://media.kitsu.io/anime/poster_images/11474/original.jpg?1470781430" - }, - "coverImage": { - "small": "https://media.kitsu.io/anime/cover_images/11474/small.jpg?1476203965", - "large": "https://media.kitsu.io/anime/cover_images/11474/large.jpg?1476203965", - "original": "https://media.kitsu.io/anime/cover_images/11474/original.jpg?1476203965" - }, - "episodeCount": 13, - "episodeLength": 25, - "subtype": "TV", - "youtubeVideoId": "d2Di5swwzxg", - "ageRating": "PG", - "ageRatingGuide": "", - "showType": "TV", - "nsfw": false - }, - "relationships": { - "genres": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11474/relationships/genres", - "related": "https://kitsu.io/api/edge/anime/11474/genres" - }, - "data": [{ - "type": "genres", - "id": "24" - }, { - "type": "genres", - "id": "35" - }, { - "type": "genres", - "id": "4" - }] - }, - "castings": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11474/relationships/castings", - "related": "https://kitsu.io/api/edge/anime/11474/castings" - } - }, - "installments": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11474/relationships/installments", - "related": "https://kitsu.io/api/edge/anime/11474/installments" - } - }, - "mappings": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11474/relationships/mappings", - "related": "https://kitsu.io/api/edge/anime/11474/mappings" - }, - "data": [{ - "type": "mappings", - "id": "3155" - }] - }, - "reviews": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11474/relationships/reviews", - "related": "https://kitsu.io/api/edge/anime/11474/reviews" - } - }, - "episodes": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11474/relationships/episodes", - "related": "https://kitsu.io/api/edge/anime/11474/episodes" - } - }, - "streamingLinks": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11474/relationships/streaming-links", - "related": "https://kitsu.io/api/edge/anime/11474/streaming-links" - } - } - } - }, { - "id": "10802", - "type": "anime", - "links": { - "self": "https://kitsu.io/api/edge/anime/10802" - }, - "attributes": { - "slug": "nisekoimonogatari", - "synopsis": "Trailer for a fake anime created by Shaft as an April Fool's Day joke.", - "coverImageTopOffset": 80, - "titles": { - "en": "", - "en_jp": "Nisekoimonogatari", - "ja_jp": "" - }, - "canonicalTitle": "Nisekoimonogatari", - "abbreviatedTitles": null, - "averageRating": 3.48579934352873, - "ratingFrequencies": { - "0.5": "22", - "1.0": "10", - "1.5": "16", - "2.0": "32", - "2.5": "74", - "3.0": "97", - "3.5": "118", - "4.0": "72", - "4.5": "34", - "5.0": "136", - "nil": "597", - "0.89": "-1", - "3.63": "-1", - "4.11": "-1", - "0.068": "-1", - "0.205": "-1", - "0.274": "-2", - "0.479": "-1", - "0.548": "-1", - "1.096": "-2", - "1.164": "-1", - "1.438": "-1", - "1.918": "-1", - "2.055": "-1", - "3.973": "-1", - "4.178": "-3", - "4.247": "-1", - "4.726": "-1", - "4.932": "-3", - "1.0958904109589": "3", - "0.89041095890411": "2", - "1.02739726027397": "1", - "1.16438356164384": "2", - "1.43835616438356": "2", - "1.57534246575342": "1", - "1.91780821917808": "1", - "2.05479452054794": "2", - "2.12328767123288": "1", - "2.73972602739726": "1", - "2.80821917808219": "2", - "2.94520547945205": "1", - "3.15068493150685": "1", - "3.35616438356164": "2", - "3.63013698630137": "2", - "3.97260273972603": "1", - "4.10958904109589": "2", - "4.17808219178082": "3", - "4.24657534246575": "1", - "4.38356164383562": "2", - "4.65753424657534": "1", - "4.72602739726027": "2", - "4.86301369863014": "1", - "4.93150684931507": "10", - "0.205479452054795": "1", - "0.273972602739726": "2", - "0.479452054794521": "2", - "0.547945205479452": "2", - "0.753424657534246": "1", - "0.0684931506849315": "1" - }, - "startDate": "2015-04-01", - "endDate": null, - "posterImage": { - "tiny": "https://media.kitsu.io/anime/poster_images/10802/tiny.jpg?1427974534", - "small": "https://media.kitsu.io/anime/poster_images/10802/small.jpg?1427974534", - "medium": "https://media.kitsu.io/anime/poster_images/10802/medium.jpg?1427974534", - "large": "https://media.kitsu.io/anime/poster_images/10802/large.jpg?1427974534", - "original": "https://media.kitsu.io/anime/poster_images/10802/original.jpg?1427974534" - }, - "coverImage": { - "small": "https://media.kitsu.io/anime/cover_images/10802/small.jpg?1427928458", - "large": "https://media.kitsu.io/anime/cover_images/10802/large.jpg?1427928458", - "original": "https://media.kitsu.io/anime/cover_images/10802/original.jpg?1427928458" - }, - "episodeCount": 1, - "episodeLength": 1, - "subtype": "ONA", - "youtubeVideoId": "", - "ageRating": "PG", - "ageRatingGuide": "Teens 13 or older", - "showType": "ONA", - "nsfw": false - }, - "relationships": { - "genres": { - "links": { - "self": "https://kitsu.io/api/edge/anime/10802/relationships/genres", - "related": "https://kitsu.io/api/edge/anime/10802/genres" - }, - "data": [{ - "type": "genres", - "id": "3" - }] - }, - "castings": { - "links": { - "self": "https://kitsu.io/api/edge/anime/10802/relationships/castings", - "related": "https://kitsu.io/api/edge/anime/10802/castings" - } - }, - "installments": { - "links": { - "self": "https://kitsu.io/api/edge/anime/10802/relationships/installments", - "related": "https://kitsu.io/api/edge/anime/10802/installments" - } - }, - "mappings": { - "links": { - "self": "https://kitsu.io/api/edge/anime/10802/relationships/mappings", - "related": "https://kitsu.io/api/edge/anime/10802/mappings" - }, - "data": [{ - "type": "mappings", - "id": "1755" - }] - }, - "reviews": { - "links": { - "self": "https://kitsu.io/api/edge/anime/10802/relationships/reviews", - "related": "https://kitsu.io/api/edge/anime/10802/reviews" - } - }, - "episodes": { - "links": { - "self": "https://kitsu.io/api/edge/anime/10802/relationships/episodes", - "related": "https://kitsu.io/api/edge/anime/10802/episodes" - } - }, - "streamingLinks": { - "links": { - "self": "https://kitsu.io/api/edge/anime/10802/relationships/streaming-links", - "related": "https://kitsu.io/api/edge/anime/10802/streaming-links" - } - } - } - }, { - "id": "11887", - "type": "anime", - "links": { - "self": "https://kitsu.io/api/edge/anime/11887" - }, - "attributes": { - "slug": "brave-witches", - "synopsis": "In September 1944, allied forces led by the 501st Joint Fighter Wing \"Strike Witches\" successfully eliminate the Neuroi threat from the skies of the Republic of Gallia, thus ensuring the security of western Europe. Taking advantage of this victory, allied forces begin a full-fledged push toward central and eastern Europe. From a base in Petersburg in the Empire of Orussia, the 502nd Joint Fighter Wing \"Brave Witches,\" upon whom mankind has placed its hopes, flies with courage in the cold skies of eastern Europe.\n\n(Source: MAL News)", - "coverImageTopOffset": 380, - "titles": { - "en": "", - "en_jp": "Brave Witches", - "ja_jp": "ブレイブウィッチーズ" - }, - "canonicalTitle": "Brave Witches", - "abbreviatedTitles": null, - "averageRating": 3.58468881638491, - "ratingFrequencies": { - "0.5": "1", - "1.0": "4", - "1.5": "8", - "2.0": "12", - "2.5": "17", - "3.0": "33", - "3.5": "41", - "4.0": "32", - "4.5": "9", - "5.0": "19", - "nil": "620" - }, - "startDate": "2016-10-06", - "endDate": null, - "posterImage": { - "tiny": "https://media.kitsu.io/anime/poster_images/11887/tiny.jpg?1476481854", - "small": "https://media.kitsu.io/anime/poster_images/11887/small.jpg?1476481854", - "medium": "https://media.kitsu.io/anime/poster_images/11887/medium.jpg?1476481854", - "large": "https://media.kitsu.io/anime/poster_images/11887/large.jpg?1476481854", - "original": "https://media.kitsu.io/anime/poster_images/11887/original.png?1476481854" - }, - "coverImage": { - "small": "https://media.kitsu.io/anime/cover_images/11887/small.jpg?1479834725", - "large": "https://media.kitsu.io/anime/cover_images/11887/large.jpg?1479834725", - "original": "https://media.kitsu.io/anime/cover_images/11887/original.jpg?1479834725" - }, - "episodeCount": 12, - "episodeLength": 24, - "subtype": "TV", - "youtubeVideoId": "VLUqd-jEBuE", - "ageRating": "R", - "ageRatingGuide": "Mild Nudity", - "showType": "TV", - "nsfw": false - }, - "relationships": { - "genres": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11887/relationships/genres", - "related": "https://kitsu.io/api/edge/anime/11887/genres" - }, - "data": [{ - "type": "genres", - "id": "5" - }, { - "type": "genres", - "id": "8" - }, { - "type": "genres", - "id": "28" - }, { - "type": "genres", - "id": "1" - }, { - "type": "genres", - "id": "25" - }] - }, - "castings": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11887/relationships/castings", - "related": "https://kitsu.io/api/edge/anime/11887/castings" - } - }, - "installments": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11887/relationships/installments", - "related": "https://kitsu.io/api/edge/anime/11887/installments" - } - }, - "mappings": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11887/relationships/mappings", - "related": "https://kitsu.io/api/edge/anime/11887/mappings" - }, - "data": [{ - "type": "mappings", - "id": "2593" - }] - }, - "reviews": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11887/relationships/reviews", - "related": "https://kitsu.io/api/edge/anime/11887/reviews" - } - }, - "episodes": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11887/relationships/episodes", - "related": "https://kitsu.io/api/edge/anime/11887/episodes" - } - }, - "streamingLinks": { - "links": { - "self": "https://kitsu.io/api/edge/anime/11887/relationships/streaming-links", - "related": "https://kitsu.io/api/edge/anime/11887/streaming-links" - } - } - } - }, { - "id": "12024", - "type": "anime", - "links": { - "self": "https://kitsu.io/api/edge/anime/12024" - }, - "attributes": { - "slug": "www-working", - "synopsis": "Daisuke Higashida is a serious first-year student at Higashizaka High School. He lives a peaceful everyday life even though he is not satisfied with the family who doesn't laugh at all and makes him tired. However, his father's company goes bankrupt one day, and he can no longer afford allowances, cellphone bills, and commuter tickets. When his father orders him to take up a part-time job, Daisuke decides to work at a nearby family restaurant in order to avoid traveling 15 kilometers to school by bicycle.", - "coverImageTopOffset": 165, - "titles": { - "en": "WWW.WAGNARIA!!", - "en_jp": "WWW.Working!!", - "ja_jp": "" - }, - "canonicalTitle": "WWW.Working!!", - "abbreviatedTitles": null, - "averageRating": 3.82383742243783, - "ratingFrequencies": { - "1.0": "2", - "1.5": "7", - "2.0": "19", - "2.5": "28", - "3.0": "68", - "3.5": "114", - "4.0": "144", - "4.5": "78", - "5.0": "74", - "nil": "1182" - }, - "startDate": "2016-10-01", - "endDate": "2016-12-24", - "posterImage": { - "tiny": "https://media.kitsu.io/anime/poster_images/12024/tiny.jpg?1473990267", - "small": "https://media.kitsu.io/anime/poster_images/12024/small.jpg?1473990267", - "medium": "https://media.kitsu.io/anime/poster_images/12024/medium.jpg?1473990267", - "large": "https://media.kitsu.io/anime/poster_images/12024/large.jpg?1473990267", - "original": "https://media.kitsu.io/anime/poster_images/12024/original.jpg?1473990267" - }, - "coverImage": { - "small": "https://media.kitsu.io/anime/cover_images/12024/small.jpg?1479834612", - "large": "https://media.kitsu.io/anime/cover_images/12024/large.jpg?1479834612", - "original": "https://media.kitsu.io/anime/cover_images/12024/original.png?1479834612" - }, - "episodeCount": 13, - "episodeLength": 23, - "subtype": "TV", - "youtubeVideoId": "", - "ageRating": "PG", - "ageRatingGuide": "Teens 13 or older", - "showType": "TV", - "nsfw": false - }, - "relationships": { - "genres": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12024/relationships/genres", - "related": "https://kitsu.io/api/edge/anime/12024/genres" - }, - "data": [{ - "type": "genres", - "id": "3" - }, { - "type": "genres", - "id": "16" - }] - }, - "castings": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12024/relationships/castings", - "related": "https://kitsu.io/api/edge/anime/12024/castings" - } - }, - "installments": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12024/relationships/installments", - "related": "https://kitsu.io/api/edge/anime/12024/installments" - } - }, - "mappings": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12024/relationships/mappings", - "related": "https://kitsu.io/api/edge/anime/12024/mappings" - }, - "data": [{ - "type": "mappings", - "id": "2538" - }] - }, - "reviews": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12024/relationships/reviews", - "related": "https://kitsu.io/api/edge/anime/12024/reviews" - } - }, - "episodes": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12024/relationships/episodes", - "related": "https://kitsu.io/api/edge/anime/12024/episodes" - } - }, - "streamingLinks": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12024/relationships/streaming-links", - "related": "https://kitsu.io/api/edge/anime/12024/streaming-links" - } - } - } - }, { - "id": "12465", - "type": "anime", - "links": { - "self": "https://kitsu.io/api/edge/anime/12465" - }, - "attributes": { - "slug": "bishoujo-yuugi-unit-crane-game-girls-galaxy", - "synopsis": "Second season of Bishoujo Yuugi Unit Crane Game Girls.", - "coverImageTopOffset": 0, - "titles": { - "en": "Crane Game Girls Galaxy", - "en_jp": "Bishoujo Yuugi Unit Crane Game Girls Galaxy", - "ja_jp": "美少女遊戯ユニット クレーンゲールギャラクシー" - }, - "canonicalTitle": "Bishoujo Yuugi Unit Crane Game Girls Galaxy", - "abbreviatedTitles": null, - "averageRating": null, - "ratingFrequencies": { - "0.5": "2", - "1.0": "2", - "1.5": "0", - "2.0": "4", - "2.5": "6", - "3.0": "2", - "3.5": "4", - "4.0": "1", - "4.5": "2", - "nil": "66" - }, - "startDate": "2016-10-05", - "endDate": null, - "posterImage": { - "tiny": "https://media.kitsu.io/anime/poster_images/12465/tiny.jpg?1473601756", - "small": "https://media.kitsu.io/anime/poster_images/12465/small.jpg?1473601756", - "medium": "https://media.kitsu.io/anime/poster_images/12465/medium.jpg?1473601756", - "large": "https://media.kitsu.io/anime/poster_images/12465/large.jpg?1473601756", - "original": "https://media.kitsu.io/anime/poster_images/12465/original.png?1473601756" - }, - "coverImage": null, - "episodeCount": null, - "episodeLength": 13, - "subtype": "TV", - "youtubeVideoId": "", - "ageRating": "PG", - "ageRatingGuide": "Children", - "showType": "TV", - "nsfw": false - }, - "relationships": { - "genres": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12465/relationships/genres", - "related": "https://kitsu.io/api/edge/anime/12465/genres" - }, - "data": [{ - "type": "genres", - "id": "3" - }] - }, - "castings": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12465/relationships/castings", - "related": "https://kitsu.io/api/edge/anime/12465/castings" - } - }, - "installments": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12465/relationships/installments", - "related": "https://kitsu.io/api/edge/anime/12465/installments" - } - }, - "mappings": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12465/relationships/mappings", - "related": "https://kitsu.io/api/edge/anime/12465/mappings" - }, - "data": [{ - "type": "mappings", - "id": "9871" - }] - }, - "reviews": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12465/relationships/reviews", - "related": "https://kitsu.io/api/edge/anime/12465/reviews" - } - }, - "episodes": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12465/relationships/episodes", - "related": "https://kitsu.io/api/edge/anime/12465/episodes" - } - }, - "streamingLinks": { - "links": { - "self": "https://kitsu.io/api/edge/anime/12465/relationships/streaming-links", - "related": "https://kitsu.io/api/edge/anime/12465/streaming-links" - } - } - } - }, { - "id": "24", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/24" - }, - "attributes": { - "name": "School", - "slug": "school", - "description": null - } - }, { - "id": "35", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/35" - }, - "attributes": { - "name": "Music", - "slug": "music", - "description": null - } - }, { - "id": "4", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/4" - }, - "attributes": { - "name": "Drama", - "slug": "drama", - "description": "" - } - }, { - "id": "3", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/3" - }, - "attributes": { - "name": "Comedy", - "slug": "comedy", - "description": null - } - }, { - "id": "5", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/5" - }, - "attributes": { - "name": "Sci-Fi", - "slug": "sci-fi", - "description": null - } - }, { - "id": "8", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/8" - }, - "attributes": { - "name": "Magic", - "slug": "magic", - "description": null - } - }, { - "id": "28", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/28" - }, - "attributes": { - "name": "Military", - "slug": "military", - "description": null - } - }, { - "id": "1", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/1" - }, - "attributes": { - "name": "Action", - "slug": "action", - "description": "" - } - }, { - "id": "25", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/25" - }, - "attributes": { - "name": "Ecchi", - "slug": "ecchi", - "description": "" - } - }, { - "id": "16", - "type": "genres", - "links": { - "self": "https://kitsu.io/api/edge/genres/16" - }, - "attributes": { - "name": "Slice of Life", - "slug": "slice-of-life", - "description": "" - } - }, { - "id": "3155", - "type": "mappings", - "links": { - "self": "https://kitsu.io/api/edge/mappings/3155" - }, - "attributes": { - "externalSite": "myanimelist/anime", - "externalId": "31988" - }, - "relationships": { - "media": { - "links": { - "self": "https://kitsu.io/api/edge/mappings/3155/relationships/media", - "related": "https://kitsu.io/api/edge/mappings/3155/media" - } - } - } - }, { - "id": "1755", - "type": "mappings", - "links": { - "self": "https://kitsu.io/api/edge/mappings/1755" - }, - "attributes": { - "externalSite": "myanimelist/anime", - "externalId": "30514" - }, - "relationships": { - "media": { - "links": { - "self": "https://kitsu.io/api/edge/mappings/1755/relationships/media", - "related": "https://kitsu.io/api/edge/mappings/1755/media" - } - } - } - }, { - "id": "2593", - "type": "mappings", - "links": { - "self": "https://kitsu.io/api/edge/mappings/2593" - }, - "attributes": { - "externalSite": "myanimelist/anime", - "externalId": "32866" - }, - "relationships": { - "media": { - "links": { - "self": "https://kitsu.io/api/edge/mappings/2593/relationships/media", - "related": "https://kitsu.io/api/edge/mappings/2593/media" - } - } - } - }, { - "id": "2538", - "type": "mappings", - "links": { - "self": "https://kitsu.io/api/edge/mappings/2538" - }, - "attributes": { - "externalSite": "myanimelist/anime", - "externalId": "33094" - }, - "relationships": { - "media": { - "links": { - "self": "https://kitsu.io/api/edge/mappings/2538/relationships/media", - "related": "https://kitsu.io/api/edge/mappings/2538/media" - } - } - } - }, { - "id": "9871", - "type": "mappings", - "links": { - "self": "https://kitsu.io/api/edge/mappings/9871" - }, - "attributes": { - "externalSite": "myanimelist/anime", - "externalId": "33541" - }, - "relationships": { - "media": { - "links": { - "self": "https://kitsu.io/api/edge/mappings/9871/relationships/media", - "related": "https://kitsu.io/api/edge/mappings/9871/media" - } - } - } - }], - "links": { - "first": "https://kitsu.io/api/edge/library-entries?filter%5Bmedia_type%5D=Anime&filter%5Bstatus%5D=3&filter%5Buser_id%5D=2644&include=media%2Cmedia.genres%2Cmedia.mappings&page%5Blimit%5D=5&page%5Boffset%5D=0&sort=-updated_at", - "next": "https://kitsu.io/api/edge/library-entries?filter%5Bmedia_type%5D=Anime&filter%5Bstatus%5D=3&filter%5Buser_id%5D=2644&include=media%2Cmedia.genres%2Cmedia.mappings&page%5Blimit%5D=5&page%5Boffset%5D=5&sort=-updated_at", - "last": "https://kitsu.io/api/edge/library-entries?filter%5Bmedia_type%5D=Anime&filter%5Bstatus%5D=3&filter%5Buser_id%5D=2644&include=media%2Cmedia.genres%2Cmedia.mappings&page%5Blimit%5D=5&page%5Boffset%5D=555&sort=-updated_at" - } -} \ No newline at end of file diff --git a/tests/AnimeClient/test_data/JsonAPI/organizedIncludes.json b/tests/AnimeClient/test_data/JsonAPI/organizedIncludes.json deleted file mode 100644 index 44d5c1e2..00000000 --- a/tests/AnimeClient/test_data/JsonAPI/organizedIncludes.json +++ /dev/null @@ -1 +0,0 @@ -{"anime":{"11474":{"slug":"hibike-euphonium-2","synopsis":"Second season of Hibike! Euphonium.","coverImageTopOffset":120,"titles":{"en":"Sound! Euphonium 2","en_jp":"Hibike! Euphonium 2","ja_jp":"\u97ff\u3051\uff01\u30e6\u30fc\u30d5\u30a9\u30cb\u30a2\u30e0 \uff12"},"canonicalTitle":"Hibike! Euphonium 2","abbreviatedTitles":null,"averageRating":4.1684326428476197,"ratingFrequencies":{"0.5":"1","1.0":"1","1.5":"2","2.0":"8","2.5":"13","3.0":"42","3.5":"90","4.0":"193","4.5":"180","5.0":"193","nil":"1972"},"startDate":"2016-10-06","endDate":null,"posterImage":{"tiny":"https:\/\/media.kitsu.io\/anime\/poster_images\/11474\/tiny.jpg?1470781430","small":"https:\/\/media.kitsu.io\/anime\/poster_images\/11474\/small.jpg?1470781430","medium":"https:\/\/media.kitsu.io\/anime\/poster_images\/11474\/medium.jpg?1470781430","large":"https:\/\/media.kitsu.io\/anime\/poster_images\/11474\/large.jpg?1470781430","original":"https:\/\/media.kitsu.io\/anime\/poster_images\/11474\/original.jpg?1470781430"},"coverImage":{"small":"https:\/\/media.kitsu.io\/anime\/cover_images\/11474\/small.jpg?1476203965","large":"https:\/\/media.kitsu.io\/anime\/cover_images\/11474\/large.jpg?1476203965","original":"https:\/\/media.kitsu.io\/anime\/cover_images\/11474\/original.jpg?1476203965"},"episodeCount":13,"episodeLength":25,"subtype":"TV","youtubeVideoId":"d2Di5swwzxg","ageRating":"PG","ageRatingGuide":"","showType":"TV","nsfw":false,"relationships":{"genres":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/relationships\/genres","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/genres"},"data":[{"type":"genres","id":"24"},{"type":"genres","id":"35"},{"type":"genres","id":"4"}],"0":"24","1":"35","2":"4"},"castings":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/relationships\/castings","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/castings"}},"installments":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/relationships\/installments","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/installments"}},"mappings":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/relationships\/mappings","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/mappings"},"data":[{"type":"mappings","id":"3155"}],"0":"3155"},"reviews":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/relationships\/reviews","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/reviews"}},"episodes":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/relationships\/episodes","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/episodes"}},"streamingLinks":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/relationships\/streaming-links","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11474\/streaming-links"}}}},"10802":{"slug":"nisekoimonogatari","synopsis":"Trailer for a fake anime created by Shaft as an April Fool's Day joke.","coverImageTopOffset":80,"titles":{"en":"","en_jp":"Nisekoimonogatari","ja_jp":""},"canonicalTitle":"Nisekoimonogatari","abbreviatedTitles":null,"averageRating":3.48579934352873,"ratingFrequencies":{"0.5":"22","1.0":"10","1.5":"16","2.0":"32","2.5":"74","3.0":"97","3.5":"118","4.0":"72","4.5":"34","5.0":"136","nil":"597","0.89":"-1","3.63":"-1","4.11":"-1","0.068":"-1","0.205":"-1","0.274":"-2","0.479":"-1","0.548":"-1","1.096":"-2","1.164":"-1","1.438":"-1","1.918":"-1","2.055":"-1","3.973":"-1","4.178":"-3","4.247":"-1","4.726":"-1","4.932":"-3","1.0958904109589":"3","0.89041095890411":"2","1.02739726027397":"1","1.16438356164384":"2","1.43835616438356":"2","1.57534246575342":"1","1.91780821917808":"1","2.05479452054794":"2","2.12328767123288":"1","2.73972602739726":"1","2.80821917808219":"2","2.94520547945205":"1","3.15068493150685":"1","3.35616438356164":"2","3.63013698630137":"2","3.97260273972603":"1","4.10958904109589":"2","4.17808219178082":"3","4.24657534246575":"1","4.38356164383562":"2","4.65753424657534":"1","4.72602739726027":"2","4.86301369863014":"1","4.93150684931507":"10","0.205479452054795":"1","0.273972602739726":"2","0.479452054794521":"2","0.547945205479452":"2","0.753424657534246":"1","0.0684931506849315":"1"},"startDate":"2015-04-01","endDate":null,"posterImage":{"tiny":"https:\/\/media.kitsu.io\/anime\/poster_images\/10802\/tiny.jpg?1427974534","small":"https:\/\/media.kitsu.io\/anime\/poster_images\/10802\/small.jpg?1427974534","medium":"https:\/\/media.kitsu.io\/anime\/poster_images\/10802\/medium.jpg?1427974534","large":"https:\/\/media.kitsu.io\/anime\/poster_images\/10802\/large.jpg?1427974534","original":"https:\/\/media.kitsu.io\/anime\/poster_images\/10802\/original.jpg?1427974534"},"coverImage":{"small":"https:\/\/media.kitsu.io\/anime\/cover_images\/10802\/small.jpg?1427928458","large":"https:\/\/media.kitsu.io\/anime\/cover_images\/10802\/large.jpg?1427928458","original":"https:\/\/media.kitsu.io\/anime\/cover_images\/10802\/original.jpg?1427928458"},"episodeCount":1,"episodeLength":1,"subtype":"ONA","youtubeVideoId":"","ageRating":"PG","ageRatingGuide":"Teens 13 or older","showType":"ONA","nsfw":false,"relationships":{"genres":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/relationships\/genres","related":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/genres"},"data":[{"type":"genres","id":"3"}],"0":"3"},"castings":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/relationships\/castings","related":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/castings"}},"installments":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/relationships\/installments","related":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/installments"}},"mappings":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/relationships\/mappings","related":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/mappings"},"data":[{"type":"mappings","id":"1755"}],"0":"1755"},"reviews":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/relationships\/reviews","related":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/reviews"}},"episodes":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/relationships\/episodes","related":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/episodes"}},"streamingLinks":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/relationships\/streaming-links","related":"https:\/\/kitsu.io\/api\/edge\/anime\/10802\/streaming-links"}}}},"11887":{"slug":"brave-witches","synopsis":"In September 1944, allied forces led by the 501st Joint Fighter Wing \"Strike Witches\" successfully eliminate the Neuroi threat from the skies of the Republic of Gallia, thus ensuring the security of western Europe. Taking advantage of this victory, allied forces begin a full-fledged push toward central and eastern Europe. From a base in Petersburg in the Empire of Orussia, the 502nd Joint Fighter Wing \"Brave Witches,\" upon whom mankind has placed its hopes, flies with courage in the cold skies of eastern Europe.\n\n(Source: MAL News)","coverImageTopOffset":380,"titles":{"en":"","en_jp":"Brave Witches","ja_jp":"\u30d6\u30ec\u30a4\u30d6\u30a6\u30a3\u30c3\u30c1\u30fc\u30ba"},"canonicalTitle":"Brave Witches","abbreviatedTitles":null,"averageRating":3.5846888163849102,"ratingFrequencies":{"0.5":"1","1.0":"4","1.5":"8","2.0":"12","2.5":"17","3.0":"33","3.5":"41","4.0":"32","4.5":"9","5.0":"19","nil":"620"},"startDate":"2016-10-06","endDate":null,"posterImage":{"tiny":"https:\/\/media.kitsu.io\/anime\/poster_images\/11887\/tiny.jpg?1476481854","small":"https:\/\/media.kitsu.io\/anime\/poster_images\/11887\/small.jpg?1476481854","medium":"https:\/\/media.kitsu.io\/anime\/poster_images\/11887\/medium.jpg?1476481854","large":"https:\/\/media.kitsu.io\/anime\/poster_images\/11887\/large.jpg?1476481854","original":"https:\/\/media.kitsu.io\/anime\/poster_images\/11887\/original.png?1476481854"},"coverImage":{"small":"https:\/\/media.kitsu.io\/anime\/cover_images\/11887\/small.jpg?1479834725","large":"https:\/\/media.kitsu.io\/anime\/cover_images\/11887\/large.jpg?1479834725","original":"https:\/\/media.kitsu.io\/anime\/cover_images\/11887\/original.jpg?1479834725"},"episodeCount":12,"episodeLength":24,"subtype":"TV","youtubeVideoId":"VLUqd-jEBuE","ageRating":"R","ageRatingGuide":"Mild Nudity","showType":"TV","nsfw":false,"relationships":{"genres":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/relationships\/genres","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/genres"},"data":[{"type":"genres","id":"5"},{"type":"genres","id":"8"},{"type":"genres","id":"28"},{"type":"genres","id":"1"},{"type":"genres","id":"25"}],"0":"5","1":"8","2":"28","3":"1","4":"25"},"castings":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/relationships\/castings","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/castings"}},"installments":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/relationships\/installments","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/installments"}},"mappings":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/relationships\/mappings","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/mappings"},"data":[{"type":"mappings","id":"2593"}],"0":"2593"},"reviews":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/relationships\/reviews","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/reviews"}},"episodes":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/relationships\/episodes","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/episodes"}},"streamingLinks":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/relationships\/streaming-links","related":"https:\/\/kitsu.io\/api\/edge\/anime\/11887\/streaming-links"}}}},"12024":{"slug":"www-working","synopsis":"Daisuke Higashida is a serious first-year student at Higashizaka High School. He lives a peaceful everyday life even though he is not satisfied with the family who doesn't laugh at all and makes him tired. However, his father's company goes bankrupt one day, and he can no longer afford allowances, cellphone bills, and commuter tickets. When his father orders him to take up a part-time job, Daisuke decides to work at a nearby family restaurant in order to avoid traveling 15 kilometers to school by bicycle.","coverImageTopOffset":165,"titles":{"en":"WWW.WAGNARIA!!","en_jp":"WWW.Working!!","ja_jp":""},"canonicalTitle":"WWW.Working!!","abbreviatedTitles":null,"averageRating":3.8238374224378302,"ratingFrequencies":{"1.0":"2","1.5":"7","2.0":"19","2.5":"28","3.0":"68","3.5":"114","4.0":"144","4.5":"78","5.0":"74","nil":"1182"},"startDate":"2016-10-01","endDate":"2016-12-24","posterImage":{"tiny":"https:\/\/media.kitsu.io\/anime\/poster_images\/12024\/tiny.jpg?1473990267","small":"https:\/\/media.kitsu.io\/anime\/poster_images\/12024\/small.jpg?1473990267","medium":"https:\/\/media.kitsu.io\/anime\/poster_images\/12024\/medium.jpg?1473990267","large":"https:\/\/media.kitsu.io\/anime\/poster_images\/12024\/large.jpg?1473990267","original":"https:\/\/media.kitsu.io\/anime\/poster_images\/12024\/original.jpg?1473990267"},"coverImage":{"small":"https:\/\/media.kitsu.io\/anime\/cover_images\/12024\/small.jpg?1479834612","large":"https:\/\/media.kitsu.io\/anime\/cover_images\/12024\/large.jpg?1479834612","original":"https:\/\/media.kitsu.io\/anime\/cover_images\/12024\/original.png?1479834612"},"episodeCount":13,"episodeLength":23,"subtype":"TV","youtubeVideoId":"","ageRating":"PG","ageRatingGuide":"Teens 13 or older","showType":"TV","nsfw":false,"relationships":{"genres":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/relationships\/genres","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/genres"},"data":[{"type":"genres","id":"3"},{"type":"genres","id":"16"}],"0":"3","1":"16"},"castings":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/relationships\/castings","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/castings"}},"installments":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/relationships\/installments","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/installments"}},"mappings":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/relationships\/mappings","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/mappings"},"data":[{"type":"mappings","id":"2538"}],"0":"2538"},"reviews":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/relationships\/reviews","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/reviews"}},"episodes":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/relationships\/episodes","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/episodes"}},"streamingLinks":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/relationships\/streaming-links","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12024\/streaming-links"}}}},"12465":{"slug":"bishoujo-yuugi-unit-crane-game-girls-galaxy","synopsis":"Second season of Bishoujo Yuugi Unit Crane Game Girls.","coverImageTopOffset":0,"titles":{"en":"Crane Game Girls Galaxy","en_jp":"Bishoujo Yuugi Unit Crane Game Girls Galaxy","ja_jp":"\u7f8e\u5c11\u5973\u904a\u622f\u30e6\u30cb\u30c3\u30c8 \u30af\u30ec\u30fc\u30f3\u30b2\u30fc\u30eb\u30ae\u30e3\u30e9\u30af\u30b7\u30fc"},"canonicalTitle":"Bishoujo Yuugi Unit Crane Game Girls Galaxy","abbreviatedTitles":null,"averageRating":null,"ratingFrequencies":{"0.5":"2","1.0":"2","1.5":"0","2.0":"4","2.5":"6","3.0":"2","3.5":"4","4.0":"1","4.5":"2","nil":"66"},"startDate":"2016-10-05","endDate":null,"posterImage":{"tiny":"https:\/\/media.kitsu.io\/anime\/poster_images\/12465\/tiny.jpg?1473601756","small":"https:\/\/media.kitsu.io\/anime\/poster_images\/12465\/small.jpg?1473601756","medium":"https:\/\/media.kitsu.io\/anime\/poster_images\/12465\/medium.jpg?1473601756","large":"https:\/\/media.kitsu.io\/anime\/poster_images\/12465\/large.jpg?1473601756","original":"https:\/\/media.kitsu.io\/anime\/poster_images\/12465\/original.png?1473601756"},"coverImage":null,"episodeCount":null,"episodeLength":13,"subtype":"TV","youtubeVideoId":"","ageRating":"PG","ageRatingGuide":"Children","showType":"TV","nsfw":false,"relationships":{"genres":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/relationships\/genres","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/genres"},"data":[{"type":"genres","id":"3"}],"0":"3"},"castings":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/relationships\/castings","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/castings"}},"installments":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/relationships\/installments","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/installments"}},"mappings":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/relationships\/mappings","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/mappings"},"data":[{"type":"mappings","id":"9871"}],"0":"9871"},"reviews":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/relationships\/reviews","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/reviews"}},"episodes":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/relationships\/episodes","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/episodes"}},"streamingLinks":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/relationships\/streaming-links","related":"https:\/\/kitsu.io\/api\/edge\/anime\/12465\/streaming-links"}}}}},"genres":{"24":{"name":"School","slug":"school","description":null},"35":{"name":"Music","slug":"music","description":null},"4":{"name":"Drama","slug":"drama","description":""},"3":{"name":"Comedy","slug":"comedy","description":null},"5":{"name":"Sci-Fi","slug":"sci-fi","description":null},"8":{"name":"Magic","slug":"magic","description":null},"28":{"name":"Military","slug":"military","description":null},"1":{"name":"Action","slug":"action","description":""},"25":{"name":"Ecchi","slug":"ecchi","description":""},"16":{"name":"Slice of Life","slug":"slice-of-life","description":""}},"mappings":{"3155":{"externalSite":"myanimelist\/anime","externalId":"31988","relationships":{"media":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/mappings\/3155\/relationships\/media","related":"https:\/\/kitsu.io\/api\/edge\/mappings\/3155\/media"}}}},"1755":{"externalSite":"myanimelist\/anime","externalId":"30514","relationships":{"media":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/mappings\/1755\/relationships\/media","related":"https:\/\/kitsu.io\/api\/edge\/mappings\/1755\/media"}}}},"2593":{"externalSite":"myanimelist\/anime","externalId":"32866","relationships":{"media":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/mappings\/2593\/relationships\/media","related":"https:\/\/kitsu.io\/api\/edge\/mappings\/2593\/media"}}}},"2538":{"externalSite":"myanimelist\/anime","externalId":"33094","relationships":{"media":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/mappings\/2538\/relationships\/media","related":"https:\/\/kitsu.io\/api\/edge\/mappings\/2538\/media"}}}},"9871":{"externalSite":"myanimelist\/anime","externalId":"33541","relationships":{"media":{"links":{"self":"https:\/\/kitsu.io\/api\/edge\/mappings\/9871\/relationships\/media","related":"https:\/\/kitsu.io\/api\/edge\/mappings\/9871\/media"}}}}}} \ No newline at end of file