weixin.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/usr/bin/eny python
  2. #_*_coding:utf-8_*_
  3. import web
  4. import os
  5. import hashlib
  6. import time
  7. import json
  8. from lxml import etree
  9. from talk import talk
  10. from img import img
  11. import xiaobing
  12. class WeixinInterface:
  13. def __init__(self):
  14. self.app_root = os.path.dirname(__file__)
  15. self.templates_root = os.path.join(self.app_root, 'templates')
  16. self.render = web.template.render(self.templates_root)
  17. def GET(self):
  18. data = web.input()
  19. signature = data.signature
  20. timestamp = data.timestamp
  21. nonce = data.nonce
  22. echostr = data.echostr
  23. token = "zhiyong"
  24. l = [token, timestamp, nonce]
  25. l.sort()
  26. sha1 = hashlib.sha1()
  27. map(sha1.update, l)
  28. hashcode = sha1.hexdigest()
  29. if hashcode == signature:
  30. return echostr
  31. def POST(self):
  32. str_xml = web.data()
  33. xml = etree.fromstring(str_xml)
  34. msgType = xml.find("MsgType").text
  35. fromUser = xml.find("FromUserName").text
  36. toUser = xml.find("ToUserName").text
  37. userId = fromUser[0:15]
  38. #文本信息
  39. if msgType == "text":
  40. content = xml.find("Content").text
  41. if content == u"菜单":
  42. menu = u'哈哈哈哈,欢迎关注。公众号里面有个机器人,还有声音识别和图片审美 ~'
  43. return self.render.reply_text(fromUser, toUser, int(time.time()), menu)
  44. elif content == u'快递':
  45. return self.render.reply_text(fromUser, toUser, int(time.time()), u'你好,查水表!')
  46. else:
  47. text = talk(content, userId)
  48. # xb = xiaobing.xiaoiceApi()
  49. # text = xb.chat(content)
  50. # if text['status'] == 'succeed':
  51. # text = text['text']
  52. # elif text['status'] == 'failed':
  53. # text = 'error:' + text['text']
  54. # else:
  55. # text = u'小冰消失啦,请稍后再试!'
  56. return self.render.reply_text(fromUser, toUser, int(time.time()), text)
  57. #语音信息
  58. elif msgType == "voice":
  59. content = xml.find("Recognition").text
  60. text = talk(content, userId)
  61. return self.render.reply_text(fromUser, toUser, int(time.time()), text)
  62. #图片信息
  63. elif msgType == 'image':
  64. picUrl = xml.find("PicUrl").text
  65. result = img(picUrl)
  66. content = u'图中识别出 %d 张人脸 \n'%(len(result))
  67. for i in result:
  68. content += i['sex'] + ' ' + i['age'] + u'岁' + '\n'
  69. return self.render.reply_text(fromUser, toUser, int(time.time()), content)
  70. else:
  71. return ''