如何使用 twitter4j 获取用户时间线的完整推文?
how to get the full tweet of the user timeline with twitter4j?
我想使用 java 库 twitter4j 从某些用户时间线获取推文,目前我有源代码可以从用户时间线获取约 3200 条推文,但我无法获取完整的推文。我在 Internet 上搜索了各种来源,但找不到解决问题的方法。任何人都可以帮助我,或者任何人都可以提供替代方案以通过 java 编程从用户时间轴获取完整的推文吗?
我的源代码:
public static void main(String[] args) throws SQLException {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey("aaa")
.setOAuthConsumerSecret("aaa")
.setOAuthAccessToken("aaa")
.setOAuthAccessTokenSecret("aaa");
TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = tf.getInstance();
int pageno = 1;
String user = "indtravel";
List statuses = new ArrayList();
while (true) {
try {
int size = statuses.size();
Paging page = new Paging(pageno++, 100);
statuses.addAll(twitter.getUserTimeline(user, page));
System.out.println("***********************************************");
System.out.println("Gathered " + twitter.getUserTimeline(user, page).size() + " tweets");
//get status dan user
for (Status status: twitter.getUserTimeline(user, page)) {
//System.out.println("*********Place Tweets :**************\npalce country :"+status.getPlace().getCountry()+"\nplace full name :"+status.getPlace().getFullName()+"\nplace name :"+status.getPlace().getName()+"\nplace id :"+status.getPlace().getId()+"\nplace tipe :"+status.getPlace().getPlaceType()+"\nplace addres :"+status.getPlace().getStreetAddress());
System.out.println("["+(no++)+".] "+"Status id : "+status.getId());
System.out.println("id user : "+status.getUser().getId());
System.out.println("Length status : "+status.getText().length());
System.out.println("@" + status.getUser().getScreenName() +" . "+status.getCreatedAt()+ " : "+status.getUser().getName()+"--------"+status.getText());
System.out.println("url :"+status.getUser().getURL());
System.out.println("Lang :"+status.getLang());
}
if (statuses.size() == size)
break;
}catch(TwitterException e) {
e.printStackTrace();
}
}
System.out.println("Total: "+statuses.size());
}
更新:
在@AndyPiper
给出的答案之后
我的问题是我收到的每条推文都会被截断或不完整。如果推文的长度超过 140 个字符,我收到的推文将被截断。我找到了参考 tweet_mode=extended,但我不知道如何使用它。如果你知道什么请告诉我。
Twitter API 将时间线历史记录限制为 3200 条推文。要获得更多,您需要使用(商业)高级版或企业版 APIs 来搜索特定用户的推文。
你的配置应该是这样的:
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey("aaa")
.setOAuthConsumerSecret("aaa")
.setOAuthAccessToken("aaa")
.setOAuthAccessTokenSecret("aaa")
.setTweetModeExtended(true);
解释的很好here
如果您使用 twitter4j.properties 文件实现 twitter api 并获取截断的时间轴文本值,只需在末尾添加以下 属性。
tweetModeExtended=TRUE
如果您正在流式传输推文
拳头:你必须添加.setTweetModeExtended(true);进入您的配置生成器
秒(这里是代码)
TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();
StatusListener listener = new StatusListener(){
public void onStatus(Status status) {
System.out.println("-------------------------------");
if(status.isRetweet()){
System.out.println(status.getRetweetedStatus().getText());
}
else{
System.out.println(status.getText());
}`
它完全适合我。
照顾好自己:)
我想使用 java 库 twitter4j 从某些用户时间线获取推文,目前我有源代码可以从用户时间线获取约 3200 条推文,但我无法获取完整的推文。我在 Internet 上搜索了各种来源,但找不到解决问题的方法。任何人都可以帮助我,或者任何人都可以提供替代方案以通过 java 编程从用户时间轴获取完整的推文吗?
我的源代码:
public static void main(String[] args) throws SQLException {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey("aaa")
.setOAuthConsumerSecret("aaa")
.setOAuthAccessToken("aaa")
.setOAuthAccessTokenSecret("aaa");
TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = tf.getInstance();
int pageno = 1;
String user = "indtravel";
List statuses = new ArrayList();
while (true) {
try {
int size = statuses.size();
Paging page = new Paging(pageno++, 100);
statuses.addAll(twitter.getUserTimeline(user, page));
System.out.println("***********************************************");
System.out.println("Gathered " + twitter.getUserTimeline(user, page).size() + " tweets");
//get status dan user
for (Status status: twitter.getUserTimeline(user, page)) {
//System.out.println("*********Place Tweets :**************\npalce country :"+status.getPlace().getCountry()+"\nplace full name :"+status.getPlace().getFullName()+"\nplace name :"+status.getPlace().getName()+"\nplace id :"+status.getPlace().getId()+"\nplace tipe :"+status.getPlace().getPlaceType()+"\nplace addres :"+status.getPlace().getStreetAddress());
System.out.println("["+(no++)+".] "+"Status id : "+status.getId());
System.out.println("id user : "+status.getUser().getId());
System.out.println("Length status : "+status.getText().length());
System.out.println("@" + status.getUser().getScreenName() +" . "+status.getCreatedAt()+ " : "+status.getUser().getName()+"--------"+status.getText());
System.out.println("url :"+status.getUser().getURL());
System.out.println("Lang :"+status.getLang());
}
if (statuses.size() == size)
break;
}catch(TwitterException e) {
e.printStackTrace();
}
}
System.out.println("Total: "+statuses.size());
}
更新: 在@AndyPiper
给出的答案之后我的问题是我收到的每条推文都会被截断或不完整。如果推文的长度超过 140 个字符,我收到的推文将被截断。我找到了参考 tweet_mode=extended,但我不知道如何使用它。如果你知道什么请告诉我。
Twitter API 将时间线历史记录限制为 3200 条推文。要获得更多,您需要使用(商业)高级版或企业版 APIs 来搜索特定用户的推文。
你的配置应该是这样的:
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey("aaa")
.setOAuthConsumerSecret("aaa")
.setOAuthAccessToken("aaa")
.setOAuthAccessTokenSecret("aaa")
.setTweetModeExtended(true);
解释的很好here
如果您使用 twitter4j.properties 文件实现 twitter api 并获取截断的时间轴文本值,只需在末尾添加以下 属性。 tweetModeExtended=TRUE
如果您正在流式传输推文
拳头:你必须添加.setTweetModeExtended(true);进入您的配置生成器
秒(这里是代码)
TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();
StatusListener listener = new StatusListener(){
public void onStatus(Status status) {
System.out.println("-------------------------------");
if(status.isRetweet()){
System.out.println(status.getRetweetedStatus().getText());
}
else{
System.out.println(status.getText());
}`
它完全适合我。 照顾好自己:)