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開発ネタ | このブログの読者になる | 更新情報をチェックする
2019年03月27日

[Android開発ネタ] FaceBookSDKを使用し、自分のプロフィール画像を取得する

前回に引き続き、ログインできていることが前提だけど、、、。

val request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken()) { jsonArray, graphResponse ->
// プロフィール取得結果からプロフィール画像を抽出
val photoUrl = graphResponse.jsonObject.optJSONObject("picture").optJSONObject("data").optString("url")
if (!TextUtils.isEmpty(photoUrl)) {
Picasso.with(this@SnsLoginActivity).load(photoUrl).error(R.drawable.no_image).into(profileImageView)
}
}
request.parameters = Bundle().apply {
putString("fields", "id,name,gender,picture.type(large)")
}
request.executeAsync()


リクエストのパラメータにpicture.type(large)を設定すると大きめの画像が取得できるらしい。
posted by すとれん at 11:31 | Comment(0) | Android開発ネタ | このブログの読者になる | 更新情報をチェックする
2019年03月26日

[Android開発ネタ] FaceBookSDKを使用し、友達一覧を取得する

user_friendsを付与してログインできている前提だけど、これで取得できる。
val request = GraphRequest.newMyFriendsRequest(AccessToken.getCurrentAccessToken()) { jsonArray, graphResponse ->
// [{"name":"Open Graph Test User","id":"105751970603771"},{"name":"ほげ","id":"102137614301857"}] ←こんな感じで返ってくる
Toast.makeText(this@SnsLoginActivity, "newMyFriendsRequest() jsonArray= $jsonArray ", Toast.LENGTH_SHORT).show()
}
request.executeAsync()



取得できるには出来る、、、。
ただ友達全量が返ってこない。


https://developers.facebook.com/docs/facebook-login/permissions#reference-user_friends
user_friends
利用者と同じくアプリを使用している友達のリストにアクセスできるようにします。これらの友達は、利用者オブジェクトの友達エッジで見つかります。このアクセス許可は一連のパートナーに制限されており、使用する場合は事前にFacebookによる承認を得る必要があります。


利用者と同じくアプリを使用している友達のリストにアクセスできるようにします。
要は同じアプリを使っている友達しか取得できないってこと。
Facebookの友達にアプリ使ってね!ってアプリの中から拡散できないってことですね(;´Д`)
昔は取れてたみたいだけど、この手のSNSってどんどん制限が厳しくなっていくね・・・。


余談。
友達に同じアプリ入れてもらって友達情報取得できるか試してみたら、公開していないアプリだからログインで弾かれたw
この手のテストはFacebookDeveloperConsoleでテストユーザーを追加して、そのテストユーザーでログインすれば出来るみたい。

4d945e72056279251f846bcc6cf9bdbc.png
posted by すとれん at 15:02 | Comment(0) | Android開発ネタ | このブログの読者になる | 更新情報をチェックする