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

Accessing the Twitter API - authenticating and backbone models

本文关键字:模型 身份验证 Twitter API 访问      更新时间:2023-09-26

我正在尝试学习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
请求方式:获取
状态代码:400 错误请求
请求标头
:主机:API.twitter.com
:方法:获取
:p ath:/1.1/search/tweets.json?q=testresult_type=mixed&count=100&callback=jQuery19100829295557923615_1420770637354&_=1420770637355
:方案:https
:版本:HTTP/1.1
接受:/
接受编码:gzip, deflate, sdch
accept-language:en-US,en;q=0.8
推荐人: 某网站
user-agent:Mozilla/5.0 (Windows NT 6.3;WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36

而不是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
    }
})