7 个稳定版本
2.7.0 | 2024年5月25日 |
---|---|
2.6.1 | 2024年4月3日 |
2.5.0 | 2024年3月27日 |
2.3.2 | 2023年12月6日 |
#455 in 命令行实用程序
25 每月下载量
49KB
1K SLoC
EveryGarf - 漫画下载器
同时下载所有日期的加菲猫漫画。
统计数据
- 下载大小:4.9GB
- 下载时间:约 20 分钟*
- 图片:>16,400
安装
二进制文件
下载最新版本 (可执行文件)
Cargo (从源)
cargo install everygarf
或者克隆仓库,并用 cargo
安装。
git clone https://github.com/dxrcy/everygarf
cargo install --path everygarf
用法
# Help information
everygarf --help
# Download to default folder ('garfield' in user pictures directory)
everygarf
# Change some options
everygarf ~/Pictures/garfield --remove-all --notify-on-fail --attempts 20 --timeout 30 --jobs 40 --max 300 --tree
# Check if any images are missing
everygarf --query && echo 'Up to date!'
关于
下载时间
下载时间已测试几次(自 v2.0 以来),使用不同的 --jobs
、--timeout
和 --attempts
值。速度显然非常依赖于您的 ping 和下载速度。根据一些基本测试,增加并发性似乎在 --jobs 20
之后会逐渐减少回报。
API
由于找不到官方的加菲猫漫画 API,该程序抓取 gocomics.com 并找到 assets.amuniversal.com 链接。每个漫画需要 2 个 HTTP 请求。托管在 picayune.uclick.com 的文件,虽然每个文件只需要 1 个请求,但被发现非常不稳定,因此不使用。请参阅 缓存的图片 URL。
可能的性能优化
如上所述,由于每个图像都需要 2 个 HTTP 请求,程序的速度几乎完全依赖于互联网速度。该程序试图尽可能地利用并发性。唯一可预见的优化是使用不同的 Web API。
代理服务
默认代理 URL 是 https://proxy.darcy-700.workers.dev
,一个简单的 Cloudflare Worker。如果您不断看到“速率限制”(HTTP/429)错误,请尝试更改代理 URL(如下所示)。
自定义代理服务
请参阅 使用 Cloudflare Worker 设置自定义代理服务。
禁用代理
使用 --no-proxy
参数。这不建议使用,你很可能会立即被 gocomics.com 限制访问速率。
缓存后的图像URL
没有图像URL缓存,每个图像都需要2次请求(见 API)。默认情况下,它会通过获取 dxrcy/everygarf-cache 来检查已存在的缓存图像URL。使用 --no-cache
禁用缓存,使用 --cache
指定自定义缓存文件URL(远程或本地),使用 --save-cache
保存自己的缓存文件。
使用Systemd定时器自动运行
适用于有 systemd
的系统。将用户服务和定时器安装到 ~/.config/systemd/user
。
这假设 everygarf
已经通过 cargo
安装。否则,必须在 everygarf.service
中的 ExecStart
字段更改二进制路径。
#!/bin/sh
# 1. Navigate to user systemd config
dir=~/.config/systemd/user
[ -d "$dir" ] || { mkdir -p "$dir" || exit 1; }
cd "$dir" || exit 1
# 2. Create service file
# ExecStart path must be absolute, $HOME is interpolated on file create
# Maximum 50 images at a time
echo "\
[Unit]
Description=Run EveryGarf program to download Garfield comics
[Service]
ExecStart=$HOME/.cargo/bin/everygarf --jobs 10 --max 50 --notify-on-fail
[Install]
WantedBy=everygarf.timer\
" > everygarf.service
# 3. Create timer file
# Runs shortly after each boot, and every 3 hours
echo "\
[Unit]
Description=Timer for EveryGarf service
[Timer]
OnBootSec=2min
OnUnitActiveSec=3h
Unit=everygarf.service
[Install]
WantedBy=timers.target\
" > everygarf.timer
# 4. Enable and start with systemd
systemctl --user daemon-reload
systemctl --user enable everygarf.timer
systemctl --user start everygarf.timer
使用
journalctl --user --unit everygarf.service --pager-end
查看everygarf.service的日志
使用Cloudflare worker设置自定义代理服务
这还没有经过很好的测试!在我的机器上它工作正常,但如果您有任何问题,请 创建一个issue
使用 Zibri/cloudflare-cors-anywhere 设置Cloudflare worker,并使用 --proxy
传递URL。
- 创建一个Cloudflare账户
- 安装 npm(Node包管理器)
- 克隆仓库
git clone https://github.com/dxrcy/cloudflare-cors-anywhere myproxy
cd myproxy
npm install --include=dev
- 登录到 wrangler(Cloudflare worker CLI)
通过浏览器登录到您的Cloudflare账户。
npx wrangler login
在 wrangler.toml
中,将 {{ account-id }}
替换为您的Cloudflare账户ID
# ...
account_id = "{{ account-id }}"
# ...
- 以开发模式运行
npm run dev
- 部署到Cloudflare
npm run deploy
- 测试部署
https://myproxy.YOURUSERNAME.workers.dev/cors-proxy?https://gocomics.com/garfield/2001/9/10
- 使用
everygarf
代理
everygarf --proxy "https://myproxy.<YOURUSERNAME>.workers.dev/cors-proxy"
贡献
# Clone the repo
git clone https://github.com/dxrcy/everygarf
cd everygarf
# Install build dependency
cargo install just
# (Make an amazing change...)
# Check for issues
just check
免责声明
此项目与 Garfield 或 Paws, Inc 没有联系。如果您有任何问题或疑虑,请 在GitHub上创建一个issue。
依赖项
~10–40MB
~636K SLoC