Skip to content

Manga Classes

pymoe.manga.get

character(item_id)

Source code in pymoe\manga\get\__init__.py
def character(item_id: int):
    return anilist.character(item_id)

manga(item_id)

Source code in pymoe\manga\get\__init__.py
def manga(item_id: int):
    return anilist.manga(item_id)

staff(item_id)

Source code in pymoe\manga\get\__init__.py
def staff(item_id: int):
    return anilist.staff(item_id)

pymoe.manga.get.anilist

settings = {'header': {'Content-Type': 'application/json', 'User-Agent': 'Pymoe (github.com/ccubed/PyMoe)', 'Accept': 'application/json'}, 'apiurl': 'https://graphql.anilist.co'} module-attribute

character(item_id)

Anilist does not separate characters by anime/manga. This is simply a reference to the character function that already exists.

Source code in pymoe\manga\get\anilist.py
def character(item_id: int):
    """
    Anilist does not separate characters by anime/manga.
    This is simply a reference to the character function that already exists.
    """
    return cref(item_id)

manga(item_id)

The function to retrieve a manga's details. I really couldn't think of another name for this.

Source code in pymoe\manga\get\anilist.py
def manga(item_id: int):
    """
    The function to retrieve a manga's details.
    I really couldn't think of another name for this.
    """
    query_string = """\
        query( $id: Int ) {
            Media( id: $id, type: MANGA ) {
                idMal
                title {
                    romaji
                    english
                }
                status
                description
                startDate {
                    year
                    month
                    day
                }
                endDate {
                    year
                    month
                    day
                }
                coverImage {
                    extraLarge
                    large
                    medium
                    color
                }
                chapters
                volumes
                genres
                synonyms
                averageScore
                isAdult
                siteUrl
                popularity
                characters {
                    nodes {
                        id
                        name {
                            first
                            last
                        }
                        image {
                            large
                            medium
                        }
                        description
                        gender
                        age
                        siteUrl
                    }
                }
            }
        }        
    """

    json_params = {"query": query_string, "variables": {"id": item_id}}

    r = requests.post(settings["apiurl"], headers=settings["header"], json=json_params)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        if "errors" in jsd:
            raise serverError(r.text, r.status_code)
        else:
            return jsd

staff(item_id)

Anilist does not separate staff by anime/manga. This is simply a reference to the staff function that already exists.

Source code in pymoe\manga\get\anilist.py
def staff(item_id: int):
    """
    Anilist does not separate staff by anime/manga.
    This is simply a reference to the staff function that already exists.
    """
    return sref(item_id)

pymoe.manga.get.kitsu

settings = {'header': {'Content-Type': 'application/vnd.api+json', 'User-Agent': 'Pymoe (github.com/ccubed/PyMoe)', 'Accept': 'application/vnd.api+json'}, 'apiurl': 'https://kitsu.io/api/edge'} module-attribute

manga(item_id)

Get information on the given manga by ID.

PARAMETER DESCRIPTION
item_id

The ID of the manga you want information on

TYPE: int

Source code in pymoe\manga\get\kitsu.py
def manga(item_id: int):
    """
    Get information on the given manga by ID.

    :param item_id: The ID of the manga you want information on
    """
    r = requests.get(
        settings["apiurl"] + "/manga/{}".format(item_id), headers=settings["header"]
    )

    if r.status_code != 200:
        if r.status_code == 404:
            return None
        else:
            raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        return jsd

pymoe.manga.get.mangaupdates

settings = {'header': {'Content-Type': 'application/json', 'User-Agent': 'Pymoe (github.com/ccubed/PyMoe)', 'Accept': 'application/json'}, 'apiurl': 'https://api.mangaupdates.com/v1/'} module-attribute

author(authorId)

Get a specific author by ID

PARAMETER DESCRIPTION
authorId

The author ID to get data for.

TYPE: int

