Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(client): add _url & _ajax_url helper methods #384

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 50 additions & 44 deletions pixivpy3/aapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,24 +68,30 @@ def set_api_proxy(self, proxy_hosts: str = "http://app-api.pixivlite.com") -> No
"""Set proxy hosts: eg pixivlite.com"""
self.hosts = proxy_hosts

def _url(self, endpoint: str) -> str:
return f"{self.hosts}{endpoint}"

# Check auth and set BearerToken to headers
def no_auth_requests_call(
self,
method: str,
method: Literal["GET", "POST"],
url: str,
headers: ParamDict = None,
params: ParamDict = None,
data: ParamDict = None,
req_auth: bool = True,
) -> Response:
# `mypy` doesn't allow type overwriting, must add `_` suffix
headers_ = CaseInsensitiveDict(headers or {})

if self.hosts != "https://app-api.pixiv.net":
headers_["host"] = "app-api.pixiv.net"
if "user-agent" not in headers_:
headers_["Host"] = "app-api.pixiv.net"

if "User-Agent" not in headers_:
# Set User-Agent if not provided
headers_["app-os"] = "ios"
headers_["app-os-version"] = "14.6"
headers_["user-agent"] = "PixivIOSApp/7.13.3 (iOS 14.6; iPhone13,2)"
headers_["App-OS"] = "ios"
headers_["App-OS-Version"] = "14.6"
headers_["User-Agent"] = "PixivIOSApp/7.13.3 (iOS 14.6; iPhone13,2)"

