余白

https://blog.lacolaco.net/ に移転しました

C#でTwitterアプリを作る 第2回 Timeline / Status

前回は認証の方法を紹介しました。

今回はタイムラインの取得とツイートの投稿を紹介します。

タイムラインの取得

CoreTweetの設計は、Twitter APIの設計と似せてあります。

実際のエンドポイントが/statuses/にあるAPIは、Tokens.Statusesプロパティからアクセスすることができるようになっているため、CoreTweetを初めて使う人でも簡単に欲しいメソッドを探してプログラミングできます。

ホームタイムラインを取得するには次のようにします

var home = tokens.Statuses.HomeTimeline();

これだけでIEnumerable<Status>型のホームタイムラインが取得できます。この簡潔さがCoreTweetです。 メンションも同様に書けます

var mentions = tokens.Statuses.MentionsTimeline();

ところで、/statuses/home_timelineなどほぼすべてのAPIには必須あるいはオプションのパラメータを指定することがありますが、それについては後ほど説明します

ツイートの投稿

CoreTweetでツイートを投稿するにはTokens.Statuses.Updateメソッドを利用します。/statuses/updateにはstatusパラメータが必須なので、メソッドの引数にパラメータの情報を与えなければいけません。
CoreTweetでは開発者の好みで使い分けられるように、3 4種類のパラメータ指定方法があります。
※匿名型を使った方法を追記しました

IDictionary<string, object>を渡す

一番冗長で、一番わかりやすいのがこの方法です。辞書のキーがパラメータ名、値がそのままパラメータ値になります。

var text = "status text";
tokens.Statuses.Update(new Dictionary<string, object>() { { "status", text } });
Expressionを使う (3/25追記)

CoreTweetらしく書くならこの方法だと私は思っていますが、最初は戸惑うかもしれません。 ラムダ式の変数名をパラメータ名、戻り値をパラメータ値とします。 この記述方法はコードを驚くほど簡潔にするのでオススメです。

tokens.Statuses.Update(status => text);
匿名型を使う

Expressionと同じく簡潔に書ける方法でこれもオススメです。匿名型のパラメータを利用します。

tokens.Statuses.Update(new { status = text });
TwitterParameterを用いる

先日のアップデートで実装された新しいパラメータ指定方法です。幾つもの場所で同じパラメータを渡すのにいちいち上記の方法を使うのは面倒だという人のために、パラメータを渡すためのインスタンスを作る方法が提供されています。 属性ベースの機能のため、既存のクラスにも簡単に組み込むことが出来ます

まず、パラメータとして渡したいインスタンスのクラスに[TwitterParameters]属性をつけます
次に、パラメータとして渡したいフィールドに、[TwitterParameter(name)]属性をつけます

[CoreTweet.TwitterParameters]
class StatusUpdateParams
{
    [CoreTweet.TwitterParameter("status")]
    public string Text { get; set; }
}

あとはこのインスタンスを引数で渡すだけです

tokens.Statuses.Update(new StatusUpdateParams() { Text = "status" });

辞書の生成が面倒だったり、式を渡すのに抵抗があるという人はぜひ使ってみてください

今回はここまで。次回はStreamingAPIを使う方法を紹介します。