【问题标题】:Simple method to retrieve Twitter User Timeline with $http使用 $http 检索 Twitter 用户时间线的简单方法
【发布时间】:2016-06-04 20:58:09
【问题描述】:

我需要使用 angular 访问 twitter 用户时间线...

所有键都是正确的,它与 php/curl 一起工作,但我无法让它在 angular 内工作。我正在使用oauth-signature-js,然后是 $http 请求。我想让它尽可能简单。

ng 控制器:

app.controller('twitterController', function($scope, $http){

  // VARIABLES

    var screen_name = 'grapax_be';
    var count = 1;
    var consumer_key                = 'xxxxxxxxxxxxxxxxxxxxxxxxx';
    var consumer_secret             = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    var oauth_access_token          = 'xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    var oauth_access_token_secret   = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    var oauth_timestamp             = Math.round((new Date()).getTime() / 1000.0);
    var oauth_nonce                 = oauth_timestamp;
    var oauth_signature_method      = 'HMAC-SHA1';
    var oauth_version               = '1.0'


  // GENERATE OAUTH SIGNATURE

    var httpMethod = 'GET';
    var url        = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
    var parameters = {
      oauth_consumer_key : consumer_key,
      oauth_token : oauth_access_token,
      oauth_nonce : oauth_nonce,
      oauth_timestamp : oauth_timestamp,
      oauth_signature_method : oauth_signature_method,
      oauth_version : oauth_version,
    };
    var oauth_signature = oauthSignature.generate(httpMethod, url, parameters, consumer_secret, oauth_access_token_secret, { encodeSignature: true });


  // HTTP REQUEST

    var authorization_string = "OAuth " 
            + 'oauth_consumer_key="' + consumer_key + '", '
            + 'oauth_nonce="' + oauth_nonce + '", '
            + 'oauth_signature="' + oauth_signature + '", '
            + 'oauth_signature_method="' + oauth_signature_method + '", '
            + 'oauth_timestamp="' + oauth_timestamp + '", '
            + 'oauth_token="' + oauth_access_token + '", '
            + 'oauth_version="' + oauth_version + '"';

    $http.jsonp('https://api.twitter.com/1.1/statuses/user_timeline.json', {
        headers: {'Authorization': authorization_string},
        params:{
            count: count,
            screen_name: screen_name
        }
      }).success(function(res){ console.log('res:', res) });

});

这仍然给我一个错误 400。

这里是plunker

欢迎任何提示、问题、评论...... 谢谢!

约翰

【问题讨论】:

  • 你能分享一个plunker吗?如果没有,你能把 CURL 放在这里吗(你可以从 chrome 网络控制台获取)
  • @pablorsk 这是一个 plunker:plnkr.co/edit/kF9iqCOv31ZXuuy4vlSp 当我谈到 php/curl 时,我只是提到提供的密钥(消费者、秘密......)在另一个环境中工作(PHP)。干杯!
  • 我已经回答了我自己的问题,并包含了我使用的 php/cURL 方法。如果您发现它可以将其标记为有用,那就太好了……Cheerz..

标签: angularjs http twitter oauth twitter-oauth


【解决方案1】:

无法在 jsonp 请求中设置标头。一种解决方案是使用服务器上的 http 客户端而不是浏览器来实现这一点。

【讨论】:

  • 好吧,我明白了,出于安全原因,我应该避免使用浏览器。我在 Wordpress/Apache 服务器上使用 Angular。这是否意味着在这种情况下我应该继续使用 php/curl 来处理 http 请求,所以不要使用 Angular 来完成这个任务?
  • 这取决于现有的安全框架。在这种使用jsonp进行认证的场景下,一般javascript都解决不了问题。
  • 我已经回答了我自己的问题,这只是你的延伸。如果您发现它可以将其标记为有用,那就太好了:) 谢谢。
【解决方案2】:

自己进一步回答:

  1. 无法在 jsonp 请求中设置标头。
  2. 在服务器端使用 Apache/WP,最好坚持使用 php/cURL 请求,并使用简单的 $http.get() 调用它 用于 Angular 集成。

顺便说一下这个 PHP/cURL 方法的工作原理 伟大的 : http://iag.me/socialmedia/build-your-first-twitter-app-using-php-in-8-easy-steps/

【讨论】:

    猜你喜欢
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    相关资源
    最近更新 更多