Compare commits

...

3 Commits

Author SHA1 Message Date
hect0x7
fc3531a402 v2.6.8 [skip ci] 2025-09-20 21:05:10 +08:00
hect0x7
2089104b0e
Update src/jmcomic/jm_toolkit.py
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-09-20 21:02:53 +08:00
hect0x7
e610e2bb67 封面图下载 (#480) 2025-09-20 20:45:31 +08:00
5 changed files with 40 additions and 5 deletions

View File

@ -38,7 +38,7 @@ download_album(123, option)
option.download_album(123)
```
## 获取本子/章节/图片的实体类,下载图片
## 获取本子/章节/图片的实体类,下载图片/封面图
```python
from jmcomic import *
@ -49,23 +49,26 @@ client = JmOption.default().new_jm_client()
# 本子实体类
album: JmAlbumDetail = client.get_album_detail('427413')
# 下载本子封面图,保存为 cover.png 图片后缀可指定为jpg、webp等
client.download_album_cover('427413', './cover.png')
def fetch(photo: JmPhotoDetail):
# 章节实体类
photo = client.get_photo_detail(photo.photo_id, False)
print(f'章节id: {photo.photo_id}')
# 图片实体类
image: JmImageDetail
for image in photo:
print(f'图片url: {image.img_url}')
# 下载单个图片
client.download_by_image_detail(image, './a.jpg')
# 如果是已知未混淆的图片也可以直接使用url来下载
random_image_domain = JmModuleConfig.DOMAIN_IMAGE_LIST[0]
client.download_image(f'https://{random_image_domain}/media/albums/416130.jpg', './a.jpg')
# 多线程发起请求
multi_thread_launcher(

View File

@ -2,7 +2,7 @@
# 被依赖方 <--- 使用方
# config <--- entity <--- toolkit <--- client <--- option <--- downloader
__version__ = '2.6.7'
__version__ = '2.6.8'
from .api import *
from .jm_plugin import *

View File

@ -293,6 +293,14 @@ class JmImageClient:
# https://cdn-msp2.18comic.vip/media/photos/498976/00027.gif
return data_original.endswith('.gif')
def download_album_cover(self, album_id, save_path: str):
self.download_image(
img_url=JmcomicText.get_album_cover_url(album_id),
img_save_path=save_path,
scramble_id=None,
decode_image=False,
)
class JmSearchAlbumClient:
"""

View File

@ -368,6 +368,26 @@ class JmcomicText:
length = len(text)
return text if length <= limit else (text[:limit] + f'...({length - limit}')
@classmethod
def get_album_cover_url(cls,
album_id: Union[str, int],
image_domain: Optional[str] = None,
size: str = '',
) -> str:
"""
根据本子id生成封面url
:param album_id: 本子id
:param image_domain: 图片cdn域名可传入裸域或含协议的域名
:param size: 尺寸后缀例如搜索列表页会使用 size="_3x4" 的封面图
"""
if image_domain is None:
import random
image_domain = random.choice(JmModuleConfig.DOMAIN_IMAGE_LIST)
path = f'/media/albums/{cls.parse_to_jm_id(album_id)}{size}.jpg'
return cls.format_url(path, image_domain)
# 支持dsl: #{???} -> os.getenv(???)
JmcomicText.dsl_replacer.add_dsl_and_replacer(r'\$\{(.*?)\}', JmcomicText.match_os_env)

View File

@ -332,3 +332,7 @@ class Test_Client(JmTestConfigurable):
# 打印page内容
for aid, atitle in page:
print(aid, atitle)
def test_download_cover(self):
album_id = 123
self.client.download_album_cover(album_id, f'./{album_id}.jpg')