6 个版本
0.2.1 | 2020 年 5 月 20 日 |
---|---|
0.2.0 | 2020 年 5 月 4 日 |
0.1.3 | 2020 年 5 月 1 日 |
0.1.2 | 2020 年 4 月 25 日 |
#2541 在 命令行工具
92KB
2K SLoC
redditrip
一款快速高效下载整个子版块链接内容的通用工具。
请注意,如果您想检索关于单个 Reddit 帖子的信息,这不是您想要的工具。
特性
-
绕过 Reddit API 的 1000 篇帖子限制
-
更新本地副本
-
被禁止的子版块也可以工作
-
快速(由于异步作业队列,由出色的
tokio
驱动) -
自定义标题格式化
-
(针对 Rust 程序员)
#![forbid(unsafe_code)]
安装
预构建的二进制文件可以在 Releases
标签页中找到。
如果您想要本地编译版本,可以使用 cargo
-
根据 https://rustup.rs 安装 Rust。默认配置是足够的。
-
$cargo install redditrip
用法
也可以通过运行 redditrip --help
获取用法。
基本命令是 redditrip [SUBREDDITS]...
。
以下参数是可选的
-
--update
/-u
:在遇到第一个已存在的文件时停止。 -
--force
/-f
:通过将页面上的任何内容写入磁盘来强制下载不受支持的域。 -
--after <date>
:仅下载此日期之后发布的帖子。 -
--before <date>
:仅下载此日期之前发布的帖子。 -
--selfposts
/-s
:将自发布内容作为文本文件下载。 -
--exclude <domain>
/-e <domain>
:防止从特定域名下载。 -
--title <formatter>
:使用自定义标题格式。
更多高级选项在--help
输出中描述。
下载大量数据
建议使用-q
/--quiet
来仅显示单个错误。还应使用高--batch-size
,以及随后一个高的ulimit -n
(打开的文件),因为每个下载任务需要> = 1个打开的文件描述符。最后,如果您预计会遇到许多不支持直接保存的网站,请使用--force
。
标题格式化
redditrip
支持自定义标题。要使用此功能,必须使用--title <formatter>
提供格式化字符串。占位符是括号内的字段名称。例如:--title "{id}-{author}_{title}"
。文件扩展名始终附加到标题。
可以通过运行程序--formatting-fields
来查询可用的字段。它们对应于Pushshift API的数据。可以在https://api.pushshift.io/reddit/search/submission?size=1上看到大致概述,尽管并非所有字段都存在。
不允许出现在文件名中的字符被替换为_
。
因为Reddit标题本身可能比许多系统上的最大文件名长度长,所以应该知道--max-file-name-length <length>
,它用于截断文件名。
不使用{id}
占位符可能会导致文件名冲突,因此建议始终在格式化器中包含它,最好放在前面,这样就不存在被截断的风险。
最有用的占位符是
占位符 | 类型 | 目的 |
---|---|---|
{id} |
字符串 | 帖子ID |
{标题} |
字符串 | 帖子标题 |
{作者} |
字符串 | 帖子作者名称 |
{created_utc} |
整数 | 帖子创建时的UNIX时间戳 |
{link_flair_text} |
字符串 | 帖子 flair 文本 |
{author_flair_text} |
字符串 | 作者 flair 文本 |
{domain} |
字符串 | 帖子指向的链接的域名 |
{over_18} |
布尔值 | 帖子是否为NSFW |
编译
自己编译主分支相当简单。确保已安装Rust和cargo
,如上所述。然后
$ git clone https://github.com/Draphar/redditrip
$ cd redditrip
这就足够了
$ cargo build --release
# The binary is `target/release/redditrip`
如果您出于任何原因想要一个高度优化的构建
$ cargo rustc --release -- -C lto -C codegen-units=1 -C target_cpu=native
$ strip target/release/redditrip
待办事项
-
实现已下载链接的映射,并使用符号链接而不是重新下载
-
过滤帖子
许可证
版权所有 2020 Joshua Prieth
根据Apache许可证版本2.0(“许可证”);除非您按照许可证的规定或以书面形式同意,否则不得使用此文件。您可以在以下位置获取许可证副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言管辖权限和限制,请参阅许可证。
依赖关系
~11–23MB
~306K SLoC