Skip to content

Commit c775864

Browse files
committed
1. 规范化各项配置进config.ini文件,更新readme
2. 修复文件名过长的报错: file name too long 3. 调整了线程池到for循环外面,避免重复创建线程池 4. 新增环境变量merge_episodes,用于多个章节的图片合并到同一目录,方便阅读
1 parent 1006655 commit c775864

11 files changed

+347
-288
lines changed

.github/workflows/pica_crawler_actions.yml

+1-12
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,12 @@ jobs:
2323
PICA_SECRET_KEY: ${{secrets.PICA_SECRET_KEY}}
2424
PICA_ACCOUNT: ${{secrets.PICA_ACCOUNT}}
2525
PICA_PASSWORD: ${{secrets.PICA_PASSWORD}}
26-
# 过滤分区 用,分隔
27-
CATEGORIES: CG雜圖,生肉,耽美花園,偽娘哲學,扶他樂園,性轉換,SAO 刀劍神域,WEBTOON,Cosplay
28-
# CATEGORIES_RULE 过滤规则 INCLUDE: 包含任意一个分区就下载 EXCLUDE: 包含任意一个分区就不下载
29-
CATEGORIES_RULE: EXCLUDE
30-
# 订阅的关键词,会下载x天范围内上传的漫画 为空则关闭关键词订阅 用,分隔
31-
SUBSCRIBE_KEYWORD: ひぐま屋 (野良ヒグマ),アキレルショウジョ,オクモト悠太,ゐちぼっち,黒本君,もすきーと音
32-
# 订阅的x天范围 git actions运行时填小一点,免得漫画过多邮箱推送不了,本地运行时随便填
33-
SUBSCRIBE_DAYS: 7
3426
# 允许在下载完成后发送自定义消息,为空则不发送 例: https://api.day.app/{your_keys}/picacg下载成功
3527
BARK_URL: ${{secrets.BARK_URL}}
36-
#每下载一本漫画的间隔时间(秒),在下载大量漫画时可以设置的稍微大一些,免得哔咔服务器响应不过来
37-
INTERVAL_TIME: 5
38-
#下载阶段是否输出细节信息
39-
DETAIL: True
4028
run: |
4129
python ./src/main.py
4230
git add ./data/downloaded.db
31+
git add ./logs
4332
# comics文件夹下的所有漫画都会被打成一个压缩包,并上传到actions artifact. 如果不配置邮箱推送功能,可以用这个来下载到漫画
4433
- name: upload-artifact
4534
uses: actions/upload-artifact@v4

src/Dockerfile Dockerfile

+3-10
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,14 @@ WORKDIR /app
88
#RUN apt-get update && apt-get install -y build-essential
99

1010
# 设置环境变量
11-
ENV PICA_SECRET_KEY="" \
12-
REQUEST_PROXY="" \
13-
PACKAGE_TYPE="False" \
14-
BARK_URL="" \
15-
INTERVAL_TIME="5" \
16-
DETAIL="False" \
17-
REQUEST_TIME_OUT="10" \
18-
CHANGE_FAVOURITE="False" \
11+
ENV PACKAGE_TYPE="False" \
1912
DELETE_COMIC="True"
2013

2114
# 将当前目录内容复制到工作目录中
2215
COPY . /app
2316

2417
# 安装依赖项
25-
RUN pip install --no-cache-dir requests urllib3
18+
RUN pip install --progress-bar off requests urllib3
2619

2720
# 指定容器启动时执行的命令
28-
CMD ["python", "main.py"]
21+
CMD ["python", "./src/main.py"]

README.md

+61-123
Large diffs are not rendered by default.

