#reddit #downloader #download #title #content #formatting #linked

app redditrip

一款快速高效下载整个子版块链接内容的通用工具

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命令行工具

Apache-2.0

92KB
2K SLoC

redditrip

crates.io-badge

一款快速高效下载整个子版块链接内容的通用工具。

请注意,如果您想检索关于单个 Reddit 帖子的信息,这不是您想要的工具。

特性

  • 绕过 Reddit API 的 1000 篇帖子限制

  • 更新本地副本

  • 被禁止的子版块也可以工作

  • 快速(由于异步作业队列,由出色的 tokio 驱动)

  • 自定义标题格式化

  • (针对 Rust 程序员) #![forbid(unsafe_code)]

安装

预构建的二进制文件可以在 Releases 标签页中找到。

如果您想要本地编译版本,可以使用 cargo

  1. 根据 https://rustup.rs 安装 Rust。默认配置是足够的。

  2. $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