Java 使用twitter4j提取特定标签的tweet
我可以使用下面的搜索方法提取特定标签的tweetJava 使用twitter4j提取特定标签的tweet,java,twitter,twitter4j,tweets,Java,Twitter,Twitter4j,Tweets,我可以使用下面的搜索方法提取特定标签的tweet twitter4j.Twitter twitter = TwitterFactory.getSingleton(); Query query = new Query("ipl7"); QueryResult result = twitter.search(query); for (Status status : result.getTweets()) { S
twitter4j.Twitter twitter = TwitterFactory.getSingleton();
Query query = new Query("ipl7");
QueryResult result = twitter.search(query);
for (Status status : result.getTweets()) {
System.out.println("@" + status.getUser().getScreenName() + " : " + status.getText() + " : " + status.getGeoLocation());
}
但是,使用上述方法,我得到的tweet数量非常有限。我应该更改什么以获取特定标签的所有推文?使用以下方法:
使用以下方法:
您可以使用流式API通过一组给定的关键字获取最近的推文。在你的情况下,你只有一个关键字,这是一个标签,对吗?我发布了一个简短的示例代码,用流式API通过关键字搜索推文。您可以出于不同的目的使用流媒体和搜索API。大多数情况下,您可以在有限的时间内使用搜索API搜索主机推文。它允许您给出日期间隔。但是,您可以使用Streamin API将最近发布的推文捕获为包含您给出的关键字的推文流 下面是straming代码的示例:
private static void GetTweetStreamForKeywords()
{
TwitterStream twitterStream = new TwitterStreamFactory(config).getInstance();
StatusListener statusListener = new StatusListener() {
@Override
public void onStatus(Status status) {
// The main section that you get the tweet. You can access it by status object.
// You can save it in a database table.
}
@Override
public void onDeletionNotice(StatusDeletionNotice sdn) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onTrackLimitationNotice(int i) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onScrubGeo(long l, long l1) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onStallWarning(StallWarning sw) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onException(Exception ex) {
logWriter.WriteErrorLog(ex, "onException()");
}
};
FilterQuery fq = new FilterQuery();
String keywords[] = {"sport", "politics", "health"};
fq.track(keywords);
twitterStream.addListener(statusListener);
twitterStream.filter(fq);
}
您可以使用流式API通过一组给定的关键字获取最近的推文。在你的情况下,你只有一个关键字,这是一个标签,对吗?我发布了一个简短的示例代码,用流式API通过关键字搜索推文。您可以出于不同的目的使用流媒体和搜索API。大多数情况下,您可以在有限的时间内使用搜索API来搜索主机推特。它允许您给出日期间隔。但是,您可以使用Streamin API将最近发布的推文捕获为包含您给出的关键字的推文流 下面是straming代码的示例:
private static void GetTweetStreamForKeywords()
{
TwitterStream twitterStream = new TwitterStreamFactory(config).getInstance();
StatusListener statusListener = new StatusListener() {
@Override
public void onStatus(Status status) {
// The main section that you get the tweet. You can access it by status object.
// You can save it in a database table.
}
@Override
public void onDeletionNotice(StatusDeletionNotice sdn) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onTrackLimitationNotice(int i) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onScrubGeo(long l, long l1) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onStallWarning(StallWarning sw) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void onException(Exception ex) {
logWriter.WriteErrorLog(ex, "onException()");
}
};
FilterQuery fq = new FilterQuery();
String keywords[] = {"sport", "politics", "health"};
fq.track(keywords);
twitterStream.addListener(statusListener);
twitterStream.filter(fq);
}
packettwitter;
导入java.io.PrintWriter;
导入java.util.ArrayList;
导入java.util.List;
导入twitter4j.GeoLocation;
导入twitter4j.Query;
导入twitter4j.QueryResult;
导入twitter4j.状态;
导入twitter4j.Twitter;
导入twitter4j.TwitterException;
导入twitter4j.TwitterFactory;
导入twitter4j.conf.ConfigurationBuilder;
公共类推文
{
公共静态void main(字符串[]args)引发异常
{
ConfigurationBuilder cb=新的ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey(“”)
.SetOAuthConsumerCret(“”)
.setOAuthAccessToken(“”)
.setOAuthAccessTokenSecret(“”);
Twitter=newtwitterfactory(cb.build()).getInstance();
查询=新查询(“世界”);
int numberOfTweets=5000;
long lastID=long.MAX_值;
ArrayList tweets=新建ArrayList();
while(tweets.size()100)
query.setCount(100);
其他的
setCount(numberOfTweets-tweets.size());
试一试{
QueryResult result=twitter.search(查询);
addAll(result.getTweets());
System.out.println(“收集的”+tweets.size()+“tweets”+“\n”);
对于(状态t:tweets)
if(t.getId()
包推特;
导入java.io.PrintWriter;
导入java.util.ArrayList;
导入java.util.List;
导入twitter4j.GeoLocation;
导入twitter4j.Query;
导入twitter4j.QueryResult;
导入twitter4j.状态;
导入twitter4j.Twitter;
导入twitter4j.TwitterException;
导入twitter4j.TwitterFactory;
导入twitter4j.conf.ConfigurationBuilder;
公共类推文
{
公共静态void main(字符串[]args)引发异常
{
ConfigurationBuilder cb=新的ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey(“”)
.SetOAuthConsumerCret(“”)
.setOAuthAccessToken(“”)
.setOAuthAccessTokenSecret(“”);
Twitter=newtwitterfactory(cb.build()).getInstance();
查询=新查询(“世界”);
int numberOfTweets=5000;
long lastID=long.MAX_值;
ArrayList tweets=新建ArrayList();
while(tweets.size()100)
query.setCount(100);
其他的
setCount(numberOfTweets-tweets.size());
试一试{
QueryResult result=twitter.search(查询);
addAll(result.getTweets());
System.out.println(“收集的”+tweets.size()+“tweets”+“\n”);
对于(状态t:tweets)
if(t.getId()
如果我使用方法maxId(long-maxId)或sinceId(long-sinceId),我可以获得更多tweet吗?我不需要将#ipl7
作为查询传递吗?如果我使用方法maxId(long-maxId)或sinceId(long-sinceId),我可以获得更多tweet吗?我不需要将#ipl7
作为查询传递吗?可能的重复
package twiter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import twitter4j.GeoLocation;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.conf.ConfigurationBuilder;
public class tweets
{
public static void main(String[] args) throws Exception
{
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey("")
.setOAuthConsumerSecret("")
.setOAuthAccessToken("")
.setOAuthAccessTokenSecret("");
Twitter twitter = new TwitterFactory(cb.build()).getInstance();
Query query = new Query("#world");
int numberOfTweets = 5000;
long lastID = Long.MAX_VALUE;
ArrayList<Status> tweets = new ArrayList<Status>();
while (tweets.size () < numberOfTweets) {
if (numberOfTweets - tweets.size() > 100)
query.setCount(100);
else
query.setCount(numberOfTweets - tweets.size());
try {
QueryResult result = twitter.search(query);
tweets.addAll(result.getTweets());
System.out.println("Gathered " + tweets.size() + " tweets"+"\n");
for (Status t: tweets)
if(t.getId() < lastID)
lastID = t.getId();
}
catch (TwitterException te) {
System.out.println("Couldn't connect: " + te);
};
query.setMaxId(lastID-1);
}
for (int i = 0; i < tweets.size(); i++) {
Status t = (Status) tweets.get(i);
// GeoLocation loc = t.getGeoLocation();
String user = t.getUser().getScreenName();
String msg = t.getText();
//String time = "";
//if (loc!=null) {
//Double lat = t.getGeoLocation().getLatitude();
//Double lon = t.getGeoLocation().getLongitude();*/
System.out. println(i + " USER: " + user + " wrote: " + msg + "\n");
}
//else
//System.out.println(i + " USER: " + user + " wrote: " + msg+"\n");
}
}