mirror of
https://github.com/hect0x7/JMComic-Crawler-Python.git
synced 2025-11-04 14:49:43 +08:00
parent
dbd3f8ce66
commit
cd8952c7ba
@ -2,7 +2,7 @@
|
||||
# 被依赖方 <--- 使用方
|
||||
# config <--- entity <--- toolkit <--- client <--- option <--- downloader
|
||||
|
||||
__version__ = '2.2.4'
|
||||
__version__ = '2.2.5'
|
||||
|
||||
from .api import *
|
||||
from .jm_plugin import *
|
||||
|
||||
@ -199,11 +199,19 @@ class JmHtmlClient(AbstractJmClient):
|
||||
|
||||
return photo
|
||||
|
||||
def search(self, search_query, page, main_tag) -> JmSearchPage:
|
||||
def search(self,
|
||||
search_query: str,
|
||||
page: int,
|
||||
main_tag: int,
|
||||
order_by: str,
|
||||
date: str,
|
||||
) -> JmSearchPage:
|
||||
params = {
|
||||
'main_tag': main_tag,
|
||||
'search_query': search_query,
|
||||
'page': page,
|
||||
'o': order_by,
|
||||
't': date,
|
||||
}
|
||||
|
||||
resp = self.get_jm_html(
|
||||
@ -391,7 +399,13 @@ class JmApiClient(AbstractJmClient):
|
||||
client_key = 'api'
|
||||
API_SEARCH = '/search'
|
||||
|
||||
def search(self, search_query, main_tag=0, page=1) -> JmApiResp:
|
||||
def search(self,
|
||||
search_query: str,
|
||||
page: int,
|
||||
main_tag: int,
|
||||
order_by: str,
|
||||
time: str,
|
||||
) -> JmApiResp:
|
||||
"""
|
||||
model_data: {
|
||||
"search_query": "MANA",
|
||||
@ -421,6 +435,8 @@ class JmApiClient(AbstractJmClient):
|
||||
'search_query': search_query,
|
||||
'main_tag': main_tag,
|
||||
'page': page,
|
||||
'o': order_by,
|
||||
't': time,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@ -285,41 +285,82 @@ class JmSearchAlbumClient:
|
||||
範例:全彩 人妻
|
||||
"""
|
||||
|
||||
def search(self, search_query: str, page: int, main_tag: int) -> JmSearchPage:
|
||||
ORDER_BY_LATEST = 'mr'
|
||||
ORDER_BY_VIEW = 'mv'
|
||||
ORDER_BY_PICTURE = 'mp'
|
||||
ORDER_BY_LIKE = 'tf'
|
||||
|
||||
TIME_TODAY = 't'
|
||||
TIME_WEEK = 'w'
|
||||
TIME_MONTH = 'm'
|
||||
TIME_ALL = 'a'
|
||||
|
||||
def search(self,
|
||||
search_query: str,
|
||||
page: int,
|
||||
main_tag: int,
|
||||
order_by: str,
|
||||
time: str,
|
||||
) -> JmSearchPage:
|
||||
"""
|
||||
搜索【成人A漫】
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def search_site(self, search_query: str, page: int = 1) -> JmSearchPage:
|
||||
def search_site(self,
|
||||
search_query: str,
|
||||
page: int = 1,
|
||||
order_by: str = ORDER_BY_LATEST,
|
||||
time: str = TIME_ALL,
|
||||
) -> JmSearchPage:
|
||||
"""
|
||||
对应禁漫的站内搜索
|
||||
"""
|
||||
return self.search(search_query, page, 0)
|
||||
return self.search(search_query, page, 0, order_by, time)
|
||||
|
||||
def search_work(self, search_query: str, page: int = 1) -> JmSearchPage:
|
||||
def search_work(self,
|
||||
search_query: str,
|
||||
page: int = 1,
|
||||
order_by: str = ORDER_BY_LATEST,
|
||||
time: str = TIME_ALL,
|
||||
) -> JmSearchPage:
|
||||
"""
|
||||
搜索album的作品 work
|
||||
"""
|
||||
return self.search(search_query, page, 1)
|
||||
return self.search(search_query, page, 1, order_by, time)
|
||||
|
||||
def search_author(self, search_query: str, page: int = 1) -> JmSearchPage:
|
||||
def search_author(self,
|
||||
search_query: str,
|
||||
page: int = 1,
|
||||
order_by: str = ORDER_BY_LATEST,
|
||||
time: str = TIME_ALL,
|
||||
) -> JmSearchPage:
|
||||
"""
|
||||
搜索album的作者 author
|
||||
"""
|
||||
return self.search(search_query, page, 2)
|
||||
return self.search(search_query, page, 2, order_by, time)
|
||||
|
||||
def search_tag(self, search_query: str, page: int = 1) -> JmSearchPage:
|
||||
def search_tag(self,
|
||||
search_query: str,
|
||||
page: int = 1,
|
||||
order_by: str = ORDER_BY_LATEST,
|
||||
time: str = TIME_ALL,
|
||||
) -> JmSearchPage:
|
||||
"""
|
||||
搜索album的标签 tag
|
||||
"""
|
||||
return self.search(search_query, page, 3)
|
||||
return self.search(search_query, page, 3, order_by, time)
|
||||
|
||||
def search_actor(self, search_query: str, page: int = 1) -> JmSearchPage:
|
||||
def search_actor(self,
|
||||
search_query: str,
|
||||
page: int = 1,
|
||||
order_by: str = ORDER_BY_LATEST,
|
||||
time: str = TIME_ALL,
|
||||
) -> JmSearchPage:
|
||||
"""
|
||||
搜索album的登场角色 actor
|
||||
"""
|
||||
return self.search(search_query, page, 4)
|
||||
return self.search(search_query, page, 4, order_by, time)
|
||||
|
||||
|
||||
# noinspection PyAbstractClass
|
||||
|
||||
@ -419,6 +419,9 @@ class JmSearchPage(JmBaseEntity, IterableEntity):
|
||||
def __getitem__(self, item):
|
||||
return self.album_info_list[item][0:2]
|
||||
|
||||
def __iter__(self) -> Generator[List[str], Any, None]:
|
||||
return super().__iter__()
|
||||
|
||||
@property
|
||||
def single_album(self) -> JmAlbumDetail:
|
||||
return getattr(self, 'album')
|
||||
|
||||
@ -49,7 +49,7 @@ class DirRule:
|
||||
解析下载路径dsl,得到一个路径规则解析列表
|
||||
"""
|
||||
|
||||
if '_' not in rule_dsl:
|
||||
if '_' not in rule_dsl and rule_dsl != 'Bd':
|
||||
raise NotImplementedError(f'不支持的dsl: "{rule_dsl}"')
|
||||
|
||||
rule_ls = rule_dsl.split('_')
|
||||
@ -273,7 +273,7 @@ class JmOption:
|
||||
"""
|
||||
return self.new_jm_client(**kwargs)
|
||||
|
||||
def new_jm_client(self, domain_list=None, **kwargs) -> JmcomicClient:
|
||||
def new_jm_client(self, domain_list=None, impl=None, **kwargs) -> JmcomicClient:
|
||||
postman_conf: dict = self.client.postman.src_dict
|
||||
|
||||
# support kwargs overwrite meta_data
|
||||
@ -291,7 +291,7 @@ class JmOption:
|
||||
domain_list = [JmModuleConfig.domain()]
|
||||
|
||||
# client
|
||||
client = JmModuleConfig.client_impl_class(self.client.impl)(
|
||||
client = JmModuleConfig.client_impl_class(impl or self.client.impl)(
|
||||
postman,
|
||||
self.client.retry_times,
|
||||
fallback_domain_list=domain_list,
|
||||
|
||||
@ -164,3 +164,41 @@ class Test_Api(JmTestConfigurable):
|
||||
list1=[int(e.img_file_name) for e in ls],
|
||||
list2=ans,
|
||||
)
|
||||
|
||||
def test_search_advanced(self):
|
||||
elist = []
|
||||
|
||||
def search_and_test(expected_result, params):
|
||||
try:
|
||||
page = self.client.search_site(**params)
|
||||
print(page)
|
||||
assert int(page[0][0]) == expected_result
|
||||
except Exception as e:
|
||||
elist.append(e)
|
||||
|
||||
# 定义测试用例
|
||||
cases = {
|
||||
152637: {
|
||||
'search_query': '无修正',
|
||||
'order_by': JmSearchAlbumClient.ORDER_BY_LIKE,
|
||||
'time': JmSearchAlbumClient.TIME_ALL,
|
||||
},
|
||||
147643: {
|
||||
'search_query': '无修正',
|
||||
'order_by': JmSearchAlbumClient.ORDER_BY_PICTURE,
|
||||
'time': JmSearchAlbumClient.TIME_ALL,
|
||||
},
|
||||
}
|
||||
|
||||
multi_thread_launcher(
|
||||
iter_objs=cases.items(),
|
||||
apply_each_obj_func=search_and_test,
|
||||
)
|
||||
|
||||
if len(elist) == 0:
|
||||
return
|
||||
|
||||
for e in elist:
|
||||
print(e)
|
||||
|
||||
raise AssertionError(elist)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user