6

我之前使用过一些 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 中是否仍然可以读取用户的时间线?

4

4 回答 4

5

如果您查看 Twitter 的错误代码和响应,状态代码400意味着:

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

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

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

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

于 2012-09-18T16:33:08.957 回答
4

redhotvengeance 是正确的,截至 2013 年 3 月,服务器端是您唯一安全的选择,除了我推荐的解决方案是设置一个 cronjob 并将结果缓存在某处。使用代理是快速达到速率限制的好方法!

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

于 2012-10-10T23:21:28.317 回答
0

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

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

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

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

于 2013-07-03T09:39:35.790 回答
0

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

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

祝你好运!:)

于 2013-03-18T16:55:17.800 回答