Skip to content

Commit

Permalink
1. 规范化各项配置进config.ini文件,更新readme
Browse files Browse the repository at this point in the history
2. 修复文件名过长的报错: file name too long
3. 调整了线程池到for循环外面,避免重复创建线程池
4. 新增环境变量merge_episodes,用于多个章节的图片合并到同一目录,方便阅读
  • Loading branch information
lx1169732264 committed Dec 18, 2024
1 parent 1006655 commit c775864
Show file tree
Hide file tree
Showing 11 changed files with 347 additions and 288 deletions.
13 changes: 1 addition & 12 deletions .github/workflows/pica_crawler_actions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,12 @@ jobs:
PICA_SECRET_KEY: ${{secrets.PICA_SECRET_KEY}}
PICA_ACCOUNT: ${{secrets.PICA_ACCOUNT}}
PICA_PASSWORD: ${{secrets.PICA_PASSWORD}}
# 过滤分区 用,分隔
CATEGORIES: CG雜圖,生肉,耽美花園,偽娘哲學,扶他樂園,性轉換,SAO 刀劍神域,WEBTOON,Cosplay
# CATEGORIES_RULE 过滤规则 INCLUDE: 包含任意一个分区就下载 EXCLUDE: 包含任意一个分区就不下载
CATEGORIES_RULE: EXCLUDE
# 订阅的关键词,会下载x天范围内上传的漫画 为空则关闭关键词订阅 用,分隔
SUBSCRIBE_KEYWORD: ひぐま屋 (野良ヒグマ),アキレルショウジョ,オクモト悠太,ゐちぼっち,黒本君,もすきーと音
# 订阅的x天范围 git actions运行时填小一点,免得漫画过多邮箱推送不了,本地运行时随便填
SUBSCRIBE_DAYS: 7
# 允许在下载完成后发送自定义消息,为空则不发送 例: https://api.day.app/{your_keys}/picacg下载成功
BARK_URL: ${{secrets.BARK_URL}}
#每下载一本漫画的间隔时间(秒),在下载大量漫画时可以设置的稍微大一些,免得哔咔服务器响应不过来
INTERVAL_TIME: 5
#下载阶段是否输出细节信息
DETAIL: True
run: |
python ./src/main.py
git add ./data/downloaded.db
git add ./logs
# comics文件夹下的所有漫画都会被打成一个压缩包,并上传到actions artifact. 如果不配置邮箱推送功能,可以用这个来下载到漫画
- name: upload-artifact
uses: actions/upload-artifact@v4
Expand Down
13 changes: 3 additions & 10 deletions src/Dockerfile → Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,14 @@ WORKDIR /app
#RUN apt-get update && apt-get install -y build-essential

# 设置环境变量
ENV PICA_SECRET_KEY="" \
REQUEST_PROXY="" \
PACKAGE_TYPE="False" \
BARK_URL="" \
INTERVAL_TIME="5" \
DETAIL="False" \
REQUEST_TIME_OUT="10" \
CHANGE_FAVOURITE="False" \
ENV PACKAGE_TYPE="False" \
DELETE_COMIC="True"

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

# 安装依赖项
RUN pip install --no-cache-dir requests urllib3
RUN pip install --progress-bar off requests urllib3

# 指定容器启动时执行的命令
CMD ["python", "main.py"]
CMD ["python", "./src/main.py"]
184 changes: 61 additions & 123 deletions README.md

Large diffs are not rendered by default.

56 changes: 56 additions & 0 deletions config/config.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#按实际需求改param,filter这两节下的配置即可,其余配置不改不影响运行
#请不要将哔咔账密/哔咔密钥等敏感信息上传至GitHub 请不要将哔咔账密/哔咔密钥等敏感信息上传至GitHub 请不要将哔咔账密/哔咔密钥等敏感信息上传至GitHub

[param]
#哔咔账户名称
pica_account:
#哔咔账户密码
pica_password:
#哔咔请求时的密钥 参考AnkiKong提供的secret_key https://zhuanlan.zhihu.com/p/547321040
pica_secret_key:
#在下载完成后,是否自动取消收藏(推荐为True,避免收藏夹下的漫画被重复下载)
change_favourite: True
#运行结束后发送自定义消息进行通知(可为空) 例: `https://api.day.app/{your_keys}/picacg下载成功`
bark_url:
#使用代理(为空则不使用代理)
request_proxy:
#将同一本漫画的不同章节进行合并
merge_episodes: False

