TwitterSDKにはフォロワー/フォローを取得するメソッドが用意されていないのでカスタムTwitterApiClientを作成すれば良いみたい。
通信部分はRetrofitを使っているらしい。
MyTwitterApiClient.kt
class MyTwitterApiClient(session: TwitterSession) : TwitterApiClient(session) { fun getTwitterFollowersService() = getService<TwitterFollowersService>(TwitterFollowersService::class.java) interface TwitterFollowersService { @GET("/1.1/followers/list.json") fun show(@Query("user_id") userId: Long?, @Query("screen_name") screenName: String, @Query("skip_status") skipStatus: Boolean?, @Query("include_user_entities") includeUserEntities: Boolean? = false, @Query("cursor") cursor: String? = null, @Query("count") count: Int? = 200): Call<Followers> } }
Followers.kt
class Followers { @SerializedName("users") val users: List<User>? = null @SerializedName("next_cursor") val nextCursor: String? = null @SerializedName("previous_cursor") val previousCursor: String? = null }
こんなメソッドを用意して使う
private fun getTwitterFollowers(users: MutableList<User>, cursor: String? = null, callBack: (MutableList<User>) -> Unit) { val session = TwitterCore.getInstance().sessionManager.activeSession val twitterClient = MyTwitterApiClient(session) twitterClient.getTwitterFollowersService().show(session.userId, session.userName, true, false, cursor) .enqueue(object : Callback<Followers>() { override fun success(result: Result<Followers>?) { Log.d("hoge", "getTwitterFollowers() success = ${result?.data?.toString()}") var nextCursor = "0" result?.data?.also { data -> nextCursor = data.nextCursor?.let { it } ?: "0" data.users?.also { resultUsers -> users += resultUsers } } if (nextCursor != "0") { getTwitterFollowers(users, nextCursor, callBack) } else { callBack.invoke(users) } } override fun failure(exception: TwitterException?) { Log.d("hoge", "getTwitterFollowers() failure = $exception") callBack.invoke(users) } }) }
↑のメソッドの呼び出し。
val list = mutableListOf() getTwitterFollowers(list) { users -> if (users.size == 0) { // なにか処理 return@getTwitterFollowers } // なにか処理 }
いろいろ雑なのは気にしちゃいけない。
これで一応フォロワーの全量が取れるはず。
ただフォロワーを取得するAPIが15分に付き15回しか叩け無いという制限があるので、このロジックだとMAX3000人のフォロワーしか取得できない。
まぁ、3000人もいる人はめったにいないはず、、、はず、、、、。
(Twitterのことあまりわかってないw)
フォロー側を取得したい場合は@GET(“/1.1/followers/list.json”)を@GET(“/1.1/friends/list.json”)に変更すれば取得できる。