#archive #capturing #links #website #url #service #future

bin+lib archiveis

使用 archive.is 捕获服务在线存档网站

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

MIT/Apache 协议

30KB
429 代码行

archiveis-rs

Build Status Crates.io Documentation

提供对 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

filelinks 子命令接受相同的标志和选项(除了它们的主要目标 = 链接或文件之外)

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

许可协议

根据以下任一项许可

依赖项

~4–17MB
~241K SLoC