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”)に変更すれば取得できる。

