利用python完成微信公众平台开发(1)
来源:互联网 发布:网狐6603 麻将 源码 编辑:程序博客网 时间:2024/05/01 03:47
暑假的时候闲着无聊,看到知乎上有大神给他女票做了一个服务类的微信公众平台订阅号,正好对python爬虫也比较感兴趣,就想自己也动手做一个。正好女票的手机空间也不足了,为了帮她减少手机上app的数量,我也决定动手做一个,代码的框架是借助网上的,主要的代码是自己完成的。
这个订阅号主要完成了中英互译功能,快递查询,天气查询,以及搜歌听歌功能,下面,让我们来看看完成的步骤吧。
首先,当然是要一步一步地建立一个微信公众平台,谢谢Kevin_Yang的教程,受益匪浅。我主要借助了他的框架,他使用的是web.py框架,因为其良好的xml解析。我毕竟不是做前端的,对这个框架也只能稍稍看看而已,对这个框架也实在没有太多兴趣。有想了解更多干货,请移步我给出的链接。
中英互译功能
在这里我们首先应该对计算机系统的字符编码方式有一定了解,我在博客里面已经粗略分析。在这里,我使用的是有道词典的api,下面是有道词典的api使用说明:
数据接口http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=<doctype>&version=1.1&q=要翻译的文本版本:1.1,请求方式:get,编码方式:utf-8主要功能:中英互译,同时获得有道翻译结果和有道词典结果(可能没有)参数说明: type - 返回结果的类型,固定为data doctype - 返回结果的数据格式,xml或json或jsonp version - 版本,当前最新版本为1.1 q - 要翻译的文本,不能超过200个字符,需要使用utf-8编码errorCode: 0 - 正常 20 - 要翻译的文本过长 30 - 无法进行有效的翻译 40 - 不支持的语言类型 50 - 无效的key
在这里,我使用的返回格式doctype是json的,因为和xml相比使用更简单,更容易理解,关于如何使用json解析。成功返回翻译结果都会有一个叫basic的key的,于是我们接下来写一个translate函数,之前在头部记得import json:
def youdao(word): qword = urllib2.quote(word) baseurl =r'http://fanyi.youdao.com/openapi.do?keyfrom=zyapplication&key=1442035535&type=data&doctype=json&version=1.1&q=' url = baseurl+qword resp = urllib2.urlopen(url) fanyi = json.loads(resp.read()) for k,v in fanyi.items(): print '%s:%s'%(k,v) if fanyi['errorCode'] == 0: if ('basic' in fanyi.keys()) and ('phonetic' in fanyi['basic'].keys()) : trans1 = u'%s:\n%s\n'%(fanyi['query'],''.join(fanyi['basic']['phonetic'])) trans2 = u'' for i in fanyi['basic']['explains']: trans2+=i+'\n' trans=trans1+trans2 return trans else: trans =u'%s:\n基本翻译:%s\n'%(fanyi['query'],''.join(fanyi['translation'])) return trans
调试小技巧:在SAE里的日志里,切到debug级别,有时候可以看到哪里出现了问题:
for k,v in fanyi.items(): print '%s:%s'%(k,v)
可以利用这个迭代去打印json的内容,从而查出bug所在。
天气预报功能
天气预报借用了百度api,也是利用了利用了json作为返回解析:
def weather_cn(weather): url = "http://apis.baidu.com/apistore/weatherservice/recentweathers?cityname=" url=url+weather req = urllib2.Request(url) req.add_header("apikey", "e52ac9e357f627b74ff2e8de9c2bde80") resp = urllib2.urlopen(req) content = resp.read() info = json.loads(content) info1=info['retData']['today']['index'] info2=info['retData']['forecast'] if(info['errNum'] == -1): return info['errMsg'] else: re1 = u'%s天气预报\n%s %s发布\n'%(info['retData']['city'],''.join(info['retData']['today']['date']),''.join(info['retData']['today']['week'])) re2 = u'当前温度:%s\n最高温度:%s\n最低温度:%s\n'%(info['retData']['today']['curTemp'],''.join(info['retData']['today']['hightemp']),''.join(info['retData']['today']['lowtemp'])) re3 = u'pm值:%s 风力:%s\n天气状态:%s'%(info['retData']['today']['aqi'],''.join(info['retData']['today']['fengli']),''.join(info['retData']['today']['type'])) re4 = u'\n温馨提示:%s%s'%(info1[1]['details'],''.join(info1[2]['details'])) re5 = u'\n未来两天天气情况:\n明天\n%s~%s %s\n后天\n%s~%s %s\n大后天\n%s~%s %s'%(info2[0]['lowtemp'],''.join(info2[0]['hightemp']),''.join(info2[0]['type']),''.join(info2[1]['lowtemp']),''.join(info2[1]['hightemp']),''.join(info2[1]['type']),''.join(info2[2]['lowtemp']),''.join(info2[2]['hightemp']),''.join(info2[2]['type'])) re = re1+re2+re3+re4+re5 return re
总体上这个功能还是比较容易实现的,当你知道json的格式后,解析它只是一个体力活。
0 0
- 利用python完成微信公众平台开发(1)
- 利用python完成微信公众平台开发(2)
- 微信公众平台开发(1)
- python开发微信公众平台 BAE
- python 微信公众平台开发
- python 微信公众平台开发
- 微信公众平台开发Python 版本
- python+web.py 搭建微信公众平台(1)
- 微信公众平台开发学习--1
- 微信公众平台开发教程1
- 微信公众平台开发1
- 微信公众平台开发(一)
- 微信公众平台开发(数据库连接)
- 微信公众平台开发(一)
- #微信公众平台开发(一)
- 微信公众号开发(1)--微信公众平台与后台服务器
- 微信公众平台消息接口开发(1)
- 微信公众平台自定义菜单接口开发(1)
- Android Studio NDk-JNi开发(二)AS下开发流程
- input不可修改实现方式
- 微信小程序访问豆瓣电影api400错误解决方法
- P2P网络编程
- 结合实例分析arm指令集中的adds指令与arm内嵌汇编
- 利用python完成微信公众平台开发(1)
- 成员变量与局部变量
- LeetCode:max-points-on-a-line
- 文章标题
- 数学小知识
- poj1182食物链 种类并查集
- 人生处处都是毕业季-献给我亲爱的班学员们
- 文章标题
- MyBatis Mapper.xml各种判断