#自定义过滤规则
[filter]
#过滤分区 具体的分区列表可以从client.py的categories方法中获取 为空则不过滤 用,分隔
categories: CG雜圖,生肉,耽美花園,偽娘哲學,扶他樂園,性轉換,SAO 刀劍神域,WEBTOON,Cosplay
#过滤规则 INCLUDE: 包含任意一个分区就下载 EXCLUDE: 包含任意一个分区就不下载
categories_rule: EXCLUDE
# 订阅的关键词,会下载x天范围内上传的漫画 为空则不订阅 用,分隔
subscribe_keyword:
# 订阅的x天范围 GitHub Actions运行时填小一点,免得漫画过多邮箱推送不了,本地运行时随便填
subscribe_days: 60

#下载相关的配置
[crawl]
#下载同一本漫画中若干图片的线程并发数.下载是IO密集型操作,可以考虑设置为比cpu核心数稍大一些的值
concurrency: 5
#每下载一本漫画的间隔时间(秒),在下载大量漫画时可以设置的稍微大一些,免得哔咔服务器响应不过来
interval_time: 5
#下载阶段是否输出细节信息
detail: True
#限制每次请求的最大时间(秒)
request_time_out: 10
# 保留最近?天的日志文件
backup_count: 30

#访问哔咔服务器的固定请求头
[header]
api-key: C69BAF41DA5ABD1FFEDC6D2FEA56B
accept: application/vnd.picacomic.com.v1+json
app-channel: 2
nonce: b1ab87b4800d4d4590a11701b8551afa
app-version: 2.2.1.2.3.3
app-uuid: defaultUuid
app-platform: android
app-build-version: 45
Content-Type: application/json; charset=UTF-8
User-Agent: okhttp/3.8.1
image-quality: original
61 changes: 43 additions & 18 deletions config/config_backup.ini
Original file line number Diff line number Diff line change
@@ -1,8 +1,48 @@
#请根据这个文件配置`./config/config.ini`
#按实际需求改param,filter这两节下的配置即可,其余配置不改不影响运行
#请不要将哔咔账密/哔咔密钥等敏感信息上传至GitHub 请不要将哔咔账密/哔咔密钥等敏感信息上传至GitHub 请不要将哔咔账密/哔咔密钥等敏感信息上传至GitHub

[param]
#哔咔账户名称
pica_account:
#哔咔账户密码
pica_password:
#哔咔请求时的密钥 参考AnkiKong提供的secret_key https://zhuanlan.zhihu.com/p/547321040
pica_secret_key:
#在下载完成后,是否自动取消收藏(推荐为True,避免收藏夹下的漫画被重复下载)
change_favourite: True
#运行结束后发送自定义消息进行通知,为空则不通知 例: `https://api.day.app/{your_keys}/picacg下载成功`
bark_url:
#使用代理(为空则不使用代理)
request_proxy:
#将同一本漫画的不同章节进行合并
merge_episodes: False

#自定义过滤规则
[filter]
# 过滤分区,示例中有目前所有的分区,最新的分区列表可以从client.py的categories方法中获取 为空则不过滤 用,分隔
categories: 全彩,長篇,同人,短篇,圓神領域,碧藍幻想,CG雜圖,英語 ENG,生肉,純愛,百合花園,耽美花園,偽娘哲學,後宮閃光,扶他樂園,單行本,姐姐系,妹妹系,SM,性轉換,足の恋,人妻,NTR,強暴,非人類,艦隊收藏,Love Live,SAO 刀劍神域,Fate,東方,WEBTOON,禁書目錄,歐美,Cosplay,重口地帶
#过滤规则 填了categories参数的话这个必填 INCLUDE: 包含任意一个分区就下载 EXCLUDE: 包含任意一个分区就不下载
categories_rule: EXCLUDE
# 订阅的关键词,会下载x天范围内上传的漫画 为空则不订阅 用,分隔
subscribe_keyword:
# 订阅的x天范围 GitHub Actions运行时填小一点,免得漫画过多邮箱推送不了,本地运行时随便填
subscribe_days: 60

#下载相关的配置
[crawl]
#下载同一本的不同分页的图片的并发数,并不是多本同时并发下载 具体多少并发数自己定义
concurrency = 5
#下载同一本漫画中若干图片的线程并发数.下载是IO密集型操作,可以考虑设置为比cpu核心数稍大一些的值
concurrency: 5
#每下载一本漫画的间隔时间(秒),在下载大量漫画时可以设置的稍微大一些,免得哔咔服务器响应不过来
interval_time: 5
#下载阶段是否输出细节信息
detail: True
#限制每次请求的最大时间(秒)
request_time_out: 10
# 保留最近?天的日志文件
backup_count: 30

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

