【问题标题】:how to get the full tweet of the user timeline with twitter4j?如何使用 twitter4j 获取用户时间线的完整推文?
【发布时间】:2018-06-11 20:47:39
【问题描述】:

我想使用 java 库 twitter4j 从某些用户时间线获取推文,目前我有可以从用户时间线获取 ~ 3200 条推文的源代码,但我无法获取完整的推文。我在互联网上搜索了各种资源,但找不到解决问题的方法。任何人都可以帮助我,或者任何人都可以提供一种替代方法,通过 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,但我不知道如何使用它。如果你知道什么请告诉我。

【问题讨论】:

    标签: java twitter twitter4j


    【解决方案1】:

    你的配置应该是这样的:

    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
      .setOAuthConsumerKey("aaa")
      .setOAuthConsumerSecret("aaa")
      .setOAuthAccessToken("aaa")
      .setOAuthAccessTokenSecret("aaa")
      .setTweetModeExtended(true);
    

    解释的很好here

    【讨论】:

      【解决方案2】:

      Twitter API 将时间线历史限制为 3200 条推文。要获得更多信息,您需要使用(商业)高级或企业 API 来搜索特定用户的推文。

      【讨论】:

      • 谢谢安迪先生的回答,但我的问题是没有超过 3200 条推文。我的问题是我收到的每条推文都会被截断或不完整。如果推文的长度超过 140 个字符,我收到的推文将被截断。我找到了参考资料(见下面的链接),但我不知道如何使用它。如果你知道什么,请告诉我。链接:gist.github.com/nishemon/8618f0eb8cb78e6dcfe6217a7e7cb24b
      • 我明白了 - 这意味着您需要在 API 调用中添加 tweet_mode=extended 以获取完整长度的推文。我认为这是在 Twitter4J 4.0.6 的属性文件中实现的。响应中会有一个full_text 字段。
      • 这适用于 java 项目。但它不适用于带有 fxml 的 javafx。我是使用 javafx 和 fxml 的初学者,你知道 twitter4j 4.0.6 可以用于 javafx。谢谢@AndyPiper
      • 抱歉,我不熟悉这个组合。
      • 没关系,你的回答对我很有帮助,非常感谢。
      【解决方案3】:

      如果您正在流式传输推文

      拳头:你必须添加 .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());
                  }`
      

      它完全适合我。 照顾好自己:)

      【讨论】:

        【解决方案4】:

        如果您使用 twitter4j.properties 文件实现 twitter api 并获取截断的时间线文本值,只需在末尾添加以下属性。 tweetModeExtended=TRUE

        【讨论】:

          猜你喜欢
          • 2018-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多