倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

むしろ Twitter4J で twitter を勉強してみる (10) : ListMethods インターフェース (I)

今回から数回はリストに関するメソッドが定義されている ListMethods インターフェースです(記事一覧)。 リストを作成して傾向が似たユーザーを登録しておくと、登録ユーザーのつぶやきだけを見ることができます。 フォローしているユーザー数が増えてくると必須の機能ですね。

ちなみに、リストに関するメソッドが定義されているインターフェースには

  • twitter4j.api.ListMethods インターフェース
  • twitter4j.api.ListMembersMethods インターフェース
  • twitter4j.api.ListSubscribersMethods インターフェース

の3つがあるようです。 ListMethods インターフェース以外のものもそのうちに。

ListMethods インターフェース


ListMethods インターフェースの定義はこんなの:

package twitter4j.api;

public interface ListMethods{

    // リストの CRUD
    UserList createUserList(String listName, boolean isPublicList, String description);
    UserList showUserList(int listId);
    UserList updateUserList(int listId, String newListName, boolean isPublicList, String newDescription);
    UserList destroyUserList(int listId);

    // ResponseList を返すメソッド
    ResponseList<UserList> getAllUserLists(long userId);
    ResponseList<UserList> getAllUserLists(String screenName);
    ResponseList<Status> getUserListStatuses(int listId, Paging paging);

    // PagableResponseList を返すメソッド
    PagableResponseList<UserList> getUserLists(long listOwnerUserId, long cursor);
    PagableResponseList<UserList> getUserLists(String listOwnerScreenName, long cursor);
    PagableResponseList<UserList> getUserListMemberships(String listMemberScreenName, long cursor);
    PagableResponseList<UserList> getUserListSubscriptions(String listOwnerScreenName, long cursor);
}

今回は「リストの CRUD」を見ていきます。

サンプル・コード


リストの CRUD として

  • リストの作成
  • リストの取得
  • リストの更新
  • リストの削除

を行う方法を見ていきます。 ユーザーリストを表す型は後で見る twitter4j.UserList インターフェースで、上記のメソッドは全てこのオブジェクトを返します:

@Grab('org.twitter4j:twitter4j-core:[2.2.4,)')

import twitter4j.*

def twitter = new TwitterFactory().getInstance()

// リストの作成
def silentSiren = twitter.createUserList('Silent siren', true, '')
int listId = silentSiren.id
println "$silentSiren.fullName : $silentSiren.description"

// リストの取得
assert twitter.showUserList(listId).name == 'Silent siren'

// リストの更新
def updated = twitter.updateUserList(listId, 'Silent Siren', true, '''Vo.&Gt. 吉田菫
Key.&Cho. 寒川綾奈
Ba.&Cho. 山内あいな
Dr. 梅村妃奈子''')
assert updated.id == listId
println "$updated.fullName : $updated.description"

assert updated.name == 'Silent Siren'
// assert twitter.showUserList(listId).name == 'Silent Siren' とすると
// アサーションが通るときと通らないときがある

// リストの削除
twitter.destroyUserList(listId)
  • createUserList メソッドで作成されたリストにはユーザーが登録されていません。 あらたにリストへユーザーを登録するには ListMembersMethods インターフェースに定義されているメソッドを使用します。 これは後日に。
  • 既にあるリストを更新した直後に取得や削除を行うと上手く動かない場合があるようです。 こういった場合は、更新が完了したかどうかを自分で確認するか、非同期 API を使うのがいいんじゃないかと思いますが・・・試してません。

処理のイメージ図


createUserList()

showUserList()
updateUserList()

destroyUserList()

twitter のサイト上で



「プロフィール」に加えて「ホーム」からも同様の手順でリストを閲覧することができます。

関連クラス


今回新たに出てきたクラスは

  • twitter4j.UserList インターフェース

です。

UserList インターフェース

UserList インターフェースは、そのまんまユーザーリストを表すクラスです。 型定義はこんなの:

package twitter4j;

public interface UserList extends java.lang.Comparable<UserList>, TwitterResponse, java.io.Serializable{ ... }

UserList も TwitterResponse のサブタイプです。 Java Bean としてのプロパティには、以下のようなものがあります。 ただし、全て読み取り専用なので getter メソッドだけしかありません:

プロパティ名 備考
following boolean 自分がフォローしているかどうか。 isFollowing() で取得
public boolean 公開されているかどうか。 isPublic() で取得
id int リストの ID
memberCount int 登録ユーザー数
subscriberCount int 購読者数
name String リスト名
fullName String リストのフルネーム
slug String スラグ*1
description String 説明
URI URI URI
user User リストを作成したユーザー

リストの ID は、ステータスやユーザーの ID と違って int 型です。


Twitter API ポケットリファレンス (POCKET REFERENCE)

Twitter API ポケットリファレンス (POCKET REFERENCE)

*1:「スラグ」っていまいち分からないけど、カテゴリ分けや検索キーワードに使う単語みたいなものかと。