From 7447c156641cb9b22107a8909e39a6c4286a5bca Mon Sep 17 00:00:00 2001 From: invobzvr Date: Tue, 2 Mar 2021 11:36:29 +0800 Subject: [PATCH] feat: add some apis about `novel` for AppAPI --- demo.py | 35 +++++++++++++++++++++++++++++++++++ pixivpy3/aapi.py | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 79 insertions(+), 2 deletions(-) diff --git a/demo.py b/demo.py index 73bbf66a..3e222cf5 100644 --- a/demo.py +++ b/demo.py @@ -214,6 +214,40 @@ def appapi_bookmark_add(aapi): (illust_id, [tag.name for tag in json_result.bookmark_detail.tags if tag.is_registered])) +def appapi_novel(aapi): + json_result = aapi.user_novels(59216290) + print(json_result) + novel = json_result.novels[0] + print(">>> %s, text_length: %s, series: %s" % (novel.title, novel.text_length, novel.series)) + + # get next page + next_qs = aapi.parse_qs(json_result.next_url) + json_result = aapi.user_novels(**next_qs) + novel = json_result.novels[0] + print(">>> %s, text_length: %s, series: %s" % (novel.title, novel.text_length, novel.series)) + + json_result = aapi.novel_series(1276963) + print(json_result) + detail = json_result.novel_series_detail + print(">>> %s, total_character_count: %s" % (detail.title, detail.total_character_count)) + + # get next page + next_qs = aapi.parse_qs(json_result.next_url) + json_result = aapi.novel_series(**next_qs) + detail = json_result.novel_series_detail + print(">>> %s, total_character_count: %s" % (detail.title, detail.total_character_count)) + + novel_id = 14357107 + json_result = aapi.novel_detail(novel_id) + print(json_result) + novel = json_result.novel + print(">>> %s, text_length: %s, series: %s" % (novel.title, novel.text_length, novel.series)) + + json_result = aapi.novel_text(novel_id) + print(json_result) + print(">>> %s, novel_text: %s" % (novel.title, json_result.novel_text)) + + # PAPI start def migrate_rev2_to_papi(api): @@ -381,6 +415,7 @@ def main(): appapi_user_search(aapi) appapi_ranking(aapi) appapi_bookmark_add(aapi) + appapi_novel(aapi) appapi_auth_api(aapi) diff --git a/pixivpy3/aapi.py b/pixivpy3/aapi.py index fd765d40..1772e460 100644 --- a/pixivpy3/aapi.py +++ b/pixivpy3/aapi.py @@ -305,8 +305,6 @@ def search_novel(self, word, search_target='partial_match_for_tags', sort='date_ if (offset): params['offset'] = offset r = self.no_auth_requests_call('GET', url, params=params, req_auth=req_auth) - print(r.url) - print(r.text) return self.parse_result(r) def search_user(self, word, sort='date_desc', duration=None, @@ -430,6 +428,50 @@ def ugoira_metadata(self, illust_id, req_auth=True): r = self.no_auth_requests_call('GET', url, params=params, req_auth=req_auth) return self.parse_result(r) + # 用户小说列表 + def user_novels(self, user_id, filter='for_ios', offset=None, req_auth=True): + url = '%s/v1/user/novels' % self.hosts + params = { + 'user_id': user_id, + 'filter': filter, + } + if (offset): + params['offset'] = offset + r = self.no_auth_requests_call('GET', url, params=params, req_auth=req_auth) + return self.parse_result(r) + + # 小说系列详情 + def novel_series(self, series_id, filter='for_ios', last_order=None, req_auth=True): + url = '%s/v2/novel/series' % self.hosts + params = { + 'series_id': series_id, + 'filter': filter, + } + if (last_order): + params['last_order'] = last_order + r = self.no_auth_requests_call('GET', url, params=params, req_auth=req_auth) + return self.parse_result(r) + + # 小说详情 + def novel_detail(self, novel_id, req_auth=True): + url = '%s/v2/novel/detail' % self.hosts + params = { + 'novel_id': novel_id, + } + + r = self.no_auth_requests_call('GET', url, params=params, req_auth=req_auth) + return self.parse_result(r) + + # 小说正文 + def novel_text(self, novel_id, req_auth=True): + url = '%s/v1/novel/text' % self.hosts + params = { + 'novel_id': novel_id, + } + + r = self.no_auth_requests_call('GET', url, params=params, req_auth=req_auth) + return self.parse_result(r) + # 特辑详情 (无需登录,调用Web API) def showcase_article(self, showcase_id): url = 'https://www.pixiv.net/ajax/showcase/article'