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

时间:2016-07-23 04:30:44

标签: android rest twitter twitter-fabric

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

我确实关注了twitter rest api文档,但无法找到问题的答案。我通过他们的其他API成功拨打电话,我正在获得成功"回电话,但我不知道如何解析我的回复。他们的文档一直在说"它返回" ID"的集合。所以我假设我可以将响应解析为ID列表(List),但这会导致gson解析错误。我可以成功地将其解析为JSONOBject但最终为空。

以下是相关代码:

exchange_rates = {'EUR': 1.10, 'GBP': 1.31, ...} 

# create a long set of case conditions as a string
er_case_statement = "\n".join("mytable.currency = \"{0}\" then {1}".format(k,v) for (k,v) in exchange_rates.iteritems())

# build the sql with these case statements
sql = """select <some stuff>, 
  case {0}
  end as exchange_rate,
  other columns
  from tables etc
  where etc
""".format(er_case_statement)

import com.twitter.sdk.android.core.models.User;

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

然后我发送/处理来自:

的请求
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);
}

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

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

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

2 个答案:

答案 0 :(得分:2)

我找到了答案。我只需要将响应从Retrofit解析为Response类。然后将其转换为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;
}

答案 1 :(得分:0)

尝试使用我在某些项目中使用的代码来实现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());
       }
    }
}

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

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