【问题标题】:Twitter - The URI requested is invalid or the resource requested, such as a user, does not exists.Twitter - 请求的 URI 无效或请求的资源(例如用户)不存在。
【发布时间】:2017-11-14 04:21:44
【问题描述】:

期望的行为:从 TXT 文件中列出的用户 ID 获取用户的推文

事先完成的工作/研究: 注意:在发布此错误消息之前,我已尝试查找此错误消息以及与我的代码中使用的类相关的任何内容。

注意:此外,我通过访问 twitter 并查找他们的用户名手动检查了用户,他们确实出现了。例如,这是其中一位用户,他们确实出现了:https://twitter.com/rendrarh 我已经对列表中的许多用户进行了此操作。

注意:这仅在手动输入用户时有效(使用此 Get tweets of a public twitter profile ),但在从文件中提取时无效

我正在使用 Twitter4j 获取用户的推文并收到以下错误:

TwitterException{exceptionCode=[7defbde2-0dc3a547], statusCode=404, message=Sorry, that page does not exist., code=34, retryAfter=-1, rateLimitStatus=RateLimitStatusJSONImpl{remaining=899, limit=900, resetTimeInSeconds=1510626518, secondsUntilReset=899}, version=4.0.4}
at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:164)
at twitter4j.HttpClientBase.request(HttpClientBase.java:57)
at twitter4j.HttpClientBase.get(HttpClientBase.java:75)
at twitter4j.TwitterImpl.get(TwitterImpl.java:1786)
at twitter4j.TwitterImpl.getUserTimeline(TwitterImpl.java:131)
at twitter4j.TwitterImpl.getUserTimeline(TwitterImpl.java:152)
at UserTweets.main(UserTweets.java:42)

第 42 行是:statuses.addAll(twitter.getUserTimeline(user));

这是我的代码:

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

public class UserTweets {       

    public static void main(String[] a) {

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

        Twitter twitter = new TwitterFactory(cb.build()).getInstance();

        String user;

        List statuses = new ArrayList();
        int userCount = 1;

        String fileName = "C:-----/spam-twitter-accounts.txt";
        File file = new File(fileName);
        Scanner input = new Scanner(file);
        List<String> list = new ArrayList<String>();



        while (userCount < 20 && input.hasNextLine()) {
          try {

            user =  list.add(input.nextLine());

            statuses.addAll(twitter.getUserTimeline(user));

            System.out.println(statuses.toString());
            if (statuses.size() == 20)
              break;
          }
          catch(TwitterException e) {

            e.printStackTrace();
          }
        }
    }

}

【问题讨论】:

  • 您使用的是哪个版本的 Twitter4J?另外,您能否回显user 行以查看您传递给getUserTimeline() 的内容?
  • 你的意思是像 System.out.println 吗?我刚刚添加了它,我得到了每个用户 ID,例如: user: 276458778 。看起来我有 4.0.4
  • Twitter4j Doc (twitter4j.org/javadoc/twitter4j/api/TimelinesResources.html) 说我可以使用 Long 或 String... 但 Long 是 userId 而 String 是 screenname .... 也许我不小心将它们转换为 String 但它看起来对于使用 userId 的屏幕名称 ..这可能导致错误?是的,这似乎已经摆脱了错误,感谢您帮助我以更好的方式思考!
  • 这确实也是我的一个原因。我将 userId 存储为字符串并调用应该将字符串作为参数的方法

标签: java list twitter java.util.scanner twitter4j


【解决方案1】:

需要将其更改为 Long,因为 txt 文件有数字:

while (userCount < 20 && input.hasNextLong()) {
      try {

        user =  input.nextLong();

【讨论】:

    猜你喜欢
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    相关资源
    最近更新 更多