Twitter API请求上的(401授权要求)

时间:2014-06-13 20:56:05

标签: angularjs twitter jsonp http-status-code-403 http-status-code-401

我试图使用基于this tutorial的AngularJS对Twitter API做一个简单的请求,我收到此错误:

"GET http://search.twitter.com/search.json?callback=angular.callbacks._0&q=angularjs 401 (Authorization Required)"

代码:

$scope.twitter = $resource('http://search.twitter.com/:action',
    {action:'search.json', q: 'angularjs', callback:'JSON_CALLBACK'},
    {get:{method:'JSONP'}}
);

是否与以下声明有关(取自Twitter API docs)?

  

401 - Unauhtorized - (...)在其他情况下也返回,例如对API v1的所有调用   端点现在返回401(改为使用API​​ v1.1)。

为什么会出现此错误?通过使用http://search.twitter.com作为资源,这是否意味着我使用的是最新的API(v1.1)?我可以选择访问哪种API吗?怎么样?

如果我使用http://api.twitter.com作为资源,我会收到403错误:

Failed to load resource: the server responded with a status of 403 (Forbidden)

,根据Twitter API docs,暗示

(...) This code is used when requests are being denied due to update limits.

这没有意义,因为我只尝试了几十次......我很困惑。

由于

2 个答案:

答案 0 :(得分:1)

您好我刚刚自己完成了Twitter API的集成,我就这样做了:

  1. 在Twitter上创建应用
  2. HERE
  3. 下载twitteroauth PHP SDK
  4. 使用以下代码创建名为twitter.php的文件:
  5. <强> twitter.php:

    include_once "lib/twitteroauth.php";
    
    class Twitter {
        private $consumerKey = "YourConsumerKey";
        private $consumerSecret = "YourConsumerSecret";
        private $token = "AppToken";
        private $tokenSecret = "AppTokenSecret";
    
        function __construct() {
            if(isset($_GET['page'])) {
                $this->getTweets($_GET['page']);
            }
        }
        //In my case i just wanted to get Tweets
        private function getTweets ($page) {
            $connection = $this->getConnectionWithAccessToken();
            echo json_encode($connection->get("statuses/user_timeline", array("count" => 5, "page" => $page)));
        }
    
        private function getConnectionWithAccessToken() {
            return new TwitterOAuth($this->consumerKey, $this->consumerSecret, $this->token, $this->tokenSecret);
        }
    }
    $twitter = new Twitter();
    

    Angular Service / Factory:

    var url = "http://yourwebsite.com/twitter.php";
    var page = 1;
    $http.get(url, {
            params: {
                page : page //Optional params, but necesary for the example to work
            }
        })
        .success(function (response) {
            //Do something with the response
            page++;
        });
    

    就是这样,只需添加你的私人日期,例如consumerKey和Token,它就会起作用(在这个例子中调用API来获取一些推文)。对于其他API命令,请参考来自twitter的API文档,您可以找到HERE

    古德勒克

答案 1 :(得分:0)

不知道这是否有用,但是在开始编写代码之前,Twitter有一个很棒的工具来探索twiiter API。 Twitter Console。显然在控制台上进行粗略搜索会向您显示需要授权。作为一个加号,它会向您显示Twitter API对您的查询的响应等。如果你想要我的具体细节,这可能非常有用。