Skip to content

Commit

Permalink
Update mangaplus api to v3
Browse files Browse the repository at this point in the history
  • Loading branch information
s0hv committed Oct 26, 2023
1 parent ad497b2 commit 73dbd03
Show file tree
Hide file tree
Showing 18 changed files with 253 additions and 93 deletions.
2 changes: 1 addition & 1 deletion scripts/build_protoc.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#!/bin/bash
cd "$(dirname "$0")"/..
protoc --proto_path=src/scrapers/mangaplus --python_out=src/scrapers/mangaplus --mypy_out=src/scrapers/mangaplus src/scrapers/mangaplus/protobuf/mangaplus.proto
poetry run protoc --proto_path=src/scrapers/mangaplus --python_out=src/scrapers/mangaplus --mypy_out=src/scrapers/mangaplus src/scrapers/mangaplus/protobuf/mangaplus.proto
17 changes: 15 additions & 2 deletions src/scrapers/mangaplus/mangaplus.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,12 @@ def flatten(chapters_view: mangaplus_pb2.ChaptersView):
def is_simul_release(self) -> Optional[bool]:
return self._title_detail.is_simul_release

@property
def release_schedule(self):
labels = self._title_detail.title_labels
if labels:
return labels.release_schedule


class AllTitlesViewWrapper:
def __init__(self, all_titles: mangaplus_pb2.AllTitlesView):
Expand Down Expand Up @@ -232,7 +238,7 @@ def title(self) -> str:
class MangaPlus(BaseScraperWhole):
ID = 1
NAME = 'MANGA Plus'
API = 'https://jumpg-webapi.tokyo-cdn.com/api/title_detailV2?title_id={}'
API = 'https://jumpg-webapi.tokyo-cdn.com/api/title_detailV3?title_id={}'
FEED_URL = 'https://jumpg-webapi.tokyo-cdn.com/api/title_list/allV2'
URL = 'https://mangaplus.shueisha.co.jp'
MANGA_URL = 'https://mangaplus.shueisha.co.jp/titles/{}'
Expand Down Expand Up @@ -286,7 +292,7 @@ def get_all_titles(api_url: str) -> Optional[AllTitlesViewWrapper]:
logger.exception('Failed to fetch all mangaplus titles')
return None

if r.status_code != 200:
if not r.ok:
return None

