【问题标题】:How to retrieve tweets of user and his/her followers under a certain hashtag using Twitter4j?如何使用 Twitter4j 在某个标签下检索用户及其关注者的推文?
【发布时间】:2015-11-20 16:51:53
【问题描述】:

实际上,我正在尝试构建一个 twitter4j 应用程序来创建一个小型 Twitter 网络。这是我的示例代码 sn-p:

//Monitoring hashtags
Query query = new Query("#anger"); 
query.setCount(100); //get 100 tweets
query.setSince("2010-01-01");
QueryResult result;  
try { 
     result = twitter.search(query);
     for (Status status : result.getTweets()) 
     {
	     if (status.getText() != null)
	     {
             // Getting followers list of a given user
             ArrayList<User> followers = getFollowers(status.getUser().getScreenName());
	          for (User user : followers) 
		  {
                    if (status.getUser().getScreenName().contains(user.getScreenName()))
		    {
                      System.out.println(status.getUser().getScreenName());
		    }
	          }				    		
	      }
      }
    } catch (TwitterException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		         }

我认为这段代码应该在“#anger”标签下打印用户关注者的existence(names)。但是,当我运行此代码时,它违反了 api 1.1 速率限制并出现异常(消息 - 超出速率限制,代码 - 88)。我该如何克服这个问题?

这里也是我的getFollowers()方法:

// Getting followers list of a given user
public static ArrayList<User> getFollowers (String usname)
{
  Twitter twitter = initTwitter();
  String username = usname;
  ArrayList<User> followers = new ArrayList<User>();
  long nextCursor = -1;
  do  {
    PagableResponseList<User> usersResponse;
    try 
    {
      usersResponse = twitter.getFollowersList(username, nextCursor);
	  nextCursor = usersResponse.getNextCursor();
	  followers.addAll(usersResponse);
    } 
	catch (TwitterException e) 
	{
	  e.printStackTrace();
	}	   
	  } while (nextCursor > 0);

return followers;	
}

【问题讨论】:

  • 可能来自getFollowers方法。可以发一下吗?
  • 我在@RamananR 的帖子中添加了 getFollowers() 方法。感谢您提供帮助。

标签: java twitter twitter4j


【解决方案1】:

调用 getFollowers() 的速率限制为:

Requests / 15-min window (user auth): 15
Requests / 15-min window (app auth): 30

https://dev.twitter.com/rest/reference/get/followers/list

由于您从 for (Status status : result.getTweets()) 调用 getFollowers() 的次数超过此值,因此您会收到速率限制错误。

在此处查看速率限制:

    for (Status status : result.getTweets()) 
     {
         if (status.getText() != null)
         {
             // Getting followers list of a given user
             ArrayList<User> followers = getFollowers(status.getUser().getScreenName());
             // Here, Check if you rate limit has been exceeded. 
             // If so, wait till limit is over and then continue
              .....
         }
     }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 2013-11-21
    • 2015-08-10
    • 2020-12-02
    相关资源
    最近更新 更多