倭マン's BLOG

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

むしろ Twitter4J で twitter を勉強してみる (17) : FriendshipMethods インターフェース (II)

今回は FriendshipMethods インターフェースに定義されている、関係を返すメソッドを見ていきます (記事一覧)。

FriendshipMethods インターフェース


今回見ていくメソッドは、関係を返すメソッド。 ここでの関係は、具体的には Relationship オブジェクトもしくは Friendship オブジェクト(の ResponseList)を指してます:

package twitter4j.api;

public interface FriendshipMethods{
    ...
    // Friendship を取得・更新するメソッド
    Relationship showFriendship(long sourceId, long targetId);
    Relationship showFriendship(String sourceScreenName, String targetScreenName);
    Relationship updateFriendship(long userId, boolean enableDeviceNotification, boolean retweets);
    Relationship updateFriendship(String screenName, boolean enableDeviceNotification, boolean retweets);

    // Friendship を検索するメソッド
    ResponseList<Friendship> lookupFriendships(long[] ids);
    ResponseList<Friendship> lookupFriendships(String[] screenNames);
}
  • Relationship, Friendship クラスについては後述。
  • showFriendship(), updateFriendship() メソッドは、前回見た createFriendship(), destroyFriendship() と合わせて Friendship の CRUD をなしていると思うと分かりやすいかも。

サンプル・コード

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

import twitter4j.*

def twitter = new TwitterFactory().getInstance()

def drive = [
    'kurosawamirei',
    'hayashiyuzuka'
] as String[]

// 関係を読み取る(Relationship オブジェクトを返す)
def relation = twitter.showFriendship(drive[0], drive[1])    // 'kurosawamirei' → 'hayashiyuzuka' の関係
//def relation = twitter.showFriendship(*drive)
println "source screen name : $relation.sourceUserScreenName"    // 'kurosawamirei'
println "target screen name : $relation.targetUserScreenName"    // 'hayashiyuzuka'

// 関係を更新する
twitter.updateFriendship(drive[0], false, true)

// 複数のユーザーとの関係を読み取る(Friendship オブジェクトの ResponseList を返す)
twitter.lookupFriendships(drive).each{ Friendship f ->
    println "screen name : $f.screenName"
    println "followed by : $f.followedBy"
}
  • showFriendship() メソッドは第1引数のユーザーから第2引数のユーザーへの関係を返します(一方向)。
  • updateFriendship() メソッドは自分から第1引数で指定したユーザーへの関係を更新します。
    • 第2引数の boolean 値は相手ユーザーからの通知を可能にするかどうかを返します(POST friendships/update)。
    • 第3引数の boolean 値は相手ユーザーからのリツイートを可能にするかどうかを設定します(POST friendships/update)。
  • lookupFriendship() メソッドは自分から、指定した各ユーザーへの関係を返します。

処理のイメージ図


twitter のサイト上では

関連クラス


今回新しく出てきた型は

  • twitter4j.Relationship インターフェース
  • twitter4j.Friendship インターフェース

です。 どちらも同じような型ですが、Relationship インターフェースは TwitterResponse インターフェースを拡張しています。

Relationship インターフェース

Relationship はそれ自体が TwitterResponse を拡張しているので、単独で応答として返される前提で、後述の Friendship に比べて情報が多く含まれています。 いくつか、他のメソッドと同じ振る舞いをする別名メソッドが定義されています。

package twitter4j;

public interface Relationship extends TwitterResponse, java.io.Serializable{

    long getSourceUserId();
    String getSourceUserScreenName();
    boolean isSourceFollowingTarget();
    boolean isSourceFollowedByTarget();
    boolean isSourceNotificationsEnabled();
    boolean isSourceBlockingTarget();

    long getTargetUserId();
    String getTargetUserScreenName();
    boolean isTargetFollowingSource();    // = isSourceFollowedByTarget()
    boolean isTargetFollowedBySource();    // = isSourceFollowingSource()
}

Friendship インターフェース

Friendship オブジェクトは(lookupFriendship() メソッドによって)複数のオブジェクトがまとめて返される前提で、Relationship クラスに比べて情報量は控えめです。 まぁ、言うほど変わんないですけど。

package twitter4j;

public interface Friendship extends java.io.Serializable{

    long getId();
    String getName();
    String getScreenName();
    boolean isFollowedBy();
    boolean isFollowing();
}

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

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