通用基于 Web API 开发实例介绍本实例采用 Python3.2、PyQt4、Eric5 IDE 以及 Sina 微博 API 开发。Python 是平台无关,且效率极高。PyQt 大大减轻了 Python GUI 的开发工作量,同时 Qt 的 GUI 库与 MFC、Swing 相比,要轻量的多。它有超过 300 个类,将近 6000 个函数和方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括 UNIX、Windows 和 Mac。 PyQt 采用双许可证,开发人员可以选择 GPL 和商业许可。在此之前,GPL 的版本只能用在 Unix 上,从 PyQt 的版本 4 开始,GPL 许可证可用于所有支持的平台。同时 Eric5 IDE 则完美的将 GUI 的设计与 Python 的处理整合起来。Eric 本身是用 Python 写的,所以跨平台。图形库使用 Qt,界面相当好看,比大部分开源的 IDE 要好看很多。和 SPE、UliPad 等 IDE 比起来,自动补全、智能感知功能有过之而无不及,虽然仍然不完美。支持自动语法检查、支持代码折叠、支持自动缩进。最赞的莫过于它的调试器了,支持设置断点、单步调试、查看变量等。就调试器这一点,就将其它绝大多数开源的 Python IDE 更胜一筹。
- 申请 AppKey 1:首先登录到新浪开放平台,创建应用,并申请 AppKey,网址是:
图 8. 新浪微博应用开发主页点击“创建应用”后,输入开发者信息,然后确认后,才能进入创建应用界面。
2:点击网页中“创建应用”,跳转到应用创建界面
3:进入应用的信息编辑界面,请务必填写清楚每一项
图 9. 新应用信息登记界面4:上述信息填完后,会跳转到 AppKey 显示页面,然后就可以在开发中使用这个 Key 进行开发
图 10. Key 生成界面 - 应用开发 1:用户登录
用户登录模块,需要用到新浪微博验证 API。新浪微博总共提供了两中认证方式,一个是 Basic 认证,一个是通过 oAuth 认证。其中 Basic 认证只需要用户提供相应的新浪账户和密码就可以得到使用 API 的授权;而 OAuth 是一种国际通用的授权方式,它的特点是不需要用户在第三方应用输入用户名及密码。为了便于操作,这里选择了 Basic 的认证方式。清单 1 是用 Python 实现的新浪微博的用户验证。
清单 1. 利用新浪微博的 Python API 实现用户身份验证1
2
3
4
5
6
7
8
9
10
11
| class LoginAuth():
consumer_key='your key'
consumer_secret='your secret'
def basicAuth(self, source, username, password):
try:
self.authType = 'basicauth'
self.auth = BasicAuthHandler(username, password)
self.api = API(self.auth,source=source)
except Exception as
return ''
|
其中 BasicAuthHandler 是通过用户名和密码生成认证信息的类,然后再微博 API 对象(self.api)采用这个认证信息来判断用户是否合法。
认证是否成功可以通过 /account/verify_credentials.json 接口实现,如清单 2 所示。
清单 2. 获得用户身份验证的结果1
2
3
4
5
6
7
8
9
| def verify_credentials(self):
try:
return bind_api(
path = '/account/verify_credentials.json',
payload_type = 'user',
require_auth = True
)(self)
except WeibopError:
return False
|
因此,我们在 button 消息中需要这样写就可以实现用户的验证:
清单 3. 在按钮点击的回调函数中进行用户身份验证1
2
3
4
5
6
7
8
9
10
11
12
| @pyqtSlot()# 定义消息处理函数
def on_loginBtn_clicked(self):
la=LoginAuth()
la.basicAuth('536097958', self.usernameText.text(), self.pwdText.text())
if la.api.verify_credentials() == False:
self.loginResultLabel.setText("登录失败")
else:
self.loginResultLabel.setText("登录成功")
sendBox = SendMsgUI()
sendBox.show()
sendBox.setUserInfo(self.usernameText.text(), self.pwdText.text())
sendBox.exec()
|
实现的结果如下:
图 11. 登录界面2:发送微博
用户登录后,会弹出发送微博的窗口,当用户点击发送后,就会调用浪微博的更新状态的接口,代码参考如下:
清单 4. 发送微博消息1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| def token(user,password):
"""根据用户名和密码产生 token"""
newUser = '%s:%s'%(user,password)
return base64.b64encode(newUser.encode()).strip()
def update(token,message):
"""发送微博消息"""
conn=http.client.HTTPConnection('api.t.sina.com.cn')
header={}
header.setdefault('Authorization',"Basic %s" % token)
params=urllib.parse.urlencode({'status':message,'source':'536097958'})
print(params)
count = 0
while True :
count = count + 1
conn.request('POST', '/statuses/update.json?%s'%params, headers=header)
resp = conn.getresponse()
if resp.status == 200 :
print('发送成功')
return 1
else :
if count > 3 :
print('发送失败次数过多 , 3166 !')
return -1
else :
print(resp.read())
print('发送失败,一秒钟再试 !')
sleep(1)
conn.close()
|
在 button 消息响应中可以这样调用,pyqt4 的消息响应处理很简单,再加上 python 精简的语法使得对微博 API 的调用异常的简单,下面是对按钮的消息处理函数。
清单 5. 在按钮点击的回调函数中发送微博消息1
2
3
4
5
6
7
8
9
| @pyqtSlot()
def on_pushButton_clicked(self):
"""
Slot documentation goes here.
"""
# TODO: not implemented yet
msg = self.msgEdit.toPlainText()
update(token(self.uName,self.pwd).decode(),msg)
self.exec()
|
而实现的界面如下:
图 12. 消息输入界面当点击“发送”,我们登录到新浪微博网站,发现消息已经发布成功,如下图所示
图 13. 微博浏览页面
|