【问题标题】:Can /statuses/user_timeline still be read via JavaScript?/statuses/user_timeline 仍然可以通过 JavaScript 读取吗?
【发布时间】:2012-09-10 21:50:05
【问题描述】:

我之前使用过一些 jQuery 来阅读 twitter 上的推文:

$.ajax('https://api.twitter.com/1/statuses/user_timeline.json', {
    crossDomain: true,
    data: {
        screen_name: 'twitterapi',
        count: 5
    },
    dataType: 'jsonp'
}).done(function (tweets) {
    console.log(tweets);
});

由于 twitter 正在弃用他们的 1.0 API,并要求 1.1 API 使用 OAuth,我一直在试图弄清楚是否仍然可以以相同的方式获取推文数据。

只需将网址更改为:

https://api.twitter.com/1.1/statuses/user_timeline.json

导致400 Bad Request 响应没有消息。

我知道有一个 twitter 工具可以为请求创建 OAuth 签名,但我不确定如何将它与 JSONP 请求一起使用,甚至 如果 它可以与 JSONP 一起使用请求。

在 Twitter 1.1 API 中仍然可以读取用户的时间线吗?

【问题讨论】:

    标签: jquery twitter twitter-oauth


    【解决方案1】:

    如果你看一下 Twitter 的 Error Codes & Responses,状态码 400 的意思是:

    请求无效。随附的错误消息将解释原因。这是 1.0 版本限速期间将返回的状态码。在 API v1.1 中,未经身份验证的请求被视为无效,您将收到此响应。

    因此,虽然 400 代码过去表示您超出了速率限制,但现在它也会在请求未通过身份验证时返回。

    要对请求进行身份验证,您必须添加 Oauth Authorization 标头。有一些 libraries 可以帮助解决这个问题,但问题是要生成 Oauth 签名,您必须将应用程序的密钥(包括密钥)硬编码到客户端代码中,这将暴露它给最终用户(不是一个好主意)。

    您最好的选择是在您的服务器上设置一个代理 - 让服务器使用 Oauth 标头进行 GET,然后使用 ajax 从您的服务器获取推文。

    【讨论】:

      【解决方案2】:

      redhotvengeance 是正确的,从March 2013 开始,服务器端是您唯一安全的选择,除了我推荐的解决方案是设置一个 cronjob 并将结果缓存在某处。使用代理是快速点击Rate Limits 的好方法!

      例如,如果您计划使用 API 的 user_timeline 部分,则每 15 分钟的请求数限制为 15 个,因此如果您的页面每小时点击次数超过 60 次,您将把这 400 个错误换成429 errors!

      【讨论】:

      • 实际上,user_timeline 的速率限制为每 15 分钟间隔 180 个请求。但是,在一般情况下,是的 - 缓存绝对是您在几乎所有情况下都需要注意速率限制的事情。
      【解决方案3】:

      实际上,我只是将其发布为对其他几个问题的回答。抱歉重复了,但我认为这会为您节省很多时间:

      我刚刚更新了plugin 以使用 Twitter 1.1 API。不幸的是,根据 Twitter 的要求,您将不得不从服务器端代码执行实际请求。但是,您可以将响应传递给插件,它会处理其余的事情。我不知道您正在运行什么框架,但我已经添加了用于在 C# 中发出请求的示例代码,并将很快添加 PHP 的示例代码。

      祝你好运! :)

      【讨论】:

        【解决方案4】:

        here 所述,关于能够使用纯客户端 JS 获取用户时间线的方法:

        如果我们愿意,我们仍然可以解析他们的页面并使用纯客户端 JS 重新实现至少一些丢失的功能。

        我们需要的是:一个可以处理 HTTPS 页面的 CORS 代理(我唯一知道的是 YQL API)以及如何在其公共页面上检索信息的知识。记住这一点,我们可以从用户那里获取最近的 20 条推文,就像我在演示中所做的那样:http://jsbin.com/agejol/1(单击“在 JSBin 中编辑”以查看代码)

        附:我知道这可能违反了他们的政策,但我关心它就像他们放弃所有客户端 API 时关心我们一样。

        【讨论】:

        • 链接的帖子内容丰富。如果您可以将相关信息复制到此答案中,那就太好了。就目前而言,这应该是评论而不是答案。
        • 已编辑。感谢您的回复。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-11
        • 1970-01-01
        • 1970-01-01
        • 2012-07-11
        • 2016-07-22
        • 2019-12-14
        相关资源
        最近更新 更多