Windows Phone 8にTwitter OAuthを組み込む
Windows Phone 8でTwitter OAuthを行う方法です。PINコードをユーザーに入力してもらって認証します。
Twitter Developerですでにアプリケーションを登録していることを前提として進めます。登録したアプリケーションのCallback URLは空にしておいてください。
まずは認証用のライブラリをインストールします。@neueccさんの作られたAsyncOAuthを使います。
NuGetパッケージ管理から検索窓にAsyncOAuthと入力すれば出てきます。インストールボタンをクリックしてインストールします。
次に、MainPage.xamlのContentPanelを以下のように書き換えます。
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <StackPanel> <phone:WebBrowser x:Name="browser" Height="460" /> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" VerticalAlignment="Center" FontSize="32">PIN</TextBlock> <TextBox Grid.Column="1" x:Name="pinCode"></TextBox> <Button Grid.Column="2" HorizontalAlignment="Right" Click="Button_Click">認証</Button> </Grid> </StackPanel> </Grid>
その次はMainPage.xaml.csを次のように変更します。
usingを追加します。
using AsyncOAuth; using System.Security.Cryptography;
最後にメインとなるソースコードです。MainPage.xaml.csに追記します。consumerKeyとconsumerSecretはTwitterに登録した際のAPI keyとAPI secretになります。
static string consumerKey = "API key"; static string consumerSecret = "API secret"; private RequestToken _requestToken = null; static MainPage() { OAuthUtility.ComputeHash = (key, buffer) => { using (var hmac = new HMACSHA1(key)) { return hmac.ComputeHash(buffer); } }; } // コンストラクター public MainPage() { InitializeComponent(); Loaded += MainPage_Loaded; } async void MainPage_Loaded(object sender, RoutedEventArgs e) { try { var authorizer = new OAuthAuthorizer(consumerKey, consumerSecret); var tokenResponse = await authorizer.GetRequestToken("https://api.twitter.com/oauth/request_token"); _requestToken = tokenResponse.Token; var pinRequestUrl = authorizer.BuildAuthorizeUrl("https://api.twitter.com/oauth/authorize", _requestToken); browser.Navigate(new Uri(pinRequestUrl, UriKind.RelativeOrAbsolute)); } catch(Exception ex) { MessageBox.Show(ex.Message); } } private async void Button_Click(object sender, RoutedEventArgs e) { try { var authorizer = new OAuthAuthorizer(consumerKey, consumerSecret); var tokenResponse = await authorizer.GetAccessToken("https://api.twitter.com/oauth/access_token", _requestToken, pinCode.Text); // ここでAccessTokenを保存する var accessToken = tokenResponse.Token; // 後はAccessTokenを使ってTwitterのAPIを呼び出すだけ // 試しに自分の情報を取得してみます var client = OAuthUtility.CreateOAuthClient(consumerKey, consumerSecret, accessToken); var json = await client.GetStringAsync("https://api.twitter.com/1.1/account/verify_credentials.json"); MessageBox.Show(json); } catch(Exception ex) { MessageBox.Show(ex.Message); } }
ここで実行してみましょう。もし例外が発生するようでしたらエミュレータの時刻を合わせてみましょう。時間がずれていると失敗します。うまくいけば以下のような画面が表示されます。
この画面からログインを行いPINコードを入力して認証ボタンを押すと、以下のようなメッセージが取得できていることが確認できます。
アクセストークンを保存しておけば後はTwitterのAPIをたたくだけで利用できます。プロジェクトをアップしましたので、好きなようにダウンロードしてください。
TwitterOAuth.zip