がりらぼ

WindowsRuntimeの応援ブログ

WindowsPhoneからTwitterAPIに認証する

この記事はTwitterAPI1.1を利用します。

C#からTwitterAPIを叩くには、neueccさんが制作された、AsyncOAuthというライブラリを利用します。http://neue.cc/2013/02/27_398.html

このライブラリはC#の全プラットフォームに対応し、非常に簡単に利用できるライブラリです。サンプルコードもわかりやすいです。

まず、TwitterDevelopers(https://dev.twitter.com/)にアクセスし、自分のアプリケーションを作ります。

作成できたら、ApplicationTypeの欄の、Accessラジオボタンを、Read,Write and Access direct messagesにチェックします。

次に、ConsumerKeyとConsumerSecretが必要になるので、DetailsタブのCosumerKeyとConsumerKeyをメモ帳などにコピーしておきます。

画像の塗りつぶしてある部分が必要となります。

CallBackURLはNoneでないとPinコードが発行されないので何も入力しないでください。

次にWindowsPhoneのプロジェクトを作ります。

プロジェクトができたら、

[プロジェクト]→[Nugetパッケージ管理]

右上の検索ボックスにAsyncOAuthと入力し、インストールします。

次に、また検索ボックスに、Json.Netと入力し、Json.Netもインストールします。

Json.NetはTwitterから取得したレスポンスがJson形式なので、解析するのに必要となります。

では、WindowsPhoneのページに、WebBrowserとテキストボックス、ボタンを配置しましょう。

まず、最初に、AsyncOAuthを使用する前準備として、App.xaml.csのAppメソッドの先頭に、以下のおまじないを入力します。

[csharp]

OAuthUtility.ComputeHash = (key, buffer) => { using (var hmac = new HMACSHA1(key)) { { return hmac.ComputeHash(buffer); } } };

[/csharp]

グローバル変数として、以下のフィールドを作ります。

[csharp]

RequestToken token;

OAuthAuthorizer authorizer;

string consumerKey = "";

string consumerSecret = "";

[/csharp]

ConsumerKeyとConsumerSecretの部分には先ほど取得したキーを正確に入力しましょう。

ページロードメソッドで、インスタンスの初期化と、pinコードを取得するためにWebBrowserをナビゲートします。

[csharp]

authorizer = new OAuthAuthorizer(consumerKey,consumerSecret);

var token =await authorizer.GetRequestToken("https://api.twitter.com/oauth/request_token");

this.token = token.Token;

var pinRequestUrl = authorizer.BuildAuthorizeUrl("https://api.twitter.com/oauth/authorize",token.Token);

this.webBrowser.Navigate(new Uri(pinRequestUrl));

[/csharp]

ボタンクリックメソッド内で、ユーザーがテキストボックスに入力したpinコードを取得し、AccessTokenを取得します。

[csharp]

var accessTokenResponse = await authorizer.GetAccessToken("https://api.twitter.com/oauth/access_token",token,textBox.Text);

var client = OAuthUtility.CreateOAuthClient(consumerKey,consumerSecret,accessTokenResponse.Token);

var json = await client.GetStringAsync("http://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=garicchi&count=" + 10 + "&page=" + 1);

var jobj = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JContainer>(json);

String str = "";

foreach(var s in jobj.ToArray()){

str+=s["text"]+"n";

}

MessageBox.Show(str);

[/csharp]

コードがうてたら、デバッグしましょう。WebBrowserで自分のTwitterのユーザー名とパスワードを入力し、連携アプリの認証を押すと、pinコードが出てくるので、それをテキストボックに入力し、ボタンを押します。

自分のツイートが取得できました。