javascript - 如何在 angularjs 中传递 twitter api 的授权 header 以获取用户时间线?

标签 javascript angularjs

我尝试过以下代码,但它正在返回 XMLHttpRequest 无法加载 https://api.twitter.com/1.1/statuses/home_timeline.json?screen_name=twitterapi 。请求的资源上不存在“Access-Control-Allow-Origin” header 。因此,不允许访问源“http://localhost:3000”。响应的 HTTP 状态代码为 400。

    function randomString(length, chars) {
            var result = '';
            for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))];
            return result;
        }    var app=angular.module('store',[]);app.controller('indexController', function($scope, $http) {
var unixtime=Math.round((new Date()).getTime() / 1000.0),
 nonce=randomString(32,'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'); var httpMethod = 'GET',
url = 'https://api.twitter.com/1.1/statuses/home_timeline.json',
parameters = {
    oauth_consumer_key : 'AD6SEy1m3XkggNTuYw5SUl4dv',
    oauth_nonce : nonce,
    oauth_signature_method : 'HMAC-SHA1',
    oauth_timestamp : unixtime,
    oauth_token : '3131481153-I9k4ZvdnePO42lOH0EJQNQcAHoyim6XrFFzFk90',
    oauth_version : '1.0',
    screen_name:'twitterapi'
},
consumerSecret = 'xxxxxxx',
tokenSecret = 'xxxxxxx',

signature = oauthSignature.generate(httpMethod, url, parameters, consumerSecret, tokenSecret,
    { encodeSignature: true});
    $http.get(url, {
headers: {
    'Authorization':
        'OAuth oauth_consumer_key="AD6SEy1m3XkggNTuYw5SUl4dv",' +
        'oauth_signature_method="HMAC-SHA1",' +
        'oauth_timestamp='+unixtime +
        'oauth_nonce='+nonce +
        'oauth_version="1.0",' +
        'oauth_token="3131481153-I9k4ZvdnePO42lOH0EJQNQcAHoyim6XrFFzFk90",'+
        'oauth_signature='+signature
},
params:{screen_name:'twitterapi'}}).success(function (data) 
{ 
    $scope.tweets = data; 
});  });

最佳答案

由于 CORS,您收到此错误

您正在使用 $http.get 进行跨域调用,您需要将其更改为 $http.jsonp 并提供有效的 twitter api 回调

    function randomString(length, chars) {
            var result = '';
            for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))];
            return result;
        }    var app=angular.module('store',[]);app.controller('indexController', function($scope, $http) {
var unixtime=Math.round((new Date()).getTime() / 1000.0),
 nonce=randomString(32,'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'); var httpMethod = 'GET',
url = 'https://api.twitter.com/1.1/statuses/home_timeline.json',
parameters = {
    oauth_consumer_key : 'AD6SEy1m3XkggNTuYw5SUl4dv',
    oauth_nonce : nonce,
    oauth_signature_method : 'HMAC-SHA1',
    oauth_timestamp : unixtime,
    oauth_token : '3131481153-I9k4ZvdnePO42lOH0EJQNQcAHoyim6XrFFzFk90',
    oauth_version : '1.0',
    screen_name:'twitterapi',
    callback: 'twitterCallback'
},
consumerSecret = 'xxxxxxx',
tokenSecret = 'xxxxxxx',

signature = oauthSignature.generate(httpMethod, url, parameters, consumerSecret, tokenSecret,
    { encodeSignature: true});
    $http.jsonp(url, {
headers: {
    'Authorization':
        'OAuth oauth_consumer_key="AD6SEy1m3XkggNTuYw5SUl4dv",' +
        'oauth_signature_method="HMAC-SHA1",' +
        'oauth_timestamp='+unixtime +
        'oauth_nonce='+nonce +
        'oauth_version="1.0",' +
        'oauth_token="3131481153-I9k4ZvdnePO42lOH0EJQNQcAHoyim6XrFFzFk90",'+
        'oauth_signature='+signature
},
params:{screen_name:'twitterapi'}}).success(function (data) 
{ 
    $scope.tweets = data; 
});  });

关于javascript - 如何在 angularjs 中传递 twitter api 的授权 header 以获取用户时间线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29643327/

相关文章:

javascript - blur 事件在不同浏览器中的不同行为

javascript - HTML 页面的打印问题

javascript - Angular JS。在我只有国家 ID 的情况下在 UI 中显示国旗

javascript - ui.router 不工作?这是我在 plunker :http://plnkr. co/edit/JdRB2m0aWjllDcze09S2?p=preview 上的应用程序

javascript - 僧侣发现返回奇怪的 json

javascript - 使用 Jquery 忽略 JSON 字符串/ header

javascript - 输入类型文本 onfocus 函数未调用

javascript - 根据正确选择的单选按钮显示下拉菜单

javascript - 如何在 Web API 中正确注入(inject) Angular 模块的依赖项?

javascript - 如何从另一个 Controller 调用 Controller 功能?