#api #anime #found #authorized #com #crunchyroll #crunchyroll-rs

crunchyroll-rs-internal

crunchyroll-rs的内部crate。请勿使用。

45个版本 (11个破坏性更新)

0.12.0 2024年7月13日
0.11.3 2024年5月22日
0.9.0 2024年3月24日
0.8.1 2023年12月19日
0.1.0 2022年9月27日

#4 in #authorized

每月 39 次下载
用于 2 crate

MIT/Apache

6KB
131

crunchyroll-rs

A Rust library for the undocumented Crunchyroll api.

crates.io Docs CI License Discord

我们与Crunchyroll LLC及其任何子公司或关联公司没有任何关联,也不维护、授权、赞助或正式与之相关。官方Crunchyroll网站可在https://crunchyroll.com/找到。

文档

文档可在docs.rs找到。

示例

为了开始工作,您需要在Cargo.toml中将此crate和tokio作为依赖项添加

[dependencies]
crunchyroll-rs = "0.12"
tokio = { version = "1", features = ["full"] }

以下代码打印给定URL背后的剧集数据

use crunchyroll_rs::{Crunchyroll, MediaCollection};
use crunchyroll_rs::parse::UrlType;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Log in to Crunchyroll with your email and password.
    // Support for username login was dropped by Crunchyroll on December 6th, 2023
    let crunchyroll = Crunchyroll::builder()
        .login_with_credentials("<email>", "<password>")
        .await?;

    let url = crunchyroll_rs::parse_url("https://www.crunchyroll.com/watch/GRDQPM1ZY/alone-and-lonesome").expect("url is not valid");
    if let UrlType::EpisodeOrMovie(media_id) = url {
        if let MediaCollection::Episode(episode) = crunchyroll.media_collection_from_id(media_id).await? {
            println!(
                "Url is episode {} ({}) of {} season {}",
                episode.episode_number,
                episode.title,
                episode.series_title,
                episode.season_number
            )
        }
    } else {
        panic!("Url is not a episode")
    }

    Ok(())
}

更多示例可在examples/目录中找到。

API覆盖范围

Crunchyroll定期更新其API,但未提供任何文档。由于我们没有持续监控API,因此无法立即说明何时添加了新的端点或在已实现和实现的端点上发生了变化(至少通过__test-strict功能部分覆盖)。如果您发现未实现或已更改的端点,请随时打开一个新的问题并告诉我们,或者分叉库并自行实现。

Cloudflare

Crunchyroll使用Cloudflare机器人保护来检测请求是否由人类发起。显然,这个crate会自动发起请求,因此Cloudflare有时会阻止请求。该crate使用error::CrunchyrollError::Block枚举字段捕获这些错误。阻止情况取决于多种因素,如您的位置。如果发生此类阻止,您可以尝试创建一个自定义的reqwest::Client,该客户端具有绕过此检查所需配置,例如其他用户代理或TLS后端(注意,reqwest目前除了rustls作为TLS后端外,还支持native-tls,这在Linux上与openssl兼容,但在Windows上阻止更为激进)。配置可能因因素而异,因此没有100%正确的做法。

许可证

此项目可选择以下许可证之一进行授权

依赖项

~0.6-1.1MB
~25K SLoC