#pocket #api-bindings #com #oauth #token #consumer #getpocket

other-pocket

为Pocket API (https://getpocket.com)提供异步绑定

1个不稳定版本

0.1.0 2021年2月8日

#659认证

MIT/Apache

63KB
1.5K SLoC

rust-pocket

Coverage Status

Pocket API 绑定 (http://getpocket.com)

API非常简单,实际上。最复杂的代码是授权。您需要消费者密钥和访问令牌才能使用该API。

消费者密钥可以通过在 我的应用 页面上创建应用程序来获得。访问令牌可以通过完成 OAuth认证工作流 来获得。

此实现中用一对方法实现了OAuth工作流

let auth = PocketAuthentication::new("YOUR-CONSUMER-KEY-HERE", "rustapi:finishauth");
let state = None;
let code = auth.request(state).await?;
println!("Follow auth URL to provide access and press enter when finished: {}", auth.authorize_url(&code));
let _ = std::io::stdin().read_line(&mut String::new());

let user = auth.authorize(&code, state).await?;

所以你可以

  1. 使用 PocketAuthentication::new() 初始化认证
  2. 使用 auth.request() 生成OAuth访问请求URL
  3. 让用户跟随URL并确认应用程序访问权限
  4. 调用 auth.authorize(),要么得到一个错误,要么得到刚刚授权的用户名和访问令牌。

如果您选择,您可以将该用户转换为 Pocket 实例。

let pocket = user.pocket();

我建议在获得访问令牌后保存它,这样您就不必在下一次重复此工作流程。访问令牌可以通过 user.access_token 字段获取。将其存储在某个地方,并使用它来构建一个 Pocket 实例

let pocket = Pocket::new("YOUR-CONSUMER-KEY-HERE", "YOUR-STORED-ACCESS-TOKEN");

Pocket 实例允许您向您的口袋中添加、修改和检索项目。

要添加项目,请使用 Pocket::add()Pocket::send() 方法

// Add with all meta-info provided (title, tags, tweet id)
let added_item = pocket.add(&PocketAddRequest::new(&url)
    .title("Example title")
    .tags(&["example-tag"])
    .tweet_id("example_tweet_id"))
    .await?;

// Add with one or more actions
let added_item = pocket.send(&PocketSendRequest { 
    actions: &[
        &PocketSendAction::Add {
            item_id: None,
            ref_id: None,
            tags: Some("example-tag".to_string()),
            time: None,
            title: Some("Example title".to_string()), 
            url: Url::parse("https://example.com").ok(), 
        }
    ]
}).await?;

要查询您的口袋,请使用 Pocket::filter()Pocket::get() 方法

let mut f = pocket.filter();
f.complete(); // complete data
f.archived(); // archived items only
f.videos();   // videos only
f.offset(10); // items 10-20
f.count(10);
f.sort_by_title(); // sorted by title
// There are more methods, see `PocketGetRequest` struct for details

let items = pocket.get(&f).await; // get items

要一次性修改一个或多个项目或标签,请使用 Pocket::send()

let item_id = 1583845180185;
let results = pocket.send(&PocketSendRequest {
    actions: &[
        &PocketSendAction::Archive { item_id, time: None },
        &PocketSendAction::TagsAdd { item_id, tags: "one,two".to_string(), time: None },
        &PocketSendAction::TagRename { old_tag: "one".to_string(), new_tag: "1".to_string(), time: None },
    ]
}).await?;

许可

许可为以下之一

由您选择。

贡献

除非您明确说明,否则您有意提交以供包含在作品中的任何贡献,如Apache-2.0许可证中定义,应如上双许可,不附加任何额外条款或条件。

依赖项

~11–22MB
~333K SLoC