Source code in pymoe\manga\get\mangaupdates.py
def author(authorId: int):
    """
    Get a specific author by ID

    :param authorId: The author ID to get data for.
    """
    r = requests.get(
        settings["apiurl"] + "authors/{}".format(authorId), headers=settings["header"]
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        return jsd

genres()

Get a list of all genres. Note that this literally returns all genres as a list of dictionaries.

Source code in pymoe\manga\get\mangaupdates.py
def genres():
    """
    Get a list of all genres.
    Note that this literally returns all genres as a list of dictionaries.
    """
    r = requests.get(settings["apiurl"] + "genres", headers=settings["header"])

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        return jsd

group(groupId)

Get a specific group by ID

PARAMETER DESCRIPTION
groupId

The group ID to get data for.

TYPE: int

Source code in pymoe\manga\get\mangaupdates.py
def group(groupId: int):
    """
    Get a specific group by ID

    :param groupId: The group ID to get data for.
    """
    r = requests.get(
        settings["apiurl"] + "groups/{}".format(groupId), headers=settings["header"]
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        return jsd

groupsByManga(seriesId)

Get a list of groups that have worked on a series

PARAMETER DESCRIPTION
seriesId

The Series to find groups for

TYPE: int

Source code in pymoe\manga\get\mangaupdates.py
def groupsByManga(seriesId: int):
    """
    Get a list of groups that have worked on a series

    :param seriesId: The Series to find groups for
    """
    r = requests.get(
        settings["apiurl"] + "series/{}/groups".format(seriesId),
        headers=settings["header"],
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        return jsd

manga(seriesId)

Get a specific series by series ID.

PARAMETER DESCRIPTION
seriesId

The Series ID to get data for.

TYPE: int

Source code in pymoe\manga\get\mangaupdates.py
def manga(seriesId: int):
    """
    Get a specific series by series ID.

    :param seriesId: The Series ID to get data for.
    """
    r = requests.get(
        settings["apiurl"] + "series/{}".format(seriesId), headers=settings["header"]
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        return jsd

mangaByAuthor(authorId)

Get a list of series an author has worked on

PARAMETER DESCRIPTION
authorId

The author ID to get data for.

TYPE: int

Source code in pymoe\manga\get\mangaupdates.py
def mangaByAuthor(authorId: int):
    """
    Get a list of series an author has worked on

    :param authorId: The author ID to get data for.
    """
    r = requests.post(
        settings["apiurl"] + "authors/{}/series".format(authorId),
        headers=settings["header"],
        json={"orderby": "title"},
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        return jsd

mangaReleaseFeed(seriesId)

Get an RSS Feed of Releases for a specific series

PARAMETER DESCRIPTION
seriesId

The Series ID to get a feed for

TYPE: int

Source code in pymoe\manga\get\mangaupdates.py
def mangaReleaseFeed(seriesId: int):
    """
    Get an RSS Feed of Releases for a specific series

    :param seriesId: The Series ID to get a feed for
    """
    r = requests.get(
        settings["apiurl"] + "series/{}/rss".format(seriesId), headers=settings["header"]
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    # This is simply XML data.
    return r.text

publisher(publisherId)

Get a specific publisher by ID

PARAMETER DESCRIPTION
publisherId

The Publisher ID to get data for.

TYPE: int

Source code in pymoe\manga\get\mangaupdates.py
def publisher(publisherId: int):
    """
    Get a specific publisher by ID

    :param publisherId: The Publisher ID to get data for.
    """
    r = requests.get(
        settings["apiurl"] + "publishers/{}".format(publisherId),
        headers=settings["header"],
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        return jsd

releasesFeed()

Get an RSS Feed of Releases for the entire site

Source code in pymoe\manga\get\mangaupdates.py
def releasesFeed():
    """
    Get an RSS Feed of Releases for the entire site
    """
    r = requests.get(settings["apiurl"] + "releases/rss", headers=settings["header"])

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    # This is simply XML data.
    return r.text

review(reviewId)

Get a specific review by ID

PARAMETER DESCRIPTION
reviewId

The Review ID to get data for.

TYPE: int

Source code in pymoe\manga\get\mangaupdates.py
def review(reviewId: int):
    """
    Get a specific review by ID

    :param reviewId: The Review ID to get data for.
    """
    r = requests.get(
        settings["apiurl"] + "reviews/{}".format(reviewId), headers=settings["header"]
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        return jsd

pymoe.manga.search

manga(title)

Source code in pymoe\manga\search\__init__.py
def manga(title: str):
    return anilist.manga(title)

pymoe.manga.search.anilist

settings = {'header': {'Content-Type': 'application/json', 'User-Agent': 'Pymoe (github.com/ccubed/PyMoe)', 'Accept': 'application/json'}, 'apiurl': 'https://graphql.anilist.co'} module-attribute

characters(item_id)

Anilist does not separate characters by anime/manga. This is simply a reference to the character function that already exists.

Source code in pymoe\manga\search\anilist.py
def characters(item_id: int):
    """
    Anilist does not separate characters by anime/manga.
    This is simply a reference to the character function that already exists.
    """
    return cref(item_id)

manga(term, page=1, perPage=3)

Search for manga that match term in the kitsu api.

PARAMETER DESCRIPTION
term

Search Term

TYPE: str

page

Which page of results?

TYPE: int DEFAULT: 1

perPage

How many results per page?

TYPE: int DEFAULT: 3

Source code in pymoe\manga\search\anilist.py
def manga(term: str, page: int = 1, perPage: int = 3):
    """
    Search for manga that match term in the kitsu api.

    :param term: Search Term
    :param page: Which page of results?
    :param perPage: How many results per page?
    """
    query_string = """\
        query( $query: String, $page: Int, $perPage: Int ){
            Page ( page: $page, perPage: $perPage ) {
                pageInfo {
                    currentPage
                    hasNextPage
                }
                media ( search: $query, type: MANGA ){
                    id
                    idMal
                    title {
                        romaji
                        english
                    }
                    coverImage {
                        extraLarge
                        large
                        medium
                        color
                    }
                    status
                    description
                    startDate {
                        year
                        month
                        day
                    }
                    endDate {
                        year
                        month
                        day
                    }
                    averageScore
                    popularity
                    chapters
                    volumes
                    genres
                    hashtag
                    isAdult
                    averageScore
                    synonyms
                    siteUrl
                }
            }
        }    
    """

    json_params = {
        "query": query_string,
        "variables": {"query": term, "page": page, "perPage": perPage},
    }

    r = requests.post(settings["apiurl"], headers=settings["header"], json=json_params)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        if "errors" in jsd:
            raise serverError(r.text, r.status_code)
        else:
            if jsd["data"]["Page"]["pageInfo"]["hasNextPage"]:
                return anilistWrapper(
                    jsd["data"]["Page"]["media"],
                    json_params,
                    settings["header"],
                    settings["apiurl"],
                )
            else:
                return jsd["data"]["Page"]["media"]

staff(item_id)

Anilist does not separate staff by anime/manga. This is simply a reference to the staff function that already exists.

Source code in pymoe\manga\search\anilist.py
def staff(item_id: int):
    """
    Anilist does not separate staff by anime/manga.
    This is simply a reference to the staff function that already exists.
    """
    return sref(item_id)

pymoe.manga.search.kitsu

settings = {'header': {'Content-Type': 'application/vnd.api+json', 'User-Agent': 'Pymoe (github.com/ccubed/PyMoe)', 'Accept': 'application/vnd.api+json'}, 'apiurl': 'https://kitsu.io/api/edge'} module-attribute

manga(term)

Search for manga that match the search term in the Kitsu API.

PARAMETER DESCRIPTION
term

Search Term

TYPE: str

Source code in pymoe\manga\search\kitsu.py
def manga(term: str):
    """
    Search for manga that match the search term in the Kitsu API.

    :param term: Search Term
    """
    r = requests.get(
        settings["apiurl"] + "/manga",
        params={"filter[text]": term},
        headers=settings["header"],
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        if jsd["meta"]["count"]:
            return kitsuWrapper(
                jsd["data"],
                jsd["links"]["next"] if "next" in jsd["links"] else None,
                settings["header"],
            )
        else:
            return jsd

pymoe.manga.search.mangaupdates

settings = {'header': {'Content-Type': 'application/json', 'User-Agent': 'Pymoe (github.com/ccubed/PyMoe)', 'Accept': 'application/json'}, 'apiurl': 'https://api.mangaupdates.com/v1/'} module-attribute

authors(title, options=None, page=1, perPage=5)

Search for Authors that match the title. Options is an optional dictionary containing additional search options to pass.

PARAMETER DESCRIPTION
title

The name of the Author to find

TYPE: str

options

An optional dictionary of additional search criteria

TYPE: Dict DEFAULT: None

page

Which page of results

TYPE: int DEFAULT: 1

perPage

Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100

TYPE: int DEFAULT: 5

Source code in pymoe\manga\search\mangaupdates.py
def authors(title: str, options: Dict = None, page: int = 1, perPage: int = 5):
    """
    Search for Authors that match the title.
    Options is an optional dictionary containing additional search options to pass.

    :param title: The name of the Author to find
    :param options: An optional dictionary of additional search criteria
    :param page: Which page of results
    :param perPage: Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100
    """
    thisData = None
    if options:
        thisData = options
        thisData["search"] = title
        thisData["page"] = page
        thisData["perPage"] = perPage
    else:
        thisData = {"search": title, "page": page, "perPage": perPage}

    r = requests.post(
        settings["apiurl"] + "authors/search", headers=settings["header"], json=thisData
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        if jsd["total_hits"] > jsd["per_page"]:
            return mangaupdatesWrapper(
                jsd["results"],
                settings["apiurl"] + "series/search",
                settings["header"],
                thisData,
                round(jsd["total_hits"] / jsd["per_page"], 0),
            )
        else:
            return jsd["results"]

categories(title, options=None, page=1, perPage=5)

Search for Categories that match the title. Options is an optional dictionary containing additional search options to pass.

PARAMETER DESCRIPTION
title

The name of the Category to find

TYPE: str

options

An optional dictionary of additional search criteria

TYPE: Dict DEFAULT: None

page

Which page of results

TYPE: int DEFAULT: 1

perPage

Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100

TYPE: int DEFAULT: 5

Source code in pymoe\manga\search\mangaupdates.py
def categories(title: str, options: Dict = None, page: int = 1, perPage: int = 5):
    """
    Search for Categories that match the title.
    Options is an optional dictionary containing additional search options to pass.

    :param title: The name of the Category to find
    :param options: An optional dictionary of additional search criteria
    :param page: Which page of results
    :param perPage: Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100
    """
    thisData = None
    if options:
        thisData = options
        thisData["search"] = title
        thisData["page"] = page
        thisData["perpage"] = perPage
    else:
        thisData = {"search": title, "page": page, "perPage": perPage}

    r = requests.post(
        settings["apiurl"] + "categories/search",
        headers=settings["header"],
        json=thisData,
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        if jsd["total_hits"] > jsd["per_page"]:
            return mangaupdatesWrapper(
                jsd["results"],
                settings["apiurl"] + "series/search",
                settings["header"],
                thisData,
                round(jsd["total_hits"] / jsd["per_page"], 0),
            )
        else:
            return jsd["results"]

groups(title, options=None, page=1, perPage=5)

Search for Groups that match the title. Groups are scanlators, uploaders, raw providers, etc. Options is an optional dictionary containing additional search options to pass.

PARAMETER DESCRIPTION
title

The name of the group to find

TYPE: str

options

An optional dictionary of additional search criteria

TYPE: Dict DEFAULT: None

page

Which page of results

TYPE: int DEFAULT: 1

perPage

Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100

TYPE: int DEFAULT: 5

Source code in pymoe\manga\search\mangaupdates.py
def groups(title: str, options: Dict = None, page: int = 1, perPage: int = 5):
    """
    Search for Groups that match the title.
    Groups are scanlators, uploaders, raw providers, etc.
    Options is an optional dictionary containing additional search options to pass.

    :param title: The name of the group to find
    :param options: An optional dictionary of additional search criteria
    :param page: Which page of results
    :param perPage: Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100
    """
    thisData = None
    if options:
        thisData = options
        thisData["search"] = title
        thisData["page"] = page
        thisData["perPage"] = perPage
    else:
        thisData = {"search": title, "page": page, "perPage": perPage}

    r = requests.post(
        settings["apiurl"] + "groups/search", headers=settings["header"], json=thisData
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        if jsd["total_hits"] > jsd["per_page"]:
            return mangaupdatesWrapper(
                jsd["results"],
                settings["apiurl"] + "series/search",
                settings["header"],
                thisData,
                round(jsd["total_hits"] / jsd["per_page"], 0),
            )
        else:
            return jsd["results"]

manga(title, options=None, page=1, perPage=5)

Search for a series with title on Mangaupdates. Options is an optional dictionary containing additional search options to pass.

PARAMETER DESCRIPTION
title

The title to search for

TYPE: str

options

An optional dictionary of additional search criteria

TYPE: Dict DEFAULT: None

page

Which page of results

TYPE: int DEFAULT: 1

perPage

Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100

TYPE: int DEFAULT: 5

Source code in pymoe\manga\search\mangaupdates.py
def manga(title: str, options: Dict = None, page: int = 1, perPage: int = 5):
    """
    Search for a series with title on Mangaupdates.
    Options is an optional dictionary containing additional search options to pass.

    :param title: The title to search for
    :param options: An optional dictionary of additional search criteria
    :param page: Which page of results
    :param perPage: Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100
    """
    thisData = None
    if options:
        thisData = options
        thisData["search"] = title
        thisData["page"] = page
        thisData["perPage"] = perPage
    else:
        thisData = {"search": title, "page": page, "perPage": perPage}

    r = requests.post(
        settings["apiurl"] + "series/search", headers=settings["header"], json=thisData
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        if jsd["total_hits"] > jsd["per_page"]:
            return mangaupdatesWrapper(
                jsd["results"],
                settings["apiurl"] + "series/search",
                settings["header"],
                thisData,
                round(jsd["total_hits"] / jsd["per_page"], 0),
            )
        else:
            return jsd["results"]

publishers(title, options=None, page=1, perPage=5)

Search for Publishers that match the title. Options is an optional dictionary containing additional search options to pass.

PARAMETER DESCRIPTION
title

The name of the publisher to find

TYPE: str

options

An optional dictionary of additional search criteria

TYPE: Dict DEFAULT: None

page

Which page of results

TYPE: int DEFAULT: 1

perPage

Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100

TYPE: int DEFAULT: 5

Source code in pymoe\manga\search\mangaupdates.py
def publishers(title: str, options: Dict = None, page: int = 1, perPage: int = 5):
    """
    Search for Publishers that match the title.
    Options is an optional dictionary containing additional search options to pass.

    :param title: The name of the publisher to find
    :param options: An optional dictionary of additional search criteria
    :param page: Which page of results
    :param perPage: Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100
    """
    thisData = None
    if options:
        thisData = options
        thisData["search"] = title
        thisData["page"] = page
        thisData["perPage"] = perPage
    else:
        thisData = {"search": title, "page": page, "perPage": perPage}

    r = requests.post(
        settings["apiurl"] + "publishers/search",
        headers=settings["header"],
        json=thisData,
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        if jsd["total_hits"] > jsd["per_page"]:
            return mangaupdatesWrapper(
                jsd["results"],
                settings["apiurl"] + "series/search",
                settings["header"],
                thisData,
                round(jsd["total_hits"] / jsd["per_page"], 0),
            )
        else:
            return jsd["results"]

releases(seriesId, options=None, page=1, perPage=5)

Search for releases for a specific series ID. Options is an optional dictionary containing additional search options to pass.

PARAMETER DESCRIPTION
seriesId

The Series ID to find releases for

TYPE: int

options

An optional dictionary of additional search criteria

TYPE: Dict DEFAULT: None

page

Which page of results

TYPE: int DEFAULT: 1

perPage

Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100

TYPE: int DEFAULT: 5

Source code in pymoe\manga\search\mangaupdates.py
def releases(seriesId: int, options: Dict = None, page: int = 1, perPage: int = 5):
    """
    Search for releases for a specific series ID.
    Options is an optional dictionary containing additional search options to pass.

    :param seriesId: The Series ID to find releases for
    :param options: An optional dictionary of additional search criteria
    :param page: Which page of results
    :param perPage: Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100
    """
    thisData = None
    if options:
        thisData = options
        thisData["search"] = str(seriesId)
        thisData["search_type"] = "series"
        thisData["page"] = page
        thisData["perPage"] = perPage
    else:
        thisData = {
            "search": str(seriesId),
            "search_type": "series",
            "page": page,
            "perPage": perPage,
        }

    r = requests.post(
        settings["apiurl"] + "releases/search", headers=settings["header"], json=thisData
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        if jsd["total_hits"] > jsd["per_page"]:
            return mangaupdatesWrapper(
                jsd["results"],
                settings["apiurl"] + "series/search",
                settings["header"],
                thisData,
                round(jsd["total_hits"] / jsd["per_page"], 0),
            )
        else:
            return jsd["results"]

reviews(seriesId, options=None, page=1, perPage=5)

Search for reviews for a given series ID. Options is an optional dictionary containing additional search options to pass.

PARAMETER DESCRIPTION
seriesId

The ID of the series to get reviews for

TYPE: int

options

An optional dictionary of additional search criteria

TYPE: Dict DEFAULT: None

page

Which page of results

TYPE: int DEFAULT: 1

perPage

Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100

TYPE: int DEFAULT: 5

Source code in pymoe\manga\search\mangaupdates.py
def reviews(seriesId: int, options: Dict = None, page: int = 1, perPage: int = 5):
    """
    Search for reviews for a given series ID.
    Options is an optional dictionary containing additional search options to pass.

    :param seriesId: The ID of the series to get reviews for
    :param options: An optional dictionary of additional search criteria
    :param page: Which page of results
    :param perPage: Results per page. Note that the only acceptable values are 5,10,15,25,30,40,50,75,100
    """
    thisData = None
    if options:
        thisData = options
        thisData["series_id"] = str(seriesId)
        thisData["page"] = page
        thisData["perPage"] = perPage
    else:
        thisData = {"series_id": str(seriesId), "page": page, "perPage": perPage}

    r = requests.post(
        settings["apiurl"] + "reviews/search", headers=settings["header"], json=thisData
    )

    if r.status_code != 200:
        raise serverError(r.text, r.status_code)

    try:
        jsd = ujson.loads(r.text)
    except ValueError:
        raise serializationFailed(r.text, r.status_code)
    else:
        if jsd["total_hits"] > jsd["per_page"]:
            return mangaupdatesWrapper(
                jsd["results"],
                settings["apiurl"] + "series/search",
                settings["header"],
                thisData,
                round(jsd["total_hits"] / jsd["per_page"], 0),
            )
        else:
            return jsd["results"]