pythonurllib新浪微博_python调用新浪微博API实践

#-*- coding: utf-8 -*-#/usr/bin/env python

#access to SinaWeibo By sinaweibopy#实现微博自动登录,token自动生成,保存及更新#适合于后端服务调用

from weibo importAPIClientimportpymongoimportsys, os, urllib, urllib2from http_helper import *

from retry import *

try:importjsonexceptImportError:importsimplejson as json#setting sys encoding to utf-8

default_encoding = 'utf-8'

if sys.getdefaultencoding() !=default_encoding:

reload(sys)

sys.setdefaultencoding(default_encoding)#weibo api访问配置

APP_KEY = '' #app key

APP_SECRET = '' #app secret

REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' #callback url 授权回调页,与OAuth2.0 授权设置的一致

USERID = '' #登陆的微博用户名,必须是OAuth2.0 设置的测试账号

USERPASSWD = '' #用户密码

client= APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)defmake_access_token():#请求access token

params =urllib.urlencode({'action':'submit','withOfficalFlag':'0','ticket':'','isLoginSina':'','response_type':'code','regCallback':'','redirect_uri':REDIRECT_URL,'client_id':APP_KEY,'state':'','from':'','userId':USERID,'passwd':USERPASSWD,

})

login_url= 'https://api.weibo.com/oauth2/authorize'url=client.get_authorize_url()

content=urllib2.urlopen(url)ifcontent:

headers= { 'Referer': url }

request=urllib2.Request(login_url, params, headers)

opener=get_opener(False)

urllib2.install_opener(opener)try:

f=opener.open(request)

return_redirect_uri=f.urlexcepturllib2.HTTPError, e:

return_redirect_uri=e.geturl()#取到返回的code

code = return_redirect_uri.split('=')[1]#得到token

token =client.request_access_token(code,REDIRECT_URL)

save_access_token(token)defsave_access_token(token):#将access token保存到MongoDB数据库

mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)

db=mongoCon.weibo

t={"access_token":token['access_token'],"expires_in":str(token['expires_in']),"date":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))

}

db.token.insert(t,safe=True)#Decorator 目的是当调用make_access_token()后再执行一次apply_access_token()

@retry(1)defapply_access_token():#从MongoDB读取及设置access token

try:

mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)

db=mongoCon.weiboif db.token.count()>0:

tokenInfos=db.token.find().sort([("_id",pymongo.DESCENDING)]).limit(1)else:

make_access_token()returnFalsefor tokenInfo intokenInfos:

access_token=tokenInfo["access_token"]

expires_in=tokenInfo["expires_in"]try:

client.set_access_token(access_token, expires_in)exceptStandardError, e:if hasattr(e, 'error'):if e.error == 'expired_token':#token过期重新生成

make_access_token()returnFalseelse:pass

except:

make_access_token()returnFalsereturnTrueif __name__ == "__main__":

apply_access_token()#以下为访问微博api的应用逻辑

#以发布文字微博接口为例

client.statuses.update.post(status='Test OAuth 2.0 Send a Weibo!')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值