首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

开放式 Web 平台的发展现状 (4)

开放式 Web 平台的发展现状 (4)

通用基于 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. 微博浏览页面
返回列表