无法通过 Twitter 获取 Twitter 用户的关注者数量 API

Can't get twitter user's follower count via Twitter API

我很难获得 Twitter 用户的关注者数量。

我确实关注了 twitter rest api 文档,但找不到我的问题的答案。我通过他们的休息 API 成功拨打了电话,我收到了 "Success" 回电,但我不知道要将我的回复解析成什么。他们的文档一直在说 "it returns a "collection of ids”。所以我假设我可以将响应解析为一个 ids 列表(List),但这会导致 gson 解析错误。我可以成功地将它解析为一个 JSONOBject,但最终是空的。

相关代码如下:

package com.boomer.omer.kollabstr.backend.twitteroauth;

进口com.twitter.sdk.android.core.models.User;

import org.json.JSONObject;

import java.util.List;

import retrofit.Callback;
import retrofit.http.GET;
import retrofit.http.Query;


    public interface TwitterGetFollowerCountApiClient {

         @GET("/1.1/followers/ids.json")
        void getFollowerCount(@Query("user_id")Long id,
                          @Query("screen_name")String screenname,
                          @Query("cursor")Long cursor,
                          @Query("stringify_ids")Boolean sids,
                          @Query("count")Long count,
                          Callback<JSONObject> users);
}

然后我send/handle请求来自:

 private void createSocialMediaObject(final TwitterSession twitterSession){
    getKollabstrTwitterApiClient().getFollowerCountService().
            getFollowerCount(twitterSession.getUserId(),
                    null,
                    null,
                    null,
                    null,
                    new Callback<JSONObject>() {
                @Override
                public void success(Result<JSONObject> result) {
                    SocialMedia twitter = new SocialMedia();
                    twitter.setUsername(twitterSession.getUserName());
                    twitter.setUserid(Long.toString(twitterSession.getUserId()));
                    twitter.setSocialMediaType(SocialMediaType.TWITTER);
                    //twitter.setImpact(result.data.size());
                   // Log.d(TAG,"FOLLOWERS:" + Integer.toString(result.data.size()));
                    Users user = SessionManager.getInstance().getCurrentUser();
                    user.getProfile().getSocialMediaAccounts().add(twitter);
                    SessionManager.getInstance().updateUser(user);
                    Log.d("FOLLOWER",Integer.toString(result.data.length()));
                }

                @Override
                public void failure(TwitterException exception) {
                    Log.d(TAG,"FOLLOWER ERROR:" + exception.toString());

                }
            });



}

我在这里遵循了他们的文档:https://dev.twitter.com/rest/reference/get/followers/ids

我想获得一个 id 列表,这样我就可以得到它的大小,这应该是根据他们的页面的关注者数量。但是即使我可以获得成功的回调(我假设这表明查询成功完成)我也无法弄清楚响应应该被解析成什么。

感谢任何帮助。请不要简单地将我介绍给其他图书馆来完成这项工作。

试试这个我在我的一些项目中使用的代码来使 Twitter 集成工作:

Twitter4j 设置

下载 twitter4j 库(jar 文件),将以下内容添加到您的 libs 文件夹中,然后从 libs 文件夹中右键单击它们以 Add as Library。这意味着您的 build.gradle 文件将如下所示:

dependencies{

   ...
   compile files('libs/twitter4j-async-4.0.4.jar')
   compile files('libs/twitter4j-core-4.0.4.jar')
}

现在,您可以使用此库连接 Twitter。

假设:您已经在 Twitter 上的开发者帐户上创建了一个 Twitter 应用程序。

接下来,无论您希望如何执行请求(AsyncTask、Service 等):

//this sample code searches for twitter accounts

//rest of your code  here

@Override
protected ResponseList<User> doInBackground(String... params) {

    String location = "kansas city";

    try {
        //mTwitter is your Twitter instance!
        return mTwitter.searchUsers(location, 20);
    }catch (TwitterException e){
        e.getMessage();
    }
    return null;
}

@Override
protected void onPostExecute(ResponseList<User> response){
    if (response != null){
        progress.dismiss();

        if (response.size() == 0 ){
            //you got no results back; zero
        }else{

            //you can loop through the response list

            User u = response.get(0);

            Log.i("USERCOUNT", "THE COUNT: " + u.getFollowersCount());
       }
    }
}

因此,您可以使用此库快速获得结果;

希望这对您有所帮助,如果您需要进一步的帮助,请告诉我!

我找到了答案。我只需要从 Retrofit 将响应解析为 Response class。然后将其转换为 JSON 对象。

 public JSONObject responseToJSON(Response response){
    BufferedReader reader = null;
    StringBuilder sb = new StringBuilder();
    JSONObject jsonObject = null;
    try {

        reader = new BufferedReader(new InputStreamReader(response.getBody().in()));

        String line;

        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }


    String result = sb.toString();

    try {jsonObject=new JSONObject(result);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return  jsonObject;
}