Python调用API发微博

这几天准备入个树莓派,想用Python有规律的发微博报告当前的CPU温度,硬盘温度之类的

于是先写好了,参考了很多python发微博的例子,不是用不了的就是代码看着难受(乱七八糟的代码风格),于是自己写了个!

api_key填你申请的app_key (去渣浪微博开放平台申请)

api_secret就是填申请的app_secret (key和secret可以暂时用我的)

callback_url填你APP的授权回调页(你不介意的话可以用我的)

userid 和 password就是你的用户名和密码

#! /usr/bin/env python2
# -*- coding: utf-8 -*-
from weibo import APIClient
import urllib
import requests 

# 个人信息
__author__  = 'GentlemanMod'
__email__   = 'GentlemanMod@gmail.com'
__version__ = 'v1'

# 开启调试输出(0 or 1)
debug = 0

# 构造headers信息
user_agent = (
  'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) '
  'Chrome/20.0.1132.57 Safari/536.11'
)
session = requests.session()
session.headers['User-Agent'] = user_agent
session.headers['Host'] = 'api.weibo.com'

# 设置全局变量
global api_key, api_secret, callback_url, userid, password
api_key = '3495549134'
api_secret = '514f3edcb22f31f58cf71144174d5d5f'
callback_url = 'http://gentlemanmod.cnblos.com'
userid = 'xxxxxx@xxxxx.com'
password = 'xxxxxxxxxxxxx'

# 初始化API client
global client, referer_url
client =  APIClient(app_key=api_key, app_secret=api_secret, redirect_uri=callback_url)
referer_url = client.get_authorize_url()
if debug: print 'referer_url: %s' % referer_url

# 获取回调地址的code
def get_code():
  # 构造post数据
  data = {
    'client_id': api_key,
    'redirect_uri': callback_url,
    'userId': userid,
    'passwd': password,
    'isLoginSina': '0',
    'action': 'submit',
    'response_type': 'code'
  }

  session.headers['Referer'] = referer_url

  # post数据到渣浪服务器
  resp = session.post(
    url = 'https://api.weibo.com/oauth2/authorize',
    data = data
  )
  
  if debug: print 'get url: %s' % resp.url
  if debug: print 'code is: %s' % resp.url[-32:]
  
  # 截取回调url中的code
  code = resp.url[-32:]
  return code


# 发文字微博
def weibo_text(text):
  # post构造的数据获取code
  code = get_code()

  # 获取渣浪授权令牌和期限
  token = client.request_access_token(code)
  client.set_access_token(token.access_token, token.expires_in)

  # 发微博
  client.statuses.update.post(status=text)

# 发图片微博
def weibo_pic(text, picture):
  # post构造的数据获取code
  code = get_code()

  # 获取渣浪授权令牌的期限
  token = client.request_access_token(code)
  client.set_access_token(token.access_token, token.expires_in)

  # 发图片微博
  Pic = open(picture, 'rb')
  client.statuses.upload.post(status=text, pic=Pic)
  Pic.close()

if __name__ == '__main__':
  weibo_text('测试发布文字微博')
  weibo_pic('测试发布图片微博', '/home/michellgaby/img/mugi.jpg')

 参考:

https://gist.github.com/mrluanma/3621775

http://www.guokr.com/post/475564/

posted on 2013-08-16 21:14  GentlemanMod  阅读(2376)  评论(1编辑  收藏  举报

导航