|
| 1 | +# jmcomic 常用类和方法演示 |
| 2 | + |
| 3 | +## 下载本子/章节 |
| 4 | + |
| 5 | +```python |
| 6 | +from jmcomic import * |
| 7 | + |
| 8 | +# 下载id为438696的本子 (https://18comic.vip/album/438696) |
| 9 | +download_album(438696) |
| 10 | + |
| 11 | +# 下载章节 (https://18comic.vip/photo/438696) |
| 12 | +download_photo(438696) |
| 13 | + |
| 14 | +# 同时下载多个本子 |
| 15 | +download_album([123, 456, 789]) |
| 16 | +``` |
| 17 | + |
| 18 | +## 使用option定制化下载本子 |
| 19 | + |
| 20 | +如果你在下载本子时有一些定制化需求, |
| 21 | + |
| 22 | +例如指定禁漫域名,使用代理,登录禁漫,图片格式转换等等, |
| 23 | + |
| 24 | +那么,你可以试试看jmcomic提供的option机制 |
| 25 | + |
| 26 | +```python |
| 27 | +from jmcomic import * |
| 28 | + |
| 29 | +# 1. 在调用下载api前,通过创建和使用option对象,可以定制化下载行为。 |
| 30 | +# 推荐使用配置文件的方式来创建option对象, |
| 31 | +# 你可以配置很多东西,比如代理、cookies、下载规则等等。 |
| 32 | +# 配置文件的语法参考: https://jmcomic.readthedocs.io/en/latest/option_file_syntax/ |
| 33 | +option = create_option_by_file('op.yml') # 通过配置文件来创建option对象 |
| 34 | + |
| 35 | +# 2. 调用下载api,把option作为参数传递 |
| 36 | +download_album(123, option) |
| 37 | +# 也可以使用下面这种面向对象的方式,是一样的 |
| 38 | +option.download_album(123) |
| 39 | +``` |
| 40 | + |
| 41 | +## 获取本子/章节/图片的实体类 |
| 42 | + |
| 43 | +```python |
| 44 | +from jmcomic import * |
| 45 | + |
| 46 | +# 客户端 |
| 47 | +client = JmOption.default().new_jm_client() |
| 48 | + |
| 49 | +# 本子实体类 |
| 50 | +album: JmAlbumDetail = client.get_album_detail('427413') |
| 51 | + |
| 52 | + |
| 53 | +def fetch(photo: JmPhotoDetail): |
| 54 | + # 章节实体类 |
| 55 | + photo = client.get_photo_detail(photo.photo_id, False) |
| 56 | + |
| 57 | + # 图片实体类 |
| 58 | + image: JmImageDetail |
| 59 | + for image in photo: |
| 60 | + print(image.img_url) |
| 61 | + |
| 62 | + |
| 63 | +# 多线程发起请求 |
| 64 | +multi_thread_launcher( |
| 65 | + iter_objs=album, |
| 66 | + apply_each_obj_func=fetch |
| 67 | +) |
| 68 | +``` |
| 69 | + |
| 70 | +## 搜索本子 |
| 71 | + |
| 72 | +```python |
| 73 | +from jmcomic import * |
| 74 | + |
| 75 | +client = JmOption.default().new_jm_client() |
| 76 | + |
| 77 | +# 分页查询,search_site就是禁漫网页上的【站内搜索】 |
| 78 | +page: JmSearchPage = client.search_site(search_query='+MANA +无修正', page=1) |
| 79 | +# page默认的迭代方式是page.iter_id_title(),每次迭代返回 albun_id, title |
| 80 | +for album_id, title in page: |
| 81 | + print(f'[{album_id}]: {title}') |
| 82 | + |
| 83 | +# 直接搜索禁漫车号 |
| 84 | +page = client.search_site(search_query='427413') |
| 85 | +album: JmAlbumDetail = page.single_album |
| 86 | +print(album.tags) |
| 87 | +``` |
| 88 | + |
| 89 | +## 搜索并下载本子 |
| 90 | + |
| 91 | +```python |
| 92 | +from jmcomic import * |
| 93 | + |
| 94 | +option = JmOption.default() |
| 95 | +client = option.new_jm_client() |
| 96 | + |
| 97 | +tag = '無修正' |
| 98 | +# 搜索标签,可以使用search_tag。 |
| 99 | +# 搜索第一页。 |
| 100 | +page: JmSearchPage = client.search_tag(tag, page=1) |
| 101 | + |
| 102 | +aid_list = [] |
| 103 | + |
| 104 | +for aid, atitle, tag_list in page.iter_id_title_tag(): # 使用page的iter_id_title_tag迭代器 |
| 105 | + if tag in tag_list: |
| 106 | + print(f'[标签/{tag}] 发现目标: [{aid}]: [{atitle}]') |
| 107 | + aid_list.append(aid) |
| 108 | + |
| 109 | +download_album(aid_list, option) |
| 110 | +``` |
| 111 | + |
| 112 | +## 分类 / 排行榜 |
| 113 | + |
| 114 | +禁漫的分类是一个和搜索有些类似的功能。 |
| 115 | + |
| 116 | +搜索是按某一条件进行过滤。 |
| 117 | + |
| 118 | +分类没有过滤,就是把某一类别(category)下的本子全都调出来。 |
| 119 | + |
| 120 | +禁漫的排行榜就是分类的一种形式 |
| 121 | + |
| 122 | +下面演示调用分类api |
| 123 | + |
| 124 | +```python |
| 125 | +from jmcomic import * |
| 126 | + |
| 127 | +# 创建客户端 |
| 128 | +op = JmOption.default() |
| 129 | +cl = op.new_jm_client() |
| 130 | + |
| 131 | +# 调用分类接口 |
| 132 | +# 根据下面的参数,这个调用的意义就是: |
| 133 | +# 在全部分类下,选择所有时间范围,按观看数排序后,获取第一页的本子 |
| 134 | +page: JmCategoryPage = cl.categories_filter( |
| 135 | + page=1, |
| 136 | + time=JmMagicConstants.TIME_ALL, # 时间选择全部,具体可以写什么请见JmMagicConstants |
| 137 | + category=JmMagicConstants.CATEGORY_ALL, # 分类选择全部,具体可以写什么请见JmMagicConstants |
| 138 | + order_by=JmMagicConstants.ORDER_BY_LATEST, # 按照观看数排序,具体可以写什么请见JmMagicConstants |
| 139 | +) |
| 140 | + |
| 141 | +# 月排行,底层实现也是调的categories_filter |
| 142 | +page: JmCategoryPage = cl.month_ranking(1) |
| 143 | +# 周排行 |
| 144 | +page: JmCategoryPage = cl.week_ranking(1) |
| 145 | + |
| 146 | +# 循环获取分页,使用 cl.categories_filter_gen |
| 147 | +for page in cl.categories_filter_gen(1, # 起始页码 |
| 148 | + # 下面是分类参数 |
| 149 | + JmMagicConstants.TIME_WEEK, |
| 150 | + JmMagicConstants.CATEGORY_ALL, |
| 151 | + JmMagicConstants.ORDER_BY_VIEW, |
| 152 | + ): |
| 153 | + for aid, atitle in page: |
| 154 | + print(aid, atitle) |
| 155 | + |
| 156 | +``` |
| 157 | + |
| 158 | +## 手动创建Client |
| 159 | + |
| 160 | +```python |
| 161 | +# 默认的使用方式是先创建option,option封装了所有配置,然后由option.new_jm_client() 创建客户端client,使用client可以访问禁漫接口 |
| 162 | + |
| 163 | +# 下面演示直接构造client的方式 |
| 164 | +from jmcomic import * |
| 165 | + |
| 166 | +""" |
| 167 | +创建JM客户端 |
| 168 | +
|
| 169 | +:param postman: 负责实现HTTP请求的对象,持有cookies、headers、proxies等信息 |
| 170 | +:param domain_list: 禁漫域名 |
| 171 | +:param retry_times: 重试次数 |
| 172 | +""" |
| 173 | + |
| 174 | +# 网页端 |
| 175 | +cl = JmHtmlClient( |
| 176 | + postman=JmModuleConfig.new_postman(), |
| 177 | + domain_list=['18comic.vip'], |
| 178 | + retry_times=1 |
| 179 | +) |
| 180 | + |
| 181 | +# API端(APP) |
| 182 | +cl = JmApiClient( |
| 183 | + postman=JmModuleConfig.new_postman(), |
| 184 | + domain_list=JmModuleConfig.DOMAIN_API_LIST, |
| 185 | + retry_times=1 |
| 186 | +) |
| 187 | + |
| 188 | + |
| 189 | +``` |
0 commit comments