访问Twitter API - 身份验证和骨干模型

时间:2015-01-09 02:37:26

标签: javascript backbone.js twitter oauth

我正在尝试学习Backbone以及Twitter API,并且遇到了一些问题。

首先,到目前为止我只能生成一个访问令牌,所以我完成了OAuth的一部分,但是在发送推文请求时遇到了问题。

我正在使用我在网上找到的一些代码来帮助我入门 这是一个集合:

var Twitter = new Backbone.Model({
    api: api,
    token: tokenToUse,
    debug: false
});
// define a collection
Twitter.Collection = Collection.extend({

    initialize: function(models, options){

        options = options || {};
        _.extend(this.options, options);

        return Collection.prototype.initialize.apply( arguments );
    },

    sync : function( method, model, options ) {

        options.dataType = 'jsonp';

        return Backbone.sync( method, model, options );

    }
});

然后我定义了一个搜索集合

Twitter.Collections.Search = Twitter.Collection.extend({
    model: Backbone.API.Twitter.Models.Tweet, // this is defined elsewhere

    url: function(){ return "https://api.twitter.com/1.1/search/tweets.json?q="+ encodeURIComponent(this.options.query) + "result_type=mixed&count=100"; },

    options: {
        query : "",
        num : 10
    },

    parse: function( data ){
        if( Twitter.get("debug") )
            console.log("Twitter.Collections.Search: ", data );
        return data.results;
    },

    initialize: function(query){
        this.options.query = query;
    }

});

我遇到的问题是Twitter API需要身份验证,我需要添加授权标题...现在的问题是如何做到这一点?我不确定在哪里设置标题以使其正常工作。

API文档非常庞大,需要先生成大量数据,因此设置OAuth会带来巨大的痛苦。

是否有一个JavaScript库可以在某个地方进行此设置?

这些是我的控制台的请求标头:

请求网址:https://api.twitter.com/1.1/search/tweets.json?q=testresult_type=mixed&count=100&callback=jQuery19100829295557923615_1420770637354&_=1420770637355
请求方法:GET
状态代码:400错误请求
请求标题
:主持人:api.twitter.com
:方法:GET
:路径:/1.1/search/tweets.json Q = testresult_type =混合&安培;计数= 100安培;回调= jQuery19100829295557923615_1420770637354&安培; _ = 1420770637355
:方案:HTTPS
:版本:HTTP / 1.1
接受: /
accept-encoding:gzip,deflate,sdch
接受语言:EN-US,EN; Q = 0.8
引用者:someSite
user-agent:Mozilla / 5.0(Windows NT 6.3; WOW64)AppleWebKit / 537.36(KHTML,类似Gecko)Chrome / 39.0.2171.95 Safari / 537.36

1 个答案:

答案 0 :(得分:1)

而不是使用url方法构建查询,请尝试在fetch调用中将其与额外标题一起分配

Collection.extend({
    sync: function (method, model, options) {
         options.dataType = 'jsonp';
         options.headers = {
            "auth-key": "c12a9e06-****-443e-bb2d-5220c70f****"
        }
        return Backbone.sync( method, model, options );
    }
});

model.fetch({
    data: {
        q: "whatever",
        result_type: 'mixed',
        count: 100
    }
})