config/config.ini

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#按实际需求改param,filter这两节下的配置即可,其余配置不改不影响运行
2+
#请不要将哔咔账密/哔咔密钥等敏感信息上传至GitHub 请不要将哔咔账密/哔咔密钥等敏感信息上传至GitHub 请不要将哔咔账密/哔咔密钥等敏感信息上传至GitHub
3+
4+
[param]
5+
#哔咔账户名称
6+
pica_account:
7+
#哔咔账户密码
8+
pica_password:
9+
#哔咔请求时的密钥 参考AnkiKong提供的secret_key https://zhuanlan.zhihu.com/p/547321040
10+
pica_secret_key:
11+
#在下载完成后,是否自动取消收藏(推荐为True,避免收藏夹下的漫画被重复下载)
12+
change_favourite: True
13+
#运行结束后发送自定义消息进行通知(可为空) 例: `https://api.day.app/{your_keys}/picacg下载成功`
14+
bark_url:
15+
#使用代理(为空则不使用代理)
16+
request_proxy:
17+
#将同一本漫画的不同章节进行合并
18+
merge_episodes: False
19+
20+
#自定义过滤规则
21+
[filter]
22+
#过滤分区 具体的分区列表可以从client.py的categories方法中获取 为空则不过滤 用,分隔
23+
categories: CG雜圖,生肉,耽美花園,偽娘哲學,扶他樂園,性轉換,SAO 刀劍神域,WEBTOON,Cosplay
24+
#过滤规则 INCLUDE: 包含任意一个分区就下载 EXCLUDE: 包含任意一个分区就不下载
25+
categories_rule: EXCLUDE
26+
# 订阅的关键词,会下载x天范围内上传的漫画 为空则不订阅 用,分隔
27+
subscribe_keyword:
28+
# 订阅的x天范围 GitHub Actions运行时填小一点,免得漫画过多邮箱推送不了,本地运行时随便填
29+
subscribe_days: 60
30+
31+
#下载相关的配置
32+
[crawl]
33+
#下载同一本漫画中若干图片的线程并发数.下载是IO密集型操作,可以考虑设置为比cpu核心数稍大一些的值
34+
concurrency: 5
35+
#每下载一本漫画的间隔时间(秒),在下载大量漫画时可以设置的稍微大一些,免得哔咔服务器响应不过来
36+
interval_time: 5
37+
#下载阶段是否输出细节信息
38+
detail: True
39+
#限制每次请求的最大时间(秒)
40+
request_time_out: 10
41+
# 保留最近?天的日志文件
42+
backup_count: 30
43+
44+
#访问哔咔服务器的固定请求头
45+
[header]
46+
api-key: C69BAF41DA5ABD1FFEDC6D2FEA56B
47+
accept: application/vnd.picacomic.com.v1+json
48+
app-channel: 2
49+
nonce: b1ab87b4800d4d4590a11701b8551afa
50+
app-version: 2.2.1.2.3.3
51+
app-uuid: defaultUuid
52+
app-platform: android
53+
app-build-version: 45
54+
Content-Type: application/json; charset=UTF-8
55+
User-Agent: okhttp/3.8.1
56+
image-quality: original

config/config_backup.ini

+43-18
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,48 @@
1+
#请根据这个文件配置`./config/config.ini`
2+
#按实际需求改param,filter这两节下的配置即可,其余配置不改不影响运行
3+
#请不要将哔咔账密/哔咔密钥等敏感信息上传至GitHub 请不要将哔咔账密/哔咔密钥等敏感信息上传至GitHub 请不要将哔咔账密/哔咔密钥等敏感信息上传至GitHub
4+
5+
[param]
6+
#哔咔账户名称
7+
pica_account:
8+
#哔咔账户密码
9+
pica_password:
10+
#哔咔请求时的密钥 参考AnkiKong提供的secret_key https://zhuanlan.zhihu.com/p/547321040
11+
pica_secret_key:
12+
#在下载完成后,是否自动取消收藏(推荐为True,避免收藏夹下的漫画被重复下载)
13+
change_favourite: True
14+
#运行结束后发送自定义消息进行通知,为空则不通知 例: `https://api.day.app/{your_keys}/picacg下载成功`
15+
bark_url:
16+
#使用代理(为空则不使用代理)
17+
request_proxy:
18+
#将同一本漫画的不同章节进行合并
19+
merge_episodes: False
20+
21+
#自定义过滤规则
22+
[filter]
23+
# 过滤分区,示例中有目前所有的分区,最新的分区列表可以从client.py的categories方法中获取 为空则不过滤 用,分隔
24+
categories: 全彩,長篇,同人,短篇,圓神領域,碧藍幻想,CG雜圖,英語 ENG,生肉,純愛,百合花園,耽美花園,偽娘哲學,後宮閃光,扶他樂園,單行本,姐姐系,妹妹系,SM,性轉換,足の恋,人妻,NTR,強暴,非人類,艦隊收藏,Love Live,SAO 刀劍神域,Fate,東方,WEBTOON,禁書目錄,歐美,Cosplay,重口地帶
25+
#过滤规则 填了categories参数的话这个必填 INCLUDE: 包含任意一个分区就下载 EXCLUDE: 包含任意一个分区就不下载
26+
categories_rule: EXCLUDE
27+
# 订阅的关键词,会下载x天范围内上传的漫画 为空则不订阅 用,分隔
28+
subscribe_keyword:
29+
# 订阅的x天范围 GitHub Actions运行时填小一点,免得漫画过多邮箱推送不了,本地运行时随便填
30+
subscribe_days: 60
31+
32+
#下载相关的配置
133
[crawl]
2-
#下载同一本的不同分页的图片的并发数,并不是多本同时并发下载 具体多少并发数自己定义
3-
concurrency = 5
34+
#下载同一本漫画中若干图片的线程并发数.下载是IO密集型操作,可以考虑设置为比cpu核心数稍大一些的值
35+
concurrency: 5
36+
#每下载一本漫画的间隔时间(秒),在下载大量漫画时可以设置的稍微大一些,免得哔咔服务器响应不过来
37+
interval_time: 5
38+
#下载阶段是否输出细节信息
39+
detail: True
40+
#限制每次请求的最大时间(秒)
41+
request_time_out: 10
42+
# 保留最近?天的日志文件
43+
backup_count: 30
444

