2019年03月28日

[Android開発ネタ] TwitterSDKを使用し、フォロワー/フォローを取得する

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

posted by すとれん at 11:53 | Comment(0) | Android開発ネタ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: