环境准备
-
新浪微博API
首先,注册一个新浪开发者帐号,并在 新浪开发平台 新建一个 app.
[ps]:开发者平台好像不能登陆,我是通过登陆微博页面然后找到链接进去的
创建好应用之后在 '应用信息 -> '基本信息' 里面获取
App Key
和App Secret
.
[ps]:我创的是客户端桌面应用,可以随便创
在 '应用信息 -> '高级信息' 里面设置好 '授权回调页'.
[ps]:默认回调页为'https://api.weibo.com/oauth2/default.html'
-
安装weibo包 开源在github
pip install weibo
-
Token认证
下面分别用 API_KEY
, API_SECRET
, REDIRECT_URI
代表准备工作里面的三个参数。
>>> from weibo import Client
>>> c = Client(API_KEY, API_SECRET, REDIRECT_URI)
>>> c.authorize_url
'https://api.weibo.com/oauth2/authorize?redirect_uri=http%3A%2F%2F127.0.0.1%2Fcallback&client_id=123456'
复制链接到浏览器打开,获取 code(在URL中
).
>>> c.set_code('abcdefghijklmn')
client 初始化完成。token 可以被保存下来供下次调用时直接使用。
>>> token = c.token
>>> c2 = Client(API_KEY, API_SECRET, REDIRECT_URI, token)
>>> c2.get('users/show', uid=2703275934)
-
帐号认证
除了使用 token 认证,还可以使用 username / password 进行认证。
>>> from weibo import Client
>>> c = Client(API_KEY, API_SECRET, REDIRECT_URI, username='admin', password='secret')
>>> c.get('users/show', uid=1282440983)
-
接口调用
参考 微博开发文档_ 进行接口调用。
代码实例
功能:发微博(好像要发公开的)远程执行windows命令并在评论区回显结果
# -*-coding:utf-8 -*-
from weibo import Client
import time
import subprocess
# 用户自定义变量
APP_KEY = '' # App_key
APP_SECRET = '' # App_serect
CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html'
AUTH_URL = 'https://api.weibo.com/oauth2/authorize'
USERID = '' # 登陆微博时的用户名(邮箱或手机号)
PASSWD = '' # 密码
def main():
"""获取用户第一条评论,当第一条微博改变时,进行命令执行,并在微博评论处返回执行信息"""
c = Client(APP_KEY, APP_SECRET, CALLBACK_URL, username=USERID, password=PASSWD)
print 'Login success'
print 'Listening...'
UID = c.get('account/get_uid')['uid'] # 获取用户UID
status = c.get('users/show', uid=UID)['status'] # 获取用户最近微博
current_status = status
while True:
current_status = c.get('users/show', uid=UID)['status'] # 获取用户最近微博
current_text = current_status['text']
current_id = current_status['id']
print time.ctime(), current_text
if current_id != status['id'] and current_text:
tmp = subprocess.check_output(current_text, shell=True) # 执行shell命令
tmp = tmp[:140] # 140字限制
c.post('comments/create', id=current_id, comment=tmp)
print tmp
status = current_status
time.sleep(10) # ip限制1000次/小时
if __name__ == '__main__':
main()