余白

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

C#でTwitterアプリを作る 第4回 その他のAPIの使い方

第3回ではStreamingAPIの使い方について紹介しました。
今回はその他のよく使うAPIの使い方をまとめて紹介します。
なおソースコード中に登場するtokensstatusは前回までに紹介したTokensStatusです。

Statuses系

  • ツイートの取得
  • お気に入りへの追加
  • お気に入りからの削除
  • リツイートする
  • ツイートを削除する
/*
* Status
*/
//Show
Status showedStatus = tokens.Statuses.Show(id => status.ID);
//Favorite
Status favoritedStatus = tokens.Favorites.Create(id => status.ID);
//Unfavorite
Status unfavoritedStatus = tokens.Favorites.Destroy(id => status.ID);
//Retweet
Status retweetedStatus = tokens.Statuses.Retweet(id => status.ID);
//Destroy
Status destroyedStatus = tokens.Statuses.Destroy(id => status.ID);

Users系

  • ユーザーの取得
  • ユーザーの取得(複数)
  • ユーザーの検索
User user = status.User;
/*
* User
*/
//Show
User showedUser = tokens.Users.Show(id => user.ID);
//Lookup by screen_name
IEnumerable<User> lookedupUsers = tokens.Users.Lookup(screen_name => string.Join(",", new[] { "laco0416", "la0c" }));
//Search
IEnumerable<User> matchedUsers = tokens.Users.Search(q => "らこ");

Friendship系

  • フォローする ( user_idで / screen_nameで )
  • フォロー解除する
  • ブロックする
  • ブロック解除する
  • スパム報告する
/*
* Friendship
*/
//Follow
User followedUser1 = tokens.Friendships.Create(user_id => user.ID);
User followedUser2 = tokens.Friendships.Create(screen_name => user.ScreenName);
//Unfollow
User unfollowedUser = tokens.Friendships.Destroy(user_id => user.ID);
//Block
User blockedUser = tokens.Blocks.Create(user_id => user.ID);
//Unblock
User unblockedUser = tokens.Blocks.Destroy(user_id => user.ID);
//R4S
User reportedUser = tokens.Users.ReportSpam(user_id => user.ID);

Friend/Follower系

  • フォローしているユーザーのID一覧 ( Cursored<long>を使う方法 )
  • フォローしているユーザーのID一覧 ( IEnumerable<long>を使う方法
  • フォローされているユーザーのID一覧
/*
* Friends and Followers
*/
//Friend IDs (use Cursor<T>)
Cursored<long> friendIDs = tokens.Friends.IDs(user_id => tokens.UserID);
friendIDs = tokens.Friends.IDs(user_id => tokens.UserID, cursor => friendIDs.NextCursor); //next page
//Friend IDs (use IE<T>)
IEnumerable<long> eFriendIDs = tokens.Friends.EnumerateIDs(EnumerateMode.Next, user_id => tokens.UserID);
//Follower IDs
IEnumerable<long> eFollowerIDs = tokens.Followers.EnumerateIDs(EnumerateMode.Next, user_id => tokens.UserID);

CoreTweetにはCursoredという型があります。フォロー一覧やフォロワー一覧などの一回のリクエストですべてを返しきれないAPIについては、TwitterAPI側から次のリクエストを送る際に載せるパラメータnext_cursorを受け取ることができます。
Cursored<T>は次のリクエスト時にCursored<T>#NextCorsorcursorパラメータとして与えることで連続したデータを取得することが可能です。

しかし、CoreTweetではそのような面倒な方法を取らずとも、IEnumerable<T>で連続したデータをすべて取得することができます。それがEnumerate***系のメソッドです。
このメソッドは、第1引数でCursorのたどり方(次へ/前へ)を与えます。第2引数はパラメータを与えます。
1回目のリクエストで帰ってきたデータが全て列挙され、IE<T>の終端に到達すると、内部のEnumeratorが内部で次のCursored<T>を取得し、あたかもすべてのデータが一度で帰ってきているかのように振る舞うようになっています。
これがCoreTweetの強力なLINQ連携機能です。ぜひ使いましょう。

Search系

  • ツイートの検索
/*
* Search
*/
IEnumerable<Status> searchedStatus = tokens.Search.Tweets(q => "\"らこらこ\"");

以上の他にもほとんどすべてのAPIがCoreTweetには実装されています。(一部未実装のAPIがありますが現在開発中です)
基本的にTwitter公式のAPIドキュメントのパラメータに沿って引数を渡せばすべて動作しますので、CoreTweet独特の規則などに縛られることはありません。
ネタが尽きたので、CoreTweet紹介シリーズは今回は一旦終わりとします。みなさんもCoreTweet使ってみてください。
きっと今よりもっとC#LINQが好きになります。