以前にWindowsストアアプリ入門 vol73:TwitterRtでお手軽につぶやくでTwitterRtを紹介しました。
TwitterRtは機能が少ない分、ソースコードが読みやすくOAuthの仕組みが理解しやすいライブラリでした。
今回はほぼ完成されたライブラリのLINQ to Twitterを紹介します。
LINQ to Twitterは文字通りLINQを使ってTwitterのデータを扱うことができるライブラリです。
こんな感じに・・・
var timelineResponse =
(from tweet in twitterCtx.Status
where tweet.Type == StatusType.Home
select tweet)
.ToList();
Tweets =
(from tweet in timelineResponse
select new Tweet
{
Name = tweet.User.Name,
Text = tweet.Text,
ImageUrl = tweet.User.ProfileImageUrl
})
.ToList();
今回は認証までを紹介しようと思います。
まずはLINQ to TwitterページのDOWNLOADリンクからファイルをダウンロードします。
ダウンロードしたファイルを解凍します。
winrt45というフォルダにWindowsストアアプリケーション用のライブラリLinqToTwitterRT.dllが入っています。
プロジェクトの参照を追加します。
今回はWebViewコントロールにTwitterの認証ページを表示し、PINコードを取得、PINコードを入力することで認証を行います。
XAMLコードにはWebViewコントロールと、PINコード入力用の TextBox、そして認証用のボタンを配置します。
<Page
x:Class="LinqToTwitterSample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:LinqToTwitterSample"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<WebView x:Name="webView" HorizontalAlignment="Left" Height="540" Margin="49,122,0,0" VerticalAlignment="Top" Width="790"/>
<TextBox x:Name="pinText" HorizontalAlignment="Left" Margin="49,706,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="391"/>
<Button x:Name="authButton" Content="認証" HorizontalAlignment="Left" Margin="460,700,0,0" VerticalAlignment="Top" Click="authButton_Click"/>
<TextBlock HorizontalAlignment="Left" Margin="49,679,0,0" TextWrapping="Wrap" Text="2.PINを取得後テキストボックスに入力して認証ボタンを押してください" VerticalAlignment="Top"/>
<TextBlock HorizontalAlignment="Left" Margin="49,90,0,0" TextWrapping="Wrap" Text="1.Twitterアカウントでログインしてください" VerticalAlignment="Top"/>
</Grid>
</Page>
C#コードは以下、
using LinqToTwitter;
using LinqToTwitterSample.Common;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Core;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// 空白ページのアイテム テンプレートについては、http://go.microsoft.com/fwlink/?LinkId=234238 を参照してください
namespace LinqToTwitterSample
{
/// <summary>
/// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
/// </summary>
public sealed partial class MainPage : Page
{
PinAuthorizer auth;
public MainPage()
{
this.InitializeComponent();
}
/// <summary>
/// このページがフレームに表示されるときに呼び出されます。
/// </summary>
/// <param name="e">このページにどのように到達したかを説明するイベント データ。Parameter
/// プロパティは、通常、ページを構成するために使用します。</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
auth = new PinAuthorizer
{
Credentials = new InMemoryCredentials
{
ConsumerKey = "{ConsumerKey}",
ConsumerSecret = "{ConsumerSecret}"
},
UseCompression = true,
GoToTwitterAuthorization = async pageLink =>
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() => webView.Navigate(new Uri(pageLink, UriKind.Absolute)))
};
auth.BeginAuthorize(async resp =>
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
switch (resp.Status)
{
case TwitterErrorStatus.Success:
break;
case TwitterErrorStatus.RequestProcessingException:
case TwitterErrorStatus.TwitterApiError:
new MessageDialog(resp.Error.ToString(), resp.Message).ShowAsync();
break;
}
}));
}
private void authButton_Click(object sender, RoutedEventArgs e)
{
auth.CompleteAuthorize(this.pinText.Text,
completeResp => Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
switch (completeResp.Status)
{
case TwitterErrorStatus.Success:
SuspensionManager.SessionState["Authorizer"] = auth;
new MessageDialog("認証成功").ShowAsync();
break;
case TwitterErrorStatus.RequestProcessingException:
case TwitterErrorStatus.TwitterApiError:
new MessageDialog(completeResp.Error.ToString(), completeResp.Message).ShowAsync();
break;
}
}));
}
}
}
ConsumerKeyとConsumerSecretはTwitterの開発者ページにてアプリケーションを登録することで取得でるものを入力してください。
アプリケーションを起動するといきなり認証画面が表示されます。
TwitterのログインIDとパスワードを入力するとPINが取得できます。
取得したPINをテキストボックスに入力して認証ボタンをクリックします。
認証に成功すればメッセージダイアログが表示されます。
以上で認証まで完了しました。
Please give us your valuable comment