5-
#固定的请求头
45+
#访问哔咔服务器的固定请求头
646
[header]
747
api-key: C69BAF41DA5ABD1FFEDC6D2FEA56B
848
accept: application/vnd.picacomic.com.v1+json
@@ -16,18 +56,3 @@ Content-Type: application/json; charset=UTF-8
1656
User-Agent: okhttp/3.8.1
1757
image-quality: original
1858

19-
[param]
20-
#哔咔账户名称
21-
pica_account:
22-
#哔咔账户密码
23-
pica_password:
24-
#过滤分区 用,分隔
25-
categories: A,B
26-
#过滤规则 INCLUDE: 包含任意一个分区就下载 EXCLUDE: 包含任意一个分区就不下载
27-
categories_rule: EXCLUDE
28-
# 订阅的关键词,会下载x天范围内上传的漫画 为空则关闭关键词订阅 用,分隔
29-
subscribe_keyword: A,B
30-
# 订阅的x天范围 git actions运行时填小一点,免得漫画过多邮箱推送不了,本地运行时随便填
31-
subscribe_days: 60
32-
# 保留最近?天的日志文件
33-
backup_count: 30

docker-compose.yml

+3-6
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,16 @@ services:
44
image: yuanzhangzcc/picacg-download:latest
55
container_name: picacg-download-container
66
volumes:
7-
- ./comics/bika:/app/comics
7+
- ./comics:/app/comics
88
- ./output:/app/output
99
- ./logs:/app/logs
1010
- ./data:/app/data
1111
- ./config:/app/config
1212
environment:
13-
- PICA_SECRET_KEY=~d}$$Q7$$eIni=V)9\RK/P.RM4;9[7|@/CA}b~OW!3?EV`:<>M7pddUBL5n|0/*Cn #$字符存在转义问题,将密钥里的$替换为$$
13+
- PICA_SECRET_KEY= #Dockerfile设置环境变量时,$字符好像存在转义问题,需要将密钥里的$替换为$$
1414
- REQUEST_PROXY= #下载图片代理
1515
- PACKAGE_TYPE=True #是否打包为zip, 推荐True
16-
- INTERVAL_TIME=5 #每下载一本漫画的间隔时间(秒)
17-
- REQUEST_TIME_OUT=10 #URL请求时间限制
18-
- DETAIL=False #是否打印详细信息
19-
- CHANGE_FAVOURITE=False #是否删除收藏夹内容
2016
- DELETE_COMIC=False #是否打包后删除漫画
17+
- CHANGE_FAVOURITE=False #是否删除收藏夹内容
2118
- BARK_URL= #下载完成消息通知
2219
restart: unless-stopped

src/client.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,19 @@ def __init__(self) -> None:
3030
parser = ConfigParser()
3131
parser.read('./config/config.ini', encoding='utf-8')
3232
self.headers = dict(parser.items('header'))
33-
self.timeout = int(os.environ.get("REQUEST_TIME_OUT", 10))
33+
self.timeout = int(get_cfg("crawl", "request_time_out", 10))
3434

3535
def http_do(self, method, url, **kwargs):
3636
kwargs.setdefault("allow_redirects", True)
3737
header = self.headers.copy()
3838
ts = str(int(time()))
3939
raw = url.replace(base, "") + str(ts) + header["nonce"] + method + header["api-key"]
40-
hc = hmac.new(os.environ["PICA_SECRET_KEY"].encode(), digestmod=hashlib.sha256)
40+
hc = hmac.new(get_cfg("param", "pica_secret_key").encode(), digestmod=hashlib.sha256)
4141
hc.update(raw.lower().encode())
4242
header["signature"] = hc.hexdigest()
4343
header["time"] = ts
4444
kwargs.setdefault("headers", header)
45-
proxy = os.environ.get("REQUEST_PROXY")
45+
proxy = get_cfg("param", "request_proxy")
4646
if proxy:
4747
proxies = {'http': proxy, 'https': proxy}
4848
else:
@@ -153,7 +153,7 @@ def search_all(self, keyword):
153153
datetime.now() -
154154
datetime.strptime(comic["updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ")
155155
).days
156-
) <= int(get_cfg('param', 'subscribe_days'))]
156+
) <= int(get_cfg('filter', 'subscribe_days'))]
157157
subscribed_comics += recent_comics
158158

159159
# Check if any comics in the current page exceed the subscribe time limit.

src/data_migration.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@
3535
author = comic["author"]
3636
episodes = pica_server.episodes_all(cid, title)
3737
if episodes:
38+
mark_comic_as_downloaded(cid, title)
3839
for episode in episodes:
39-
mark_comic_as_downloaded(cid, title)
4040
update_downloaded_episodes(cid, episode["title"], db_path)
41-
update_comic_data(comic, db_path)
41+
update_comic_data(comic, db_path)
4242
else:
4343
print(f'该漫画可能已被删除,{cid}')

0 commit comments

Comments
 (0)