Xamarin逆引きTips
Xamarin.FormsでTwitterクライアントを作成するには?
TwitterのAPIを扱えるライブラリであるCoreTweetを使用して、Twitterデータを検索するアプリを作成。CoreTweetの導入と、検索したテキストの表示までを紹介する。
1. Twitterデータを検索するアプリ
Twitter上のつぶやきなどを扱いたい場合は、同社が提供しているWeb APIを利用することになるが、そのためには、OAuth認証など、少し複雑な作業が必要になる。そのため、いくつかの複雑手順を隠ぺいして、簡単に扱えるようにした各種のライブラリが開発されている。CoreTweetは、そのようなライブラリの一つであり、C#からも使用できる。
今回は、このCoreTweetを使用して、Twitterデータを検索するアプリを2回に分けて紹介する。
第1回は、CoreTweetの導入と、つぶやきの本体のみをテキストで表示するところまで、そして、第2回は、ListViewコントロールの表示をカスタムセルにしてつぶやきのデータを見やすい形で表示する方法を紹介する*1。
- *1 なお本Tipsは、Windows上でVisual Studio 2013を使用してXamarin.Forms開発をすることを前提としている(※編集部注: Mac上のXamarin Studioでも同様の手順で、本稿の内容が実現できることは確認している)。使用しているXamarin.Formsのバージョンは、プロジェクト作成時に利用されている「1.3.1.6296」である。
なお、最終的な完成画面は、次のようになる。
【コラム1】CoreTweet
CoreTweetは、下記のリンク先で配布されているTwitter用のライブラリである。ほとんどのAPIでLINQが使用可能であり、また、async
/await
による非同期によるアクセスにも対応している。
なお、GitHubでコードが公開されているだけでなく、本記事で紹介しているようにNuGetライブラリからも簡単にインストールが可能である。
2. Xamarin.Formsプロジェクトを作成する
メニューバーの[ファイル]-[新規作成]-[プロジェクト]から表示したダイアログで、[テンプレート]-[Visual C#]-[Mobile Apps]-[Blank App (Xamarin.Forms Portable)]を選択し、名前を「TwitterClientSample」として[OK]ボタンを押す。
3. CoreTweetパッケージの追加
CoreTweetは、NuGetパッケージで簡単にインストールできる。Visual StudioでのNuGetパッケージのインストールは、メニューバーの[ツール]-[NuGet パッケージマネージャー]-[ソリューションの NuGet パッケージの管理]を選択して表示された[NuGet パッケージの管理]ダイアログから行う。検索欄に「CoreTweet」と入力すると、目的のパッケージを簡単に見つけることができる。
図3の[インストール]ボタンを押した後、続いて表示される[プロジェクトの選択]ダイアログでは、全てのプロジェクトにチェックを入れて[OK]ボタンを押す(図4)。なお、この時点で、依存関係からNewtonsoft.Jsonパッケージも同時にインストールされる。
4. 画面の作成
最初に、画面を作成するためApp.cs
ファイルを以下のように修正する。
using System.Collections.ObjectModel;
using Xamarin.Forms;
namespace TwitterClientSample {
public class App : Application {
public App() {
MainPage = new MyPage();
}
private class MyPage : ContentPage {
private readonly ObservableCollection<string> _tweets = new ObservableCollection<string>(); // <= 1
public MyPage() {
var entry = new Entry { // <= 2
HorizontalOptions = LayoutOptions.FillAndExpand,
Text = "Xamarin"
};
var button = new Button { // <= 3
WidthRequest = 80,
Text = "Search"
};
var listView = new ListView { // <= 4
ItemsSource = _tweets, // <= 5
};
Content = new StackLayout { // <= 6
Padding = new Thickness(0, Device.OnPlatform(20, 0, 0), 0, 0), // iOSのみ上余白
VerticalOptions = LayoutOptions.Fill,
Children = {
new StackLayout {
Padding = 5,
BackgroundColor = Color.Teal,
Orientation = StackOrientation.Horizontal, // 横に配置する
Children = { entry, button }
}, listView
}
};
}
}
}
}
|
2は、検索文字列を入力するためのEntry
コントロールであり、3は、検索を開始するButton
コントロールである。Tweetの内容を表示するには、ListView
コントロールを使用し(4)、それぞれを、StackLayout
で配置した(6)。
なお、ListView
コントロールのデータソース(5)として、string型のObservableCollection(ここでは、_tweets
としている)を定義している(1)。事後、取得したデータをこの_tweets
に詰め込むと、ListView
コントロールに表示される仕組みである。
このコードを実行すると次のような画面になる。
5. CoreTweetによるTwitter検索
CoreTweetを使用してTwitterを検索するため、App.cs
ファイルを以下のように修正する。
……省略……
namespace TwitterClientSample {
……省略……
private class MyPage : ContentPage {
public MyPage() {
……省略……
var button = new Button {
WidthRequest = 80,
Text = "Search"
};
button.Clicked += (s, a) => {
Refresh(entry.Text); // <-1
};
……省略……
}
async void Refresh(string keyword) { // <-2
const string ApiKey = "API_KEY"; // <-3
const string ApiSecret = "API_SECRET"; // <-4
const string AccessToke = "ACCESS_TOKEN"; // <-5
const string AccessTokeSecret = "ACCESS_TOKEN_SECRET"; // <-6
var tokens = CoreTweet.Tokens.Create(ApiKey, ApiSecret, AccessToke, AccessTokeSecret); // <-7
var result = await tokens.Search.TweetsAsync(count => 100, q => keyword); // <-8
_tweets.Clear();
foreach (var tweet in result) {
_tweets.Add(tweet.Text); // <-9
}
}
}
}
|
Twitterを検索して、ListView
コントロールのデータソースを初期化するファンクションとしてRefresh
メソッドを定義し(2)、Button
コントロールをクリックしたイベントで、これを呼び出す(1)。
CoreTweetを使用してTwitter検索を実施するには、最初にTokens
クラス(CoreTweet
名前空間)のインスタンスを生成する(ここでは、tokens
とした)。なお、この際にAPI_KEYなどの4つのキー(2345)が必要であるが、これらは、Twitterデベロッパーセンターの[Application Management]ページで取得する(コラム2参照)
tokens
が取得できると、Twitterを操作する各種のメソッドが利用可能になるが、そのうちの一つである、Search.TweetsAsync
メソッドで、指定した文字列でのTwitter検索ができる(8)。検索した結果は、SearchResult
型(CoreTweet
名前空間)のデータとして取得できるが、このデータはコレクション型となっているので、foreach
を使用して_tweets
に追加した(9)。
【コラム2】Twitterキーの取得方法
TwitterのAPIを利用するためには、アプリケーションの登録が必要である。新規にアプリケーションを登録するには、Twitterデベロッパーセンターの下部右端にある[TOOLS]-[Manage Your Apps]リンクをクリックして開き、次に表示されるページ上の[Create New App]ボタンから行う。
ボタンクリックにより表示される[Application Management]ページでアプリケーションを作成・登録することにより(※その手順の説明は割愛)、次の画面のように[Keys and Access Tokens]タブで[API Key]や[Access Token](※そのページ上で作成)の取得が可能である。
このコードを実行すると次のような画面になる。
6. まとめ
今回は、CoreTweetを使用した、Twitter検索するアプリ作成の第1回として、CoreTweetの導入と、検索したテキストの表示まで紹介した。
次回は、ListView
コントロールの表示を拡張し、最初に紹介したような、ユーザー名、登録日付、アイコンなどをレイアウトした画面の作成を行う。
※以下では、本稿の前後を合わせて5回分(第50回~第54回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
50. Xamarin.Formsでローカルデータベースを使用するには?
アプリを終了して再起動したときに、ユーザーデータを復活させたい場合、ローカルやクラウドにデータを保存することになる。その一つの方法として、SQLite.Netを使ってローカルDBに保存する方法を説明する。
51. MvvmCrossでカスタムコンバーターを作成するには?
MvvmCrossでのiOS/Androidアプリ開発において、バインディングする値を変換できるカスタムコンバーターの使い方を説明する。
52. 【現在、表示中】≫ Xamarin.FormsでTwitterクライアントを作成するには?
TwitterのAPIを扱えるライブラリであるCoreTweetを使用して、Twitterデータを検索するアプリを作成。CoreTweetの導入と、検索したテキストの表示までを紹介する。
53. MvvmCrossでWebBrowserプラグインを使用するには?
WebBrowserプラグインを追加・利用する例を通じて、MvvmCrossでのiOS/Androidアプリ開発におけるMvvmCrossプラグインの基本的な使い方を説明する。
54. コードを書く前に正規表現をテストするには?(.NET/Xamarin対応)
.NET/Monoの基本クラスライブラリを使って正規表現を書く場合、そのテストはどうする? Xamarin Studioの正規表現ツールキットを使って手軽に行う方法を紹介。