【问题标题】:Get tweets of a public twitter profile获取公开 Twitter 个人资料的推文
【发布时间】:2011-02-25 22:55:29
【问题描述】:

我在 Twitter 上有一个用户名列表,其个人资料是公开的。我希望从他们形成个人资料之日起获得他们发布的“所有推文”。我检查了GitHub 上的 Twitter4J 示例。
根据 Twitter API 文档,仅返回 20 条最近的推文。无论如何我可以执行我的任务吗?

【问题讨论】:

标签: java api twitter twitter4j


【解决方案1】:

要使用 Twitter4J 获取用户的所有帖子,您必须在多个页面上提出请求..

以下代码基于示例on GitHub

Twitter unauthenticatedTwitter = new TwitterFactory().getInstance();
//First param of Paging() is the page number, second is the number per page (this is capped around 200 I think.
Paging paging = new Paging(1, 100);
List<Status> statuses = unauthenticatedTwitter.getUserTimeline("google",paging);

只需循环并不断抓取新页面,直到没有新帖子为止。

【讨论】:

  • 泰勒,感谢您的回复!但是,当我运行与上述相同的代码时,我收到此错误 "[Thu Jun 03 01:29:51 IST 2010]Using class twitter4j.internal.logging.StdOutLoggerFactory as logging factory。[Thu Jun 03 01: 29:51 IST 2010]使用 twitter4j.internal.http.HttpClientImpl 作为 HttpClient 实现。失败:连接被拒绝:连接“我可以使用 getPublicTimeLine() 函数获取公共时间线。
  • 我尝试使用我的个人 ID 的身份验证 Twitter 实例进行相同的操作,顺便说一句。 PS:很抱歉以这种未格式化的格式发布错误。我已经尝试了所有 HTML 标签,包括 和 <blockquote> 标签。</blockquote>
  • 您不应该进行身份验证来执行此操作,您不能使用上面的代码来获取 google 或您自己的页面的公共时间线吗?你用什么来分页?您可以尝试仅将“用户名”作为 getUserTimeline() 的唯一参数
  • 泰勒,感谢您的回复。我今天可以检索推文!该 API 的输出非常不稳定,因为自过去两天以来我一直在测试相同的内容。无论如何,下一个问题是代码仅适用于分页参数 1,100。我尝试了不同的公共用户名,但徒劳无功。如网站上所述,API 限制为 3200 {16,200},每个请求的计数为 200。但是,我无法使用该功能。
【解决方案2】:

以下是如何获取用户的所有推文(或至少多达 ~3200 条):

import java.util.*;
import twitter4j.*;
import twitter4j.conf.*;

public static void main(String[] a) {

    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setOAuthConsumerKey("YOUR KEYS HERE");
    cb.setOAuthConsumerSecret("YOUR KEYS HERE");
    cb.setOAuthAccessToken("YOUR KEYS HERE");
    cb.setOAuthAccessTokenSecret("YOUR KEYS HERE");

    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());
}

【讨论】:

  • 嗨@rednoyz 我尝试了代码,但它总是给我错误的身份验证错误。 400:请求无效。随附的错误消息将解释原因。这是版本 1.0 速率限制期间将返回的状态代码 (dev.twitter.com/pages/rate-limiting)。在 API v1.1 中,未经身份验证的请求被视为无效,您将收到此响应。消息 - 错误的身份验证数据。代码 - 215
  • @viren 您是否设置了身份验证密钥?
  • 您需要设置您的身份验证密钥 -- 在 ConfigurationBuilder 中填写值
  • 您只需要消费者密钥,而不需要访问令牌。小细节。
  • 我收到一个错误,“缺少身份验证凭据”,除非我也使用访问令牌。
【解决方案3】:

如果您通读Twitter's Documentation,如果您在 API 请求中指定“count=200”,则一次最多可以检索 200 条推文。

您也可以使用“page=x”来获得不同的分页结果;您可以继续这样做,直到您检索到用户发布的每条推文。

我不确定您的 Java 应用程序将如何创建它,但您的请求可能如下所示:

http://api.twitter.com/1/statuses/user_timeline.xml?id=SomeUsername&count=200&page=1
http://api.twitter.com/1/statuses/user_timeline.xml?id=SomeUsername&count=200&page=2
http://api.twitter.com/1/statuses/user_timeline.xml?id=SomeUsername&count=200&page=3

...等等

请记住,这些请求是有速率限制的,因此您需要小心不要超过限制。

【讨论】:

    猜你喜欢
    • 2014-03-03
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2019-09-14
    相关资源
    最近更新 更多