[param]
#哔咔账户名称
pica_account:
#哔咔账户密码
pica_password:
#过滤分区 用,分隔
categories: A,B
#过滤规则 INCLUDE: 包含任意一个分区就下载 EXCLUDE: 包含任意一个分区就不下载
categories_rule: EXCLUDE
# 订阅的关键词,会下载x天范围内上传的漫画 为空则关闭关键词订阅 用,分隔
subscribe_keyword: A,B
# 订阅的x天范围 git actions运行时填小一点,免得漫画过多邮箱推送不了,本地运行时随便填
subscribe_days: 60
# 保留最近?天的日志文件
backup_count: 30
9 changes: 3 additions & 6 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,16 @@ services:
image: yuanzhangzcc/picacg-download:latest
container_name: picacg-download-container
volumes:
- ./comics/bika:/app/comics
- ./comics:/app/comics
- ./output:/app/output
- ./logs:/app/logs
- ./data:/app/data
- ./config:/app/config
environment:
- PICA_SECRET_KEY=~d}$$Q7$$eIni=V)9\RK/P.RM4;9[7|@/CA}b~OW!3?EV`:<>M7pddUBL5n|0/*Cn #$字符存在转义问题,将密钥里的$替换为$$
- PICA_SECRET_KEY= #Dockerfile设置环境变量时,$字符好像存在转义问题,需要将密钥里的$替换为$$
- REQUEST_PROXY= #下载图片代理
- PACKAGE_TYPE=True #是否打包为zip, 推荐True
- INTERVAL_TIME=5 #每下载一本漫画的间隔时间(秒)
- REQUEST_TIME_OUT=10 #URL请求时间限制
- DETAIL=False #是否打印详细信息
- CHANGE_FAVOURITE=False #是否删除收藏夹内容
- DELETE_COMIC=False #是否打包后删除漫画
- CHANGE_FAVOURITE=False #是否删除收藏夹内容
- BARK_URL= #下载完成消息通知
restart: unless-stopped
8 changes: 4 additions & 4 deletions src/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,19 @@ def __init__(self) -> None:
parser = ConfigParser()
parser.read('./config/config.ini', encoding='utf-8')
self.headers = dict(parser.items('header'))
self.timeout = int(os.environ.get("REQUEST_TIME_OUT", 10))
self.timeout = int(get_cfg("crawl", "request_time_out", 10))

def http_do(self, method, url, **kwargs):
kwargs.setdefault("allow_redirects", True)
header = self.headers.copy()
ts = str(int(time()))
raw = url.replace(base, "") + str(ts) + header["nonce"] + method + header["api-key"]
hc = hmac.new(os.environ["PICA_SECRET_KEY"].encode(), digestmod=hashlib.sha256)
hc = hmac.new(get_cfg("param", "pica_secret_key").encode(), digestmod=hashlib.sha256)
hc.update(raw.lower().encode())
header["signature"] = hc.hexdigest()
header["time"] = ts
kwargs.setdefault("headers", header)
proxy = os.environ.get("REQUEST_PROXY")
proxy = get_cfg("param", "request_proxy")
if proxy:
proxies = {'http': proxy, 'https': proxy}
else:
Expand Down Expand Up @@ -153,7 +153,7 @@ def search_all(self, keyword):
datetime.now() -
datetime.strptime(comic["updated_at"], "%Y-%m-%dT%H:%M:%S.%fZ")
).days
) <= int(get_cfg('param', 'subscribe_days'))]
) <= int(get_cfg('filter', 'subscribe_days'))]
subscribed_comics += recent_comics

# Check if any comics in the current page exceed the subscribe time limit.
Expand Down
4 changes: 2 additions & 2 deletions src/data_migration.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@
author = comic["author"]
episodes = pica_server.episodes_all(cid, title)
if episodes:
mark_comic_as_downloaded(cid, title)
for episode in episodes:
mark_comic_as_downloaded(cid, title)
update_downloaded_episodes(cid, episode["title"], db_path)
update_comic_data(comic, db_path)
update_comic_data(comic, db_path)
else:
print(f'该漫画可能已被删除,{cid}')
Loading

0 comments on commit c775864

Please sign in to comment.