if not req_auth:
return self.requests_call(method, url, headers_, params, data)
Expand Down Expand Up @@ -144,7 +150,7 @@ def user_detail(
filter: _FILTER = "for_ios",
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/user/detail"
url = self._url("/v1/user/detail")
params = {
"user_id": user_id,
"filter": filter,
Expand All @@ -162,7 +168,7 @@ def user_illusts(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/user/illusts"
url = self._url("/v1/user/illusts")
params = {
"user_id": user_id,
"filter": filter,
Expand All @@ -185,7 +191,7 @@ def user_bookmarks_illust(
tag: str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/user/bookmarks/illust"
url = self._url("/v1/user/bookmarks/illust")
params = {
"user_id": user_id,
"restrict": restrict,
Expand All @@ -208,7 +214,7 @@ def user_bookmarks_novel(
tag: str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/user/bookmarks/novel"
url = self._url("/v1/user/bookmarks/novel")
params = {
"user_id": user_id,
"restrict": restrict,
Expand All @@ -228,7 +234,7 @@ def user_related(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/user/related"
url = self._url("/v1/user/related")
params = {
"filter": filter,
# Pixiv warns to put seed_user_id at the end -> put offset here
Expand All @@ -244,7 +250,7 @@ def user_recommended(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/user/recommended"
url = self._url("/v1/user/recommended")
params = {
"filter": filter,
}
Expand All @@ -262,7 +268,7 @@ def illust_follow(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v2/illust/follow"
url = self._url("/v2/illust/follow")
params: dict[str, str | int] = {
"restrict": restrict,
}
Expand All @@ -273,7 +279,7 @@ def illust_follow(

# 作品详情 (类似PAPI.works(),iOS中未使用)
def illust_detail(self, illust_id: int | str, req_auth: bool = True) -> ParsedJson:
url = f"{self.hosts}/v1/illust/detail"
url = self._url("/v1/illust/detail")
params = {
"illust_id": illust_id,
}
Expand All @@ -288,7 +294,7 @@ def illust_comments(
include_total_comments: str | bool | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/illust/comments"
url = self._url("/v1/illust/comments")
params = {
"illust_id": illust_id,
}
Expand All @@ -309,7 +315,7 @@ def illust_related(
viewed: str | list[str] | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v2/illust/related"
url = self._url("/v2/illust/related")
params: dict[str, Any] = {
"illust_id": illust_id,
"filter": filter,
Expand Down Expand Up @@ -343,9 +349,9 @@ def illust_recommended(
req_auth: bool = True,
) -> ParsedJson:
if req_auth:
url = f"{self.hosts}/v1/illust/recommended"
url = self._url("/v1/illust/recommended")
else:
url = f"{self.hosts}/v1/illust/recommended-nologin"
url = self._url("/v1/illust/recommended-nologin")
params: dict[str, Any] = {
"content_type": content_type,
"include_ranking_label": self.format_bool(include_ranking_label),
Expand Down Expand Up @@ -385,7 +391,7 @@ def novel_comments(
include_total_comments: str | bool | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/novel/comments"
url = self._url("/v1/novel/comments")
params = {
"novel_id": novel_id,
}
Expand All @@ -408,7 +414,7 @@ def novel_recommended(
include_privacy_policy: str | list[int | str] | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/novel/recommended"
url = self._url("/v1/novel/recommended")
params: dict[str, Any] = {
"include_ranking_label": self.format_bool(include_ranking_label),
"filter": filter,
Expand Down Expand Up @@ -443,7 +449,7 @@ def illust_ranking(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/illust/ranking"
url = self._url("/v1/illust/ranking")
params: dict[str, Any] = {
"mode": mode,
"filter": filter,
Expand All @@ -457,7 +463,7 @@ def illust_ranking(

# 趋势标签 (Search - tags)
def trending_tags_illust(self, filter: _FILTER = "for_ios", req_auth: bool = True) -> ParsedJson:
url = f"{self.hosts}/v1/trending-tags/illust"
url = self._url("/v1/trending-tags/illust")
params = {
"filter": filter,
}
Expand Down Expand Up @@ -486,7 +492,7 @@ def search_illust(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/search/illust"
url = self._url("/v1/search/illust")
params: dict[str, Any] = {
"word": word,
"search_target": search_target,
Expand Down Expand Up @@ -529,7 +535,7 @@ def search_novel(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/search/novel"
url = self._url("/v1/search/novel")
params: dict[str, Any] = {
"word": word,
"search_target": search_target,
Expand Down Expand Up @@ -558,7 +564,7 @@ def search_user(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/search/user"
url = self._url("/v1/search/user")
params: dict[str, Any] = {
"word": word,
"sort": sort,
Expand All @@ -573,7 +579,7 @@ def search_user(

# 作品收藏详情
def illust_bookmark_detail(self, illust_id: int | str, req_auth: bool = True) -> ParsedJson:
url = f"{self.hosts}/v2/illust/bookmark/detail"
url = self._url("/v2/illust/bookmark/detail")
params = {
"illust_id": illust_id,
}
Expand All @@ -588,7 +594,7 @@ def illust_bookmark_add(
tags: str | list[str] | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v2/illust/bookmark/add"
url = self._url("/v2/illust/bookmark/add")
data = {
"illust_id": illust_id,
"restrict": restrict,
Expand All @@ -603,7 +609,7 @@ def illust_bookmark_add(

# 删除收藏
def illust_bookmark_delete(self, illust_id: int | str, req_auth: bool = True) -> ParsedJson:
url = f"{self.hosts}/v1/illust/bookmark/delete"
url = self._url("/v1/illust/bookmark/delete")
data = {
"illust_id": illust_id,
}
Expand All @@ -617,21 +623,21 @@ def user_follow_add(
restrict: _RESTRICT = "public",
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/user/follow/add"
url = self._url("/v1/user/follow/add")
data = {"user_id": user_id, "restrict": restrict}
r = self.no_auth_requests_call("POST", url, data=data, req_auth=req_auth)
return self.parse_result(r)

# 取消关注用户
def user_follow_delete(self, user_id: int | str, req_auth: bool = True) -> ParsedJson:
url = f"{self.hosts}/v1/user/follow/delete"
url = self._url("/v1/user/follow/delete")
data = {"user_id": user_id}
r = self.no_auth_requests_call("POST", url, data=data, req_auth=req_auth)
return self.parse_result(r)

# 设置用户选项中是否展现AI生成作品
def user_edit_ai_show_settings(self, setting: _BOOL, req_auth: bool = True) -> ParsedJson:
url = f"{self.hosts}/v1/user/ai-show-settings/edit"
url = self._url("/v1/user/ai-show-settings/edit")
data = {"show_ai": setting}
r = self.no_auth_requests_call("POST", url, data=data, req_auth=req_auth)
return self.parse_result(r)
Expand All @@ -644,7 +650,7 @@ def user_bookmark_tags_illust(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/user/bookmark-tags/illust"
url = self._url("/v1/user/bookmark-tags/illust")
params: dict[str, Any] = {
"user_id": user_id,
"restrict": restrict,
Expand All @@ -662,7 +668,7 @@ def user_following(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/user/following"
url = self._url("/v1/user/following")
params = {
"user_id": user_id,
"restrict": restrict,
Expand All @@ -681,7 +687,7 @@ def user_follower(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/user/follower"
url = self._url("/v1/user/follower")
params = {
"user_id": user_id,
"filter": filter,
Expand All @@ -699,7 +705,7 @@ def user_mypixiv(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/user/mypixiv"
url = self._url("/v1/user/mypixiv")
params = {
"user_id": user_id,
}
Expand All @@ -717,7 +723,7 @@ def user_list(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v2/user/list"
url = self._url("/v2/user/list")
params = {
"user_id": user_id,
"filter": filter,
Expand All @@ -730,7 +736,7 @@ def user_list(

# 获取ugoira信息
def ugoira_metadata(self, illust_id: int | str, req_auth: bool = True) -> ParsedJson:
url = f"{self.hosts}/v1/ugoira/metadata"
url = self._url("/v1/ugoira/metadata")
params = {
"illust_id": illust_id,
}
Expand All @@ -746,7 +752,7 @@ def user_novels(
offset: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/user/novels"
url = self._url("/v1/user/novels")
params = {
"user_id": user_id,
"filter": filter,
Expand All @@ -764,7 +770,7 @@ def novel_series(
last_order: str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v2/novel/series"
url = self._url("/v2/novel/series")
params = {
"series_id": series_id,
"filter": filter,
Expand All @@ -776,7 +782,7 @@ def novel_series(

# 小说详情
def novel_detail(self, novel_id: int | str, req_auth: bool = True) -> ParsedJson:
url = f"{self.hosts}/v2/novel/detail"
url = self._url("/v2/novel/detail")
params = {
"novel_id": novel_id,
}
Expand All @@ -790,7 +796,7 @@ def novel_new(
max_novel_id: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/novel/new"
url = self._url("/v1/novel/new")
params: dict[str, Any] = {
"filter": filter,
}
Expand All @@ -807,7 +813,7 @@ def novel_follow(
offset: int | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/novel/follow"
url = self._url("/v1/novel/follow")
params: dict[str, Any] = {"restrict": restrict, "offset": offset}
r = self.no_auth_requests_call("GET", url, params=params, req_auth=req_auth)
return self.parse_result(r)
Expand All @@ -816,7 +822,7 @@ def novel_follow(
# raw=True, return html content directly
def webview_novel(self, novel_id: int | str, raw: bool = False, req_auth: bool = True) -> ParsedJson:
# change new endpoint due to #337
url = f"{self.hosts}/webview/v2/novel"
url = self._url("/webview/v2/novel")
params = {
"id": novel_id,
"viewer_version": "20221031_ai",
Expand Down Expand Up @@ -849,7 +855,7 @@ def illust_new(
max_illust_id: int | str | None = None,
req_auth: bool = True,
) -> ParsedJson:
url = f"{self.hosts}/v1/illust/new"
url = self._url("/v1/illust/new")
params: dict[str, Any] = {
"content_type": content_type,
"filter": filter,
Expand Down
Loading