jikan-me / jikan

Unofficial MyAnimeList PHP+REST API which provides functions other than the official API
https://jikan.moe
MIT License
875 stars 93 forks source link

Update to new Review system #476

Closed irfan-dahir closed 2 years ago

irfan-dahir commented 2 years ago

I thought it would be better to get a draft PR up first as the changes are more larger than I thought - so it'd be better to have a definition to keep track of.

MAL rehauled their review system.

Affects: #446

Possibly Affected Requests/Endpoints

  1. Anime/Reviews
  2. User Reviews (from user profile)
  3. Recent Reviews

Changes

Apart from the HTML changes MAL has removed/added some things.

  1. Added reactions for reviews: image

  2. Removed Overall Scorings provided by the reviewer.

    In the process of increasing the textbox area and improving the display of the write a review page, we removed the old score sections (Story, Art, ...) There were two main reasons for this: (1) these scores weren't visible on the main view of the review (unless you knew the trick to make it appear), and (2) we found it gave writers the impression that they were required to break their reviews down into these sections, which we wanted to avoid. ๐Ÿ”–ใ€€If you entered scores in the Story, Art,... sections on old reviews, these scores have been appended to the end of your review text.

This is possibly replaced with just this: image

  1. MAL also introduced a global review tag based on the reactions: image

New review categories/tagsใ€€โœ… Different users have different scoring tendencies, and it is difficult to tell from an overall rating alone whether the review writer is recommending the anime/manga to the reader or not. To make it easier for readers to find and compare contrasting perspectives ("You should watch this", "Don't go near it"), we have categorized reviews into three groups: Recommended โ†’ Placeholder: Overall 7-10 Mixed Feelings โ†’ Placeholder: Overall 5-6 Not Recommended โ†’ Placeholder: Overall 1-4 ใ€€ใ€€๐Ÿ”–ใ€€As a placeholder, we automatically labelled existing reviews. ใ€€ใ€€๐Ÿ”–ใ€€Writers can edit their existing reviews to adjust the tag (as necessary) without needing to modify their score.

To help find reviews written with a specific style, we have also added four categories/tags which will be based on reader feedback: Informational, Well-written โ†’ For truly "Helpful" and eloquent reviews Funny, Creative โ†’ For writers who prefer to write (for example) in poem or overly theatrical prose ใ€€ใ€€๐Ÿ”–ใ€€Review moderators will be able to add/remove labels as necessary to preserve the feature's intended use.

So we can expect the following tags: Recommended, Mixed Feelings, Not Recommended

  1. image Prelimary reviews only return the no of episodes watched and are tagged as such.

  2. Spoiler warning


Show who has voted on a reviewใ€€๐Ÿ”œ The main reason for showing the username list of review votes is to make botting easily visible to all members. Understandably, negative reactions more easily incite anger in the community, so this was the reason the updated list of feedback options do not contain noticeably negative responses.

ใ€€ใ€€๐Ÿ”–ใ€€Clicking the area which displays the total review votes will bring up a pop-up with the username list.

It's to note that MAL will be adding a way to know who reacted what on the review. Ignoring this for this PR as it's not implemented yet.


New Featuers Added

Schema Updates

Request Updates

irfan-dahir commented 2 years ago

getRecentReviews will be renamed to getReviews.

MAL has removed the mixed recent reviews page. It's just now 1 review page with 2 tabs; Anime and Manga. And they both the same filters as Anime/Manga Review pages.

None of this is backward compatible as this will change some method names and parameters. Should tag this as a v4 release.


Constants removed

    public const RECENT_REVIEW_ANIME = 'anime';
    public const RECENT_REVIEW_MANGA = 'manga';
    public const RECENT_REVIEW_BEST_VOTED = 'bestvoted';
irfan-dahir commented 2 years ago

Alright, it should be good for review (pun unintended).


Reviews

$data = $jikan->getReviews(
    new \Jikan\Request\Reviews\ReviewsRequest(
        \Jikan\Helper\Constants::MANGA, // type
        1, // page
        \Jikan\Helper\Constants::REVIEWS_SORT_MOST_VOTED, // sort
        true, // show spoilers
        true // show preliminary
    )
);

Parses: https://myanimelist.net/reviews.php?t=manga&spoiler=on&preliminary=on&sort=mostvoted


Anime/Manga Reviews

$data = $jikan->getAnimeReviews(
    new \Jikan\Request\Anime\AnimeReviewsRequest(
        1, // MAL ID
        1, // page
        \Jikan\Helper\Constants::REVIEWS_SORT_MOST_VOTED, //sort
        true, // show spoilers
        false // show preliminary
        )
);

Parses: https://myanimelist.net/anime/1/Cowboy_Bebop/reviews?sort=mostvoted&spoiler=on&preliminary=off


User Reviews

$data = $jikan->getUserReviews(
    new \Jikan\Request\User\UserReviewsRequest('Stark700', 1) // username and page
);

Parses: https://myanimelist.net/profile/Stark700/reviews