7 个不稳定版本 (3 个破坏性更新)
0.4.0 | 2020年3月10日 |
---|---|
0.3.0 | 2019年6月9日 |
0.2.2 | 2018年8月5日 |
0.1.1 | 2018年8月2日 |
0.1.0 | 2018年7月29日 |
#2079 in 命令行工具
用于 extrablatt
30KB
429 代码行
archiveis-rs
提供对 Archive.is 捕获服务的简单访问。存档任何 URL 并获取相应的 archive.is 链接。
示例
ArchiveClient
使用 hyper
构建,并使用 futures 来捕获 archive.is 链接。
use archiveis::ArchiveClient;
use tokio::prelude::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = ArchiveClient::default();
let archived = client.capture("http://example.com/").await?;
println!("targeted url: {}", archived.target_url);
println!("url of archived site: {}", archived.archived_url);
println!("archive.is submit token: {}", archived.submit_token);
Ok(())
}
存档多个 URL
archive.is 使用临时令牌来验证存档请求。`ArchiveClient
` 的 `capture
函数首先通过 GET 请求获取新的提交令牌。令牌通常有效几分钟,即使在此期间 archive.is 切换到新的令牌,旧的令牌仍然有效。因此,如果我们需要存档多个链接,我们只需要获取一次令牌,然后直接使用 `capture_with_token
` 为每个 URL 调用捕获服务。`capture_all
返回每个捕获请求的结果的 Vec,因此每个单独的捕获请求都会执行,无论之前的请求是否成功。
use archiveis::ArchiveClient;
use tokio::prelude::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = ArchiveClient::default();
// the urls to capture
let urls = vec![
"http://example.com/",
"https://github.com/MattsSe/archiveis-rs",
"https://crates.io",
];
let (archived, failures) : (Vec<_>, Vec<_>) = client.capture_all(urls).await?.into_iter()
.partition(Result::is_ok);
let archived: Vec<_> = archived.into_iter().map(Result::unwrap).collect();
let failures: Vec<_> = failures.into_iter().map(Result::unwrap_err).collect();
if failures.is_empty() {
println!("all links successfully archived.");
} else {
for err in &failures {
if let archiveis::Error::MissingUrl(url) | archiveis::Error::ServerError(url) = err {
println!("Failed to archive url: {}", url);
}
}
}
Ok(())
}
命令行应用程序
使用 `archiveis
` 命令行应用程序存档链接
安装
cargo install archiveis --features cli
用法
SUBCOMMANDS:
file Archive all the links in the line separated text file
links Archive all links provided as arguments
file
和 links
子命令接受相同的标志和选项(除了它们的主要目标 = 链接或文件之外)
USAGE:
archiveis links [FLAGS] [OPTIONS] -i <links>...
FLAGS:
-a, --append if the output file already exists, append instead of overwriting the file
--archives-only save only the archive urls
-h, --help Prints help information
--ignore-failures continue anyway if after all retries some links are not successfully archived
-s, --silent do not print anything
-t, --text save output as line separated text instead of json
-V, --version Prints version information
OPTIONS:
-i <links>... all links to should be archived via archive.is
-o <output> save all archived elements
-r, --retries <retries> how many times failed archive attempts should be tried again [default: 0]
存档一组链接
archiveis links -i "http://example.com/" "https://github.com/MattsSe/archiveis-rs"
存档一组链接,并将结果安全地保存到 `archived.json
`,重试失败的尝试两次
archiveis links -i "http://example.com/" "https://github.com/MattsSe/archiveis-rs" -o archived.json --retries 2
存档文件 `links.txt
` 中的所有以行为分隔的链接,并将存档 URL 以行为分隔保存到 `archived.txt
`
archiveis file -i links.txt -o archived.txt --text --archives-only
默认情况下,如果所有重试后仍有失败的存档尝试,`archiveis
` 将终止并输出任何内容。要忽略失败,请添加 `--ignore-failures
` 标志以写入不包含失败输出的输出。
archiveis file -i links.txt -o archived.json --ignore-failures
许可协议
根据以下任一项许可
- Apache许可证,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 https://opensource.org/licenses/MIT)
依赖项
~4–17MB
~241K SLoC