4 个版本

0.1.6 2023 年 7 月 10 日
0.0.3 2023 年 7 月 8 日
0.0.2 2023 年 7 月 8 日
0.0.1 2023 年 7 月 7 日

#3 in #hacker-news

MIT/Apache

38KB
585 行代码(不含注释)

Newswrap

crates.io CI

Hacker News 的 Rust API 绑定。

use newswrap::client::HackerNewsClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Build your client at the start of your application process
    let client = HackerNewsClient::new();

    // Call various endpoints with your client instance
    let first_item = client.get_item(69).await?;
    dbg!(&first_item);

    // Determine what the item type is
    let item_type = first_item.get_item_type();
    dbg!(item_type);

    // Check if the item is job
    assert!(first_item.is_comment());

    // Retrieve user information
    let user = client.get_user("joeymckenzie").await;
    dbg!(user);

    Ok(())
}

什么是 newswrap?

Newswrap 为 Hacker News API 提供了一个便捷的 Rust 接口。 Hacker News 是一个面向软件开发人员和科技专业人士的社区驱动的网站。虽然 Hacker News 向公众提供了 API,但没有官方的语言库来连接到它。本项目旨在提供一个易于使用的基于 Rust 的客户端,以优雅的方式从 Hacker News 获取数据,并支持一流的异步功能。

使用 newswrap

要在 Rust 应用程序中开始使用 newswrap,只需添加此包,

cargo add newswrap

并在应用程序流程开始时启动客户端

use newswrap::{client::HackerNewsClient, errors::HackerNewsClientError};

#[tokio::main]
async fn main() -> Result<(), HackerNewsClientError> {
    // Build your client at the start of your application process
    let client = HackerNewsClient::new();

    // Check for the latest item ID
    let latest_id = client.realtime.get_latest_item_id().await?;

    // Get the latest stories IDs
    let story = client.items.get_story(69).await?;
    println!("{}... nice.", story.title);

    // Retrieve user profiles and information
    let my_profile = client.users.get_user("joeymckenzie").await?;

    if let Some(about_section) = my_profile.about {
        println!("{}", about_section);
    }

    Ok(())
}

在内部,newswrap 依赖于 https://docs.rs/reqwest/latest/reqwest/ 通过 HTTP 从 Hacker News API 收集信息。建议在应用程序流程开始时创建单个实例。 示例 可用于使用客户端在二进制应用程序和 Web 应用程序(使用 axum)中。

依赖关系

~4–19MB
~259K SLoC