mirror of
https://github.com/hect0x7/JMComic-Crawler-Python.git
synced 2025-09-26 22:31:30 +08:00
封面图下载 (#480)
This commit is contained in:
parent
436bd4c14e
commit
e610e2bb67
@ -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(
|
||||
|
@ -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:
|
||||
"""
|
||||
|
@ -368,6 +368,25 @@ 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: str,
|
||||
image_domain: 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)
|
||||
|
||||
return f'{JmModuleConfig.PROT}{image_domain}/media/albums/{cls.parse_to_jm_id(album_id)}{size}.jpg'
|
||||
|
||||
|
||||
# 支持dsl: #{???} -> os.getenv(???)
|
||||
JmcomicText.dsl_replacer.add_dsl_and_replacer(r'\$\{(.*?)\}', JmcomicText.match_os_env)
|
||||
|
@ -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')
|
||||
|
Loading…
Reference in New Issue
Block a user