My Forex News app (WP8) has been released. Yeay for that! Currently working on my next app. In the meantime, I am in the process of creating an API wrapper for Pocket/Read It Later for C#. Initially I implemented all the Oauth 2.0 manually using WebClient class, but figured out that was the easy part. As I need to GET data (Json) thru data, then I would need to implement Json serializer/deserializer. My initial thought is to use Newton Json, but then it would make more sense if I just leverage on RestSharp. Then I do not need to implement the Oauth process (although I have coded mine, going to scrap those) and let it manage the serialization/deserialization.

The lack of documentation of RestSharp is really annoying. I couldn’t find anything related to Oauth 2.0 implementation. But after trial and error these below code should work to get the request_token. And the rest of the process should be pretty trivial.

    private const string BaseUri = "https://getpocket.com";
    private const string ConsumerKey = "your-consumer-key-from-Pocket";

    private void Login_OnClick(object sender, RoutedEventArgs e)
    {
        var client = new RestClient(BaseUri);
        // Although the API specifies /v3/oauth/request, it gives out 406 Error if no .php extension
        // Request thru Fiddler works fine without the extension
        var request = new RestRequest("/v3/oauth/request.php", Method.POST);

        // Option 1: Use the SimpleAuthenticator
        client.Authenticator = new SimpleAuthenticator("consumer_key", ConsumerKey, "redirect_uri", "http://www.google.com");

        // Option 2: Use the application/json
        // This is the most flexible option. Mostly useful to POST data to server
        request.AddHeader("Host", "getpocket.com");
        request.AddHeader("Content-Type", "application/json; charset=UTF-8");
        request.AddHeader("X-Accept", "application/json");
        request.RequestFormat = DataFormat.Json;
        var jsonObj = new { consumer_key = ConsumerKey, redirect_uri = "http://www.google.com" };
        request.AddBody(jsonObj);

        // Option 3: Use application/x-www-url-encoded
        request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
        request.AddParameter("consumer_key", ConsumerKey);
        request.AddParameter("redirect_uri", "http://www.google.com");

        client.ExecuteAsync(request, response => Response.Text = response.ContentType + " " + response.Content);
    }

So just pick and choose whatever option you want to use. I would prefer Option 2 and 3. Option 1 is very simplistic but good enough to do the initial authentication process and the rest should be done by Option 2 and 3.