Android 如何使用twitter4j获取所有twitter关注者的列表?
我一直在想,是否有办法访问所有twitter追随者列表 我们已尝试使用via twitter4j呼叫:Android 如何使用twitter4j获取所有twitter关注者的列表?,android,twitter,twitter4j,Android,Twitter,Twitter4j,我一直在想,是否有办法访问所有twitter追随者列表 我们已尝试使用via twitter4j呼叫: public List<User> getFriendList() { List<User> friendList = null; try { friendList = mTwitter.getFollowersList(mTwitter.getId(), -1); } catch (IllegalStateExceptio
public List<User> getFriendList() {
List<User> friendList = null;
try {
friendList = mTwitter.getFollowersList(mTwitter.getId(), -1);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (TwitterException e) {
e.printStackTrace();
}
return friendList;
}
public List getFriendList(){
List-friendList=null;
试一试{
friendList=mTwitter.getFollowersList(mTwitter.getId(),-1);
}捕获(非法状态){
e、 printStackTrace();
}捕获(twitter异常){
e、 printStackTrace();
}
返回好友列表;
}
但它只返回20个追随者的列表
我尝试过使用相同的方法,但它会导致一个速率限制异常,即不允许我们在很短的时间间隔内发出太多请求
我们有办法解决这个问题吗?就这样改变,试试看,这对我很有用
try {
Log.i("act twitter...........", "ModifiedCustomTabBarActivity.class");
// final JSONArray twitterFriendsIDsJsonArray = new JSONArray();
IDs ids = mTwitter.mTwitter.getFriendsIDs(-1);// ids
// for (long id : ids.getIDs()) {
do {
for (long id : ids.getIDs()) {
String ID = "followers ID #" + id;
String[] firstname = ID.split("#");
String first_Name = firstname[0];
String Id = firstname[1];
Log.i("split...........", first_Name + Id);
String Name = mTwitter.mTwitter.showUser(id).getName();
String screenname = mTwitter.mTwitter.showUser(id).getScreenName();
// Log.i("id.......", "followers ID #" + id);
// Log.i("Name..", mTwitter.mTwitter.showUser(id).getName());
// Log.i("Screen_Name...", mTwitter.mTwitter.showUser(id).getScreenName());
// Log.i("image...", mTwitter.mTwitter.showUser(id).getProfileImageURL());
}
} while (ids.hasNext());
} catch (Exception e) {
e.printStackTrace();
}
就这样改变,试试看,这对我有用
try {
Log.i("act twitter...........", "ModifiedCustomTabBarActivity.class");
// final JSONArray twitterFriendsIDsJsonArray = new JSONArray();
IDs ids = mTwitter.mTwitter.getFriendsIDs(-1);// ids
// for (long id : ids.getIDs()) {
do {
for (long id : ids.getIDs()) {
String ID = "followers ID #" + id;
String[] firstname = ID.split("#");
String first_Name = firstname[0];
String Id = firstname[1];
Log.i("split...........", first_Name + Id);
String Name = mTwitter.mTwitter.showUser(id).getName();
String screenname = mTwitter.mTwitter.showUser(id).getScreenName();
// Log.i("id.......", "followers ID #" + id);
// Log.i("Name..", mTwitter.mTwitter.showUser(id).getName());
// Log.i("Screen_Name...", mTwitter.mTwitter.showUser(id).getScreenName());
// Log.i("image...", mTwitter.mTwitter.showUser(id).getProfileImageURL());
}
} while (ids.hasNext());
} catch (Exception e) {
e.printStackTrace();
}
这是一个棘手的问题。
您应该指定是使用应用程序令牌还是每用户令牌,以及获取追随者ID的用户数
在应用程序令牌的情况下,您每15分钟只收到15个呼叫。每次呼叫最多可获取5000个followers\u id。这使您每15分钟最多有75K个追随者ID。
如果您获取关注者ID的任何用户拥有超过75K个关注者,您将立即获得rate\u limit错误。如果要为多个用户获取数据,则需要在代码中构建强大的速率限制处理,并且要非常耐心
这同样适用于朋友ID
我不必为一个给定的用户获取超过75K的追随者/朋友,但想想看,我不知道这是否还有可能。这是一个棘手的问题。
您应该指定是使用应用程序令牌还是每用户令牌,以及获取追随者ID的用户数
在应用程序令牌的情况下,您每15分钟只收到15个呼叫。每次呼叫最多可获取5000个followers\u id。这使您每15分钟最多有75K个追随者ID。
如果您获取关注者ID的任何用户拥有超过75K个关注者,您将立即获得rate\u limit错误。如果要为多个用户获取数据,则需要在代码中构建强大的速率限制处理,并且要非常耐心
这同样适用于朋友ID
我不必为一个给定的用户获取超过75K的追随者/朋友,但想想看,我不知道这是否可能了。试试这个
ConfigurationBuilder confbuilder=new ConfigurationBuilder();
confbuilder.setOAuthAccessToken(accessToken)
.setOAuthAccessTokenSecret(secretToken)
.setOAuthConsumerKey(TwitterOAuthActivity.CONSUMER_键)
.setOAuthConsumerCret(TwitterOAuthActivity.CONSUMER_SECRET);
Twitter=newtwitterfactory(confbuilder.build()).getInstance();
PagableResponseList跟随者列表;
ArrayList=新建ArrayList();
尝试
{
followersList=twitter.getFollowersList(屏幕名,光标);
for(int i=0;i
试试这个
ConfigurationBuilder confbuilder=new ConfigurationBuilder();
confbuilder.setOAuthAccessToken(accessToken)
.setOAuthAccessTokenSecret(secretToken)
.setOAuthConsumerKey(TwitterOAuthActivity.CONSUMER_键)
.setOAuthConsumerCret(TwitterOAuthActivity.CONSUMER_SECRET);
Twitter=newtwitterfactory(confbuilder.build()).getInstance();
PagableResponseList跟随者列表;
ArrayList=新建ArrayList();
尝试
{
followersList=twitter.getFollowersList(屏幕名,光标);
for(int i=0;i
您绝对应该使用getFollowersIDs
。如文档所述,这将返回id
对象的数组(列表)。请注意,它会导致列表一次分为5000个ID左右的页面。要开始分页,请提供值-1作为光标。来自API的响应将包括上一个\u游标和下一个\u游标,以允许来回分页
棘手的部分是处理光标。如果你能做到这一点,那么你就不会有只获得20个追随者的问题
对getFollowersIDs的第一次调用将需要给定一个-1的游标。对于后续调用,您需要通过获取下一个游标来更新游标值,就像在循环的while部分中所做的那样
long cursor =-1L;
IDs ids;
do {
ids = twitter.getFollowersIDs(cursor);
for(long userID : ids.getIDs()){
friendList.add(userID);
}
} while((cursor = ids.getNextCursor())!=0 );
这里有一个很好的参考:
现在,如果用户拥有超过75000名追随者,您将不得不等待(参见Vishal的答案)。
前15个电话将为您提供大约75000个ID。然后你必须睡15分钟。然后再打15个电话,以此类推,直到你得到所有的追随者。这可以使用一个简单的
线程来完成。在for
循环的外部使用sleep(以毫秒为单位的时间)
。您肯定应该使用getFollowersIDs
。正如文件所述,这是