private void pullTweets(Key key, Twitter twitter) { try { RateLimitStatus rateLimitStatus = twitter.getRateLimitStatus(); if (rateLimitStatus.getRemainingHits() == 0) return; double currentRate = (rateLimitStatus.getHourlyLimit() - rateLimitStatus.getRemainingHits()) / (3601 - rateLimitStatus.getSecondsUntilReset()); logger.info( "Current twitter refresh rate: {}/h, official refresh rate: {}", String.format("%1.1f", currentRate), rateLimitStatus.getHourlyLimit()); if (currentRate > rateLimitStatus.getHourlyLimit()) { logger.info("Skipped refreshing Twitter feeds to limit the refresh rate"); return; } ResponseList<Status> newFriendsTimeline = twitter.getHomeTimeline(); ResponseList<Status> newMentions = twitter.getMentions(); synchronized (this) { mergeStatuses(timeline.get(key), newFriendsTimeline); mergeStatuses(mentions.get(key), newMentions); } } catch (TwitterException e) { logger.warn("Twitter reported an error: " + e.getMessage(), e); } }
@Override public List<Tweet> getMentions() { /* * to avoid duplicates (we have to search and get mentions, * because mentions by themselves are broken / sometimes * don't update on a timely basis. */ Set<Tweet> result = new TreeSet<Tweet>(); // FIXME or 200 mentions = DOS try { List<Status> mentions = twitter.getMentions(); for (Status s : mentions) { Tweet t = new Tweet(s.getId(), s.getText(), s.getUser().getScreenName()); t.setInReplyToId(s.getInReplyToStatusId()); result.add(t); } // mentions should be fixed now? // Query q = new Query("@"+screenName); // // QueryResult r = twitter.search(q); // // for(twitter4j.Tweet t : r.getTweets()) { // //compute hashcodes like in mockimpl // Tweet tt = new Tweet(t.getId(), t.getText(), t.getFromUser()); // if(t.get){ // tt.setInReplyToId(t.getInReplyToStatusId())) // } // t. // result.add(tt); // } } catch (TwitterException e) { throw new ScriptusRuntimeException(e); } return new ArrayList<Tweet>(result); }
public ResponseList<Status> getMentions(Paging paging) throws TwitterException { return twitter.getMentions(paging); }