#oauth #api-bindings #com

pocket

Simple bindings for Pocket API (https://getpocket.com)

10 releases

Uses old Rust 2015

0.1.3 Apr 17, 2016
0.1.2 Jun 28, 2015
0.1.1 May 17, 2015
0.0.6 Feb 4, 2015
0.0.4 Jan 24, 2015

#24 in #o-auth

33 downloads per month

MIT/Apache

38KB
842 lines

rust-pocket

Pocket API bindings (http://getpocket.com), WIP

API is very easy, actually. The most complex code is for authorization. You will need a consumer_key and an access_token in order to use the API.

A consumer_key can be obtained by creating an app at the My Applications page. An access_token is obtained by walking through OAuth authentication workflow.

The OAuth workflow is implemented with a pair of methods in this implementation:

extern crate pocket;

use pocket::Pocket;

fn authenticate() {
  let mut pocket = Pocket::new("YOUR-CONSUMER-KEY-HERE", None);
  let url = pocket.get_auth_url().unwrap();
  println!("Follow the link to authorize the app: {}", url);
  // Here we should wait until user follows the URL and confirm app access
  
  let username = pocket.authorize().unwrap;
}

So you 1) generate OAuth access request URL with pocket.get_auth_url(), 2) let user follow the URL and confirm app access, 3) call pocket.authorize() and either get an error, or username of user just authorized.

I recommend storing the access token after you get it, so you don't have to repeat this workflow again next time. The access token can be obtained with pocket.access_token() method. Store it somewhere and use to construct Pocket object:

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

Now you have two methods (for now) to get and add new URLs to your pocket.

To add an item, use Pocket::add() or Pocket::push() method:

// Quick add by URL only
let added_item = pocket.push("http://example.com").unwrap();

// Add with all meta-info provided (title, tags, tweet id)
let added_item = pocket.push("http://example.com", Some("Example title"), Some("example-tag"), Some("example_tweet_id")).unwrap();

To query your pocket, use Pocket::filter() method:

let items = {
    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
    f.get(); // get items
};

// There are other methods, see `PocketGetRequest` struct for details
...

The API bindings will be improved with new methods and parameters. Keep tuned!

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~5.5MB
~120K SLoC