Можно ли получить более 100 твитов с помощью API Twitter4j?
Если да, то кто-нибудь может указать способ сделать это?
Можно ли получить более 100 твитов?
Ответ 1
Вам нужно будет увидеть, что ваш код предоставляет пример кода, характерный для вашего случая, но вы можете сделать это через since_id
или max_id
.
Эта информация предназначена для API Twitter.
Чтобы получить предыдущие 100 твитов:
- найдите самый низкий идентификатор в наборе, который вы только что получили с помощью своего запроса.
- выполнить тот же запрос с опцией
max_id
, установленной на найденный вами идентификатор.
Чтобы получить следующие 100 твитов:
- найдите наивысший идентификатор в наборе, который вы только что получили с помощью вашего запроса.
- выполнить тот же запрос с опцией
since_id
, установленной на найденный вами идентификатор.
В Twitter4j ваш объект Query
имеет два поля, которые представляют указанные выше параметры API: sinceId
и maxId
.
Ответ 2
Вы не можете загрузить более 100 твитов за запрос, но я не знаю, зачем вам это нужно, вместо этого вы можете загружать все твиты в "Бесконечную страницу", загружая 10 элементов каждый раз, когда пользователь просматривает список.
например
Query query = new Query("stackoverflow");
query.setCount(10);// sets the number of tweets to return per page, up to a max of 100
QueryResult result = twitter.search(query);
теперь, если вы хотите загрузить следующую страницу простой простой
if(result.hasNext())//there is more pages to load
{
query = result.nextQuery();
result = twitter.search(query);
}
и т.д.
Ответ 3
Некоторое Java-код, который выполняет итерацию на более старые страницы, используя самый низкий идентификатор, может выглядеть так:
Query query = new Query("test");
query.setCount(100);
int searchResultCount;
long lowestTweetId = Long.MAX_VALUE;
do {
QueryResult queryResult = twitterInstance.search(query);
searchResultCount = queryResult.getTweets().size();
for (Status tweet : queryResult.getTweets()) {
// do whatever with the tweet
if (tweet.getId() < lowestTweetId) {
lowestTweetId = tweet.getId();
query.setMaxId(lowestTweetId);
}
}
} while (searchResultCount != 0 && searchResultCount % 100 == 0);
Ответ 4
Вот как получить ВСЕ твиты для пользователя (или, по крайней мере, до ~ 3200):
import java.util.*;
import twitter4j.*;
import twitter4j.conf.*;
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setOAuthConsumerKey("");
cb.setOAuthConsumerSecret("");
cb.setOAuthAccessToken("");
cb.setOAuthAccessTokenSecret("");
Twitter twitter = new TwitterFactory(cb.build()).getInstance();
int pageno = 1;
String user = "cnn";
List statuses = new ArrayList();
while (true) {
try {
int size = statuses.size();
Paging page = new Paging(pageno++, 100);
statuses.addAll(twitter.getUserTimeline(user, page));
if (statuses.size() == size)
break;
}
catch(TwitterException e) {
e.printStackTrace();
}
}
System.out.println("Total: "+statuses.size());
Ответ 5
Чтобы добавить к подходу Люка, Twitter4j действительно обеспечивает разбиение на страницы запросов. Вы можете попробовать получить более одного страницы для вашего запроса. Задайте результаты на странице и номер страницы.
Но я предлагаю сначала попробовать since_id
, а затем попробуйте разбиение на страницы.
Ответ 6
Для данного запроса можно извлечь более 100 твитов. Для быстрой демонстрации вы можете загрузить графическое приложение twitter для извлечения твитов, доступное по адресу http://preciselyconcise.com/apis_and_installations/tweets_extraction_from_twitter.php.
Извлекая результаты запроса со всех доступных страниц для этого запроса, вы сможете извлечь более 100 твитов, если они доступны в этом запросе. Я загрузил приложение GUI, доступное на этом веб-сайте, и я смог извлечь более 1000 твитов для запроса #happy.
Ответ 7
Когда вы получаете ответ, содержащий ваши первые 100 результатов, вы также получаете следующий идентификатор с ответом. Этот идентификатор можно использовать в качестве параметра запроса "next" = {идентификатор, который вы получили от предыдущего вызова} при повторном вызове, и он даст вам следующие 100 твитов.