feat: use exact artist lookup instead of fuzzy search

--artist now calls parser.artist() which resolves the artist name to a
tag id via the /tags/artist/{slug} endpoint, then queries /galleries/tagged
for exact results. BaseParser.artist() defaults to search('artist:...')
as fallback for plugins that don't implement it.

Fixes #430

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ricter Zheng
2026-04-14 21:51:50 +08:00
parent 51fd1f964c
commit 360ea00bd9
4 changed files with 7 additions and 4 deletions

View File

@@ -1,3 +1,3 @@
__version__ = '2.0.8' __version__ = '2.0.9'
__author__ = 'RicterZ' __author__ = 'RicterZ'
__email__ = 'ricterzheng@gmail.com' __email__ = 'ricterzheng@gmail.com'

View File

@@ -86,8 +86,8 @@ def main():
) )
elif options.artist: elif options.artist:
doujinshis = parser.search( doujinshis = parser.artist(
f'artist:{options.artist}', options.artist,
sorting=options.sorting, sorting=options.sorting,
page=page_list, page=page_list,
is_page_all=options.page_all, is_page_all=options.page_all,

View File

@@ -36,6 +36,9 @@ class BaseParser(ABC):
@abstractmethod @abstractmethod
def search(self, keyword: str, sorting: str = 'date', page=None, **kwargs) -> List[Dict]: ... def search(self, keyword: str, sorting: str = 'date', page=None, **kwargs) -> List[Dict]: ...
def artist(self, artist_name: str, sorting: str = 'date', page=None, **kwargs) -> List[Dict]:
return self.search(f'artist:{artist_name}', sorting=sorting, page=page, **kwargs)
def favorites(self, page=None) -> List[Dict]: def favorites(self, page=None) -> List[Dict]:
return [] return []

View File

@@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "doujinshi-dl" name = "doujinshi-dl"
version = "2.0.8" version = "2.0.9"
description = "doujinshi downloader" description = "doujinshi downloader"
authors = ["Ricter Z <ricterzheng@gmail.com>"] authors = ["Ricter Z <ricterzheng@gmail.com>"]
license = "MIT" license = "MIT"