1个不稳定版本
0.1.0 | 2021年2月8日 |
---|
#659 在 认证
63KB
1.5K SLoC
rust-pocket
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?;
所以你可以
- 使用
PocketAuthentication::new()
初始化认证 - 使用
auth.request()
生成OAuth访问请求URL - 让用户跟随URL并确认应用程序访问权限
- 调用
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,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT或http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确说明,否则您有意提交以供包含在作品中的任何贡献,如Apache-2.0许可证中定义,应如上双许可,不附加任何额外条款或条件。
依赖项
~11–22MB
~333K SLoC