#下载 #漫画 #图片链接 #并发 #cli #加菲猫

bin+lib everygarf

同时下载所有日期的加菲猫漫画

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 (从源)

使用 Crates.ioCargo 安装。

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 之后会逐渐减少回报。

Graph of download speed to job count, with trend line showing exponential decay from range 1-20, then settling on a similar rate from range 20-100

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。

  1. 创建一个Cloudflare账户
  2. 安装 npm(Node包管理器)
  3. 克隆仓库
git clone https://github.com/dxrcy/cloudflare-cors-anywhere myproxy
cd myproxy
npm install --include=dev
  1. 登录到 wrangler(Cloudflare worker CLI)

通过浏览器登录到您的Cloudflare账户。

npx wrangler login

wrangler.toml 中,将 {{ account-id }} 替换为您的Cloudflare账户ID

# ...
account_id = "{{ account-id }}" 
# ...
  1. 以开发模式运行
npm run dev
  1. 部署到Cloudflare
npm run deploy
  1. 测试部署

https://myproxy.YOURUSERNAME.workers.dev/cors-proxy?https://gocomics.com/garfield/2001/9/10

  1. 使用 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

免责声明

此项目与 GarfieldPaws, Inc 没有联系。如果您有任何问题或疑虑,请 在GitHub上创建一个issue


Icon: Stylized Garfield Face

依赖项

~10–40MB
~636K SLoC