Python3下用Tornado调用新浪微博API.0认证的顺序

优采云 发布时间: 2021-05-21 21:17

  

Python3下用Tornado调用新浪微博API.0认证的顺序

  使用Tornado试用新浪微博开放平台API

  Tornado作为Python异步无阻塞服务器和轻量级Web框架,非常吸引人。为了体验OAuth 2. 0身份验证,我使用了Tornado构建了网站并调用了新浪微博API。新浪微博的OAuth 2. 0身份验证序列如下:

  以下内容简要说明了如何在Python 3下使用Tornado完成上述四个步骤。

  将用户带到新浪认证页面

  假设我们要开发的客户端的域名是,在Sina中创建一个新应用程序,然后在设置中填写此安全域名,以便我们可以跨站点请求XMLRequests。

  此步骤是编写html页面,在Tornado中则是编写模板。假设我们在客户端上放置了一个名为“使用新浪微博登录”的按钮,代码如下:

  

Login

  通过这种方式,您只需单击此按钮即可转到新浪的身份验证页面。用户通过身份验证后,新浪会将用户转到您提供的redirect_uri地址,这里是

  因此,我们需要使用Tornado来处理身份验证服务器发送给我们的代码。

  龙卷风在后台使用代码交换access_token

  这部分有两个步骤:

  配置Tornado的路由表,然后让r'/ auth_code'路由到AuthCodeHandler处理程序。然后,我们可以重写此处理程序的get方法以获取代码。然后我们使用POST方法将代码发送到Sina,这是它可以反映Tornado的异步和非阻塞功能的强大之处。龙卷风的AsyncHTTPClient可以发起异步请求。 @ gen.coroutine装饰器可用于编写异步(如同步)。代码如下:

  from urllib.parse import urlencode

import json

import tornado.web

from tornado import gen

from tornado.httpclient import AsyncHTTPClient

from handlers.token import TokenBaseHandler

class AuthCodeHandler(TokenBaseHandler):

"""

已经获得用户授权, 向API服务器获取Token

"""

@gen.coroutine

def get(self):

auth_code = self.get_argument("code", "No code")

post_data = {

"client_id": "你的App Key",

"client_secret": "你的App Secret",

"grant_type": "authorization_code",

"code": auth_code,

"redirect_uri": "http://dropthej.com"

}

http_client = AsyncHTTPClient()

response = "init"

body = urlencode(post_data)

try:

response = yield http_client.fetch(

"https://api.weibo.com/oauth2/access_token",

method="POST",

body=body

)

except Exception as e:

self.write(str(e))

return;

token_json = json.loads(str(response.body, encoding='utf-8'))

# set token_json

self.application.token_json = token_json

self.write("

" + str(token_json['access_token']))

url = "http://dropthej.com/?tk=" + token_json['access_token']

self.redirect(url)

  由于我们仅使用它来与他的API一起使用,因此我们不会在cookie中编写access_token,而是使用一种简单的方法将其放入URL中。这样,应用程序的每个页面都会被带入。tk参数可以保留用户的登录状态。在这里,我们返回到此页面,因此我们在html中收到此tk并使用它来调用Sina API。

  为什么发送GET和POST请求?应该使用龙卷风在后台发送此消息吗?前端的javascript无法完成吗?由于应将“应用程序秘密”发送到此处,因此称为“秘密”,您仍然可以将其发送到前端。遍历用户计算机是非常不安全的。 Secret旨在验证这是真实客户端发送的请求,因此必须在后台发送,并且必须由客户端而不是用户完成。

  使用jQuery调用Sina API以获取用户的最新主页微博

  这不是重点。我不会再说了。效果非常好,也很高兴。主要代码如下:

  var xyz;

$(function() {

$.ajax({

url: "https://api.weibo.com/2/statuses/home_timeline.json",

type: "GET",

dataType: "jsonp",

data: {

"access_token": ac_tk

},

success: function(result) {

xyz = result.data.statuses;

for (x in xyz) {

$("#tbody").append("" + xyz[x].user.name + "" + xyz[x].text + "");

}

}

});

});

  效果如图所示:

  

  链接到本文

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线