利用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
原创粉丝点击