401 Auth错误检索推文

时间:2015-12-11 08:42:00

标签: twitter twitter4j

我有一个每天运行的应用程序,已经工作了几个月。它使用的是twitter4j v3.0.3。

几个星期前,它开始抛出常见的401异常:

401:Authentication credentials (https://dev.twitter.com/pages/auth) were missing or incorrect. Ensure that you have set valid consumer key/secret, access token/secret, and the system clock is in sync.
{"request":"\/1.1\/statuses\/user_timeline.json","error":"Not authorized."}

Relevant discussions can be found on the Internet at:
    http://www.google.co.jp/search?q=4be80492 or
    http://www.google.co.jp/search?q=0a6306df
TwitterException{exceptionCode=[4be80492-0a6306df], statusCode=401, message=null, code=-1, retryAfter=-1, rateLimitStatus=RateLimitStatusJSONImpl{remaining=112, limit=180, resetTimeInSeconds=1448156737, secondsUntilReset=428}, version=4.0.4}
    at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:164)
    at twitter4j.HttpClientBase.request(HttpClientBase.java:57)

我已更新到v4.0.4(编写本文时的最新版本)&确认了所有访问权限和客户端令牌的正确性。我还尝试创建一个全新的应用程序并使用这些令牌。我已经同步了我的系统时钟。一切都没有用。

我的来源:

val config = new ConfigurationBuilder()
  .setOAuthConsumerKey(conf.getString("twitter.api.key"))
  .setOAuthConsumerSecret(conf.getString("twitter.api.secret"))
  .setOAuthAccessToken(conf.getString("twitter.access.token"))
  .setOAuthAccessTokenSecret(conf.getString("twitter.access.secret"))
  .build()

val twitter = new TwitterFactory(config).getInstance

def statuses(handle: String, since: Long): Stream[Status] = {
  @tailrec
  def loop(page: Int, acc: Stream[Status]): Stream[Status] = {
    val paging = new Paging(page, since)
    val xs = twitter.getUserTimeline(handle, paging).iterator().asScala.toSeq
    val stream = Stream.concat(acc, xs.filterNot(_.getText.startsWith("@")).filterNot(_.getText.startsWith("RT ")).toStream)
    if (xs.size < 20) stream
    else loop(page + 1, stream)
  }
  loop(1, Stream.empty)
}

twitter.getUserTimeline失败。

为什么在代码,配置或我的Twitter帐户中没有任何变化时,这会失败?

我排除了钥匙和钥匙时钟同步。我还能看到什么?

整个项目可以在https://github.com/Synesso/tweet-mail进行测试(根据自述文件需要一些设置 - 但可能不需要smtp设置)。

1 个答案:

答案 0 :(得分:2)

(将我的评论转换为答案。)

为了安全地连接到Twitter,您需要一个cacert.pem

的最新版本

您可以在https://github.com/jublonet/codebird-php/blob/develop/src/cacert.pem找到 - 包含允许您连接到Twitter的最新证书。

您可以在https://dev.twitter.com/overview/api/ssl

找到Twitter证书的详细信息

根据您的操作系统和编程语言,您需要将文件放在可读的位置或在本地安装。