resp = ResponseWrapper(r.content)
Expand Down Expand Up @@ -394,6 +400,13 @@ def add_chapters(self, series: TitleDetailViewWrapper, service_id: int, manga_id
disabled = True
completed = True

if series.release_schedule:
ReleaseSchedule = mangaplus_pb2.TitleLabels.ReleaseSchedule
if series.release_schedule == ReleaseSchedule.COMPLETED or series.release_schedule == ReleaseSchedule.DISABLED:
next_update = None
disabled = True
completed = False

newest_chapter = None
for c in chapters:
if not newest_chapter:
Expand Down
18 changes: 18 additions & 0 deletions src/scrapers/mangaplus/protobuf/mangaplus.proto
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,24 @@ message TitleDetailView {
bool is_simul_release = 14;
// 27 is title ids for other languages
repeated ChaptersView chapters = 28;
TitleLabels title_labels = 32;
}

message TitleLabels {
enum ReleaseSchedule {
DISABLED = 0;
EVERYDAY = 1;
WEEKLY = 2;
BIWEEKLY = 3;
MONTHLY = 4;
BIMONTHLY = 5;
TRIMONTHLY = 6;
OTHER = 7;
COMPLETED = 8;
}

ReleaseSchedule release_schedule = 1;
bool is_simulpub = 2;
}

message ChaptersView {
Expand Down
40 changes: 22 additions & 18 deletions src/scrapers/mangaplus/protobuf/mangaplus_pb2.py

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

53 changes: 51 additions & 2 deletions src/scrapers/mangaplus/protobuf/mangaplus_pb2.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ class TitleDetailView(google.protobuf.message.Message):
RECOMMENDED_TITLES_FIELD_NUMBER: builtins.int
IS_SIMUL_RELEASE_FIELD_NUMBER: builtins.int
CHAPTERS_FIELD_NUMBER: builtins.int
TITLE_LABELS_FIELD_NUMBER: builtins.int
@property
def title(self) -> global___Title: ...
title_image_url: builtins.str
Expand All @@ -252,6 +253,8 @@ class TitleDetailView(google.protobuf.message.Message):
@property
def chapters(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ChaptersView]:
"""27 is title ids for other languages"""
@property
def title_labels(self) -> global___TitleLabels: ...
def __init__(
self,
*,
Expand All @@ -266,12 +269,58 @@ class TitleDetailView(google.protobuf.message.Message):
recommended_titles: collections.abc.Iterable[global___Title] | None = ...,
is_simul_release: builtins.bool = ...,
chapters: collections.abc.Iterable[global___ChaptersView] | None = ...,
title_labels: global___TitleLabels | None = ...,
) -> None: ...
def HasField(self, field_name: typing_extensions.Literal["title", b"title"]) -> builtins.bool: ...
def ClearField(self, field_name: typing_extensions.Literal["background_image_url", b"background_image_url", "chapters", b"chapters", "is_simul_release", b"is_simul_release", "next_timestamp", b"next_timestamp", "non_appearance_info", b"non_appearance_info", "overview", b"overview", "recommended_titles", b"recommended_titles", "title", b"title", "title_image_url", b"title_image_url", "update_timing", b"update_timing", "viewing_period_description", b"viewing_period_description"]) -> None: ...
def HasField(self, field_name: typing_extensions.Literal["title", b"title", "title_labels", b"title_labels"]) -> builtins.bool: ...
def ClearField(self, field_name: typing_extensions.Literal["background_image_url", b"background_image_url", "chapters", b"chapters", "is_simul_release", b"is_simul_release", "next_timestamp", b"next_timestamp", "non_appearance_info", b"non_appearance_info", "overview", b"overview", "recommended_titles", b"recommended_titles", "title", b"title", "title_image_url", b"title_image_url", "title_labels", b"title_labels", "update_timing", b"update_timing", "viewing_period_description", b"viewing_period_description"]) -> None: ...

global___TitleDetailView = TitleDetailView

@typing_extensions.final
class TitleLabels(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor

class _ReleaseSchedule:
ValueType = typing.NewType("ValueType", builtins.int)
V: typing_extensions.TypeAlias = ValueType

class _ReleaseScheduleEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[TitleLabels._ReleaseSchedule.ValueType], builtins.type): # noqa: F821
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
DISABLED: TitleLabels._ReleaseSchedule.ValueType # 0
EVERYDAY: TitleLabels._ReleaseSchedule.ValueType # 1
WEEKLY: TitleLabels._ReleaseSchedule.ValueType # 2
BIWEEKLY: TitleLabels._ReleaseSchedule.ValueType # 3
MONTHLY: TitleLabels._ReleaseSchedule.ValueType # 4
BIMONTHLY: TitleLabels._ReleaseSchedule.ValueType # 5
TRIMONTHLY: TitleLabels._ReleaseSchedule.ValueType # 6
OTHER: TitleLabels._ReleaseSchedule.ValueType # 7
COMPLETED: TitleLabels._ReleaseSchedule.ValueType # 8

class ReleaseSchedule(_ReleaseSchedule, metaclass=_ReleaseScheduleEnumTypeWrapper): ...
DISABLED: TitleLabels.ReleaseSchedule.ValueType # 0
EVERYDAY: TitleLabels.ReleaseSchedule.ValueType # 1
WEEKLY: TitleLabels.ReleaseSchedule.ValueType # 2
BIWEEKLY: TitleLabels.ReleaseSchedule.ValueType # 3
MONTHLY: TitleLabels.ReleaseSchedule.ValueType # 4
BIMONTHLY: TitleLabels.ReleaseSchedule.ValueType # 5
TRIMONTHLY: TitleLabels.ReleaseSchedule.ValueType # 6
OTHER: TitleLabels.ReleaseSchedule.ValueType # 7
COMPLETED: TitleLabels.ReleaseSchedule.ValueType # 8

RELEASE_SCHEDULE_FIELD_NUMBER: builtins.int
IS_SIMULPUB_FIELD_NUMBER: builtins.int
release_schedule: global___TitleLabels.ReleaseSchedule.ValueType
is_simulpub: builtins.bool
def __init__(
self,
*,
release_schedule: global___TitleLabels.ReleaseSchedule.ValueType = ...,
is_simulpub: builtins.bool = ...,
) -> None: ...
def ClearField(self, field_name: typing_extensions.Literal["is_simulpub", b"is_simulpub", "release_schedule", b"release_schedule"]) -> None: ...

global___TitleLabels = TitleLabels

@typing_extensions.final
class ChaptersView(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
Expand Down
Loading

0 comments on commit 73dbd03

Please sign in to comment.