可以通过JavaScript读取/ statuses / user_timeline吗?

时间:2012-09-18 15:34:18

标签: jquery twitter twitter-oauth

我之前使用过一些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,并且需要OAuth用于1.1 API,我一直试图弄清楚是否仍然可以以相同的方式获取推文数据。

只需将网址更改为:

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

结果为400 Bad Request响应但没有消息。

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

Twitter 1.1 API中是否仍然可以读取用户的时间表?

4 个答案:

答案 0 :(得分:5)

如果您查看Twitter Error Codes & Responses,状态代码400表示:

  

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

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

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

最好的办法是在服务器上设置代理 - 让服务器使用Oauth标头进行GET,并使用ajax从服务器获取推文。

答案 1 :(得分:4)

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

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

答案 2 :(得分:0)

我实际上只是将其作为其他几个问题的答案。很抱歉重复,但我认为这将为您节省大量时间:

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

祝你好运! :)

答案 3 :(得分:0)

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

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

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

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