Python面向对象的微信应用开发
一、案例背景
微信,是我们每个人身边交往和联系的工具。几乎每个人都在用着微信, 那我不免要问一下使用微信的朋友,你觉得你的微信里有多少个男性朋友,又有多少个女性朋友呢?你有男性朋友多了,是不是证明你这个人比较爱认识铁哥们。你有女朋友多了,是不是证明你这个人比较爱认姐们呢?不过,提醒各位,交友须谨慎哟。不过,今天的话题是找到你的微信里有多少个男性的朋友,有多少个女性的朋友,你猜猜,会不会有不男不女的朋友呢?
二、案例结果
三、先面向过程进行分析
根据图示思路进行代码的编写,代码中需要安装模块wxpy。
'''
初始化机器人
'''
bot = Bot()
'''
获取微信机器人列表
'''
myFriends = bot.friends()
'''
定义字典,存储在sex_dict中,记录男女总数
'''
sex_dict = {'male':0,'female':0}
'''
遍历myFriends列表中每一个朋友圈朋友成员。
'''
for friend in myFriends:
'''
如果是男的,记录男的总和加1,女的,记录女的总和加1
'''
if friend.sex == 1:
sex_dict['male'] +=1
elif friend.sex ==2:
sex_dict['female'] +=1
print(sex_dict)
四、用面向对象的方法改写: 把上面程序改成面向对象的小案例,就可以把语句放到类的方法里,然后执 行类的方法就行了,因为这段代码合在一起完成一个功能,我们可以把他们封装在一起,供我们使用一个方法直接调用即可。
class Friend:
def getFriend(self):
bot = Bot()
myFriends = bot.friends()
sex_dict = {'male':0,'female':0}
for friend in myFriends:
if friend.sex == 1:
sex_dict['male'] +=1
elif friend.sex ==2:
sex_dict['female'] +=1
print(sex_dict)
if __name__==”__main”:
'''
实例化Friend类
'''
friend=Friend()
'''
执行Friend里面的getFriend方法
'''
friend.getFriend()
五、可以把getFriend()封装成私有方法,然后在里面提供一个公共的接口方法,外部再调用。私有方法的实现代码如下。
class Friend:
'''
定义私有方法
'''
def __myfriend(self):
bot = Bot()
myFriends = bot.friends()
sex_dict = {'male':0,'female':0}
for friend in myFriends:
if friend.sex == 1:
sex_dict['male'] +=1
elif friend.sex ==2:
sex_dict['female'] +=1
print(sex_dict)
def getFriend(self):
__myfriend()
if __name__==”__main”:
'''
实例化Friend类
'''
friend=Friend()
'''
执行Friend里面的getFriend方法
'''
friend.getFriend()
六、现在把getFriend()加上@classmethod装饰器,再去看程序的具体调用方法。
class Friend:
'''
定义私有方法
'''
def __myfriend(self):
bot = Bot()
myFriends = bot.friends()
sex_dict = {'male':0,'female':0}
for friend in myFriends:
if friend.sex == 1:
sex_dict['male'] +=1
elif friend.sex ==2:
sex_dict['female'] +=1
print(sex_dict)
'''
加classmethod装饰器,参数一般使用类参数
'''
@classmethod
def getFriend(cls):
__myfriend()
if __name__==”__main”:
'''
调用@classmethod修饰的方法,可以不用实例化
'''
Friend.getFriend()
六、现在继续把getFriend()加上@staticmethod装饰器,再去看程序的具体调用方法。
class Friend:
'''
定义私有方法
'''
def __myfriend(self):
bot = Bot()
myFriends = bot.friends()
sex_dict = {'male':0,'female':0}
for friend in myFriends:
if friend.sex == 1:
sex_dict['male'] +=1
elif friend.sex ==2:
sex_dict['female'] +=1
print(sex_dict)
'''
加staticmethod装饰器,根据函数的需要再使用参数
'''
@staticmethod
def getFriend(cls):
__myfriend()
if __name__==”__main”:
'''
调用@staticmethod修饰的方法,可以不用实例化
'''
Friend.getFriend()
七、分析微信好友技术的提升。
用面向对象的方法分析微信好友是对面向对象编程的总结与归纳,同时微信中的一些分析也是面试项目比较新颖的类型,后期学习深入可以根据微信的分析去推送朋友信息或者是一些快讯、新闻等信息,也可以提供当地的导航服务等。你可以输出微信好友的对象结构,根据不同的属性去开发不同的应用。
from wxpy import Bot
'''
初始化机器人
'''
bot = Bot()
'''
获取微信机器人列表
'''
myFriends = bot.friends()
'''
打印微信好友中 某一个人的对象结构.
'''
print(dir(myFriends[0]))
上述代码的运行结果如图所示。
八、微信结合pyecharts画微信好友分布图。
下面结合pyecharts模块去画一下微信好友的全国分布图,pyecharts最好的特性在于可以画中国地图,根据微信好友的province省份属性可以去画一下微信好友全国分布图。
注意,pyechars画地图的方法是固定的,但是千万要保证你的微信好友没有外国的,或者没有空值,否则中国地图上找不到地点,程序就会报错,在程序中使用if '\u4e00' <= key < '\u9fff'语句来实现只接收中文信息,这里默认中文信息都是中国的省份。代码如下。代码中需要安装模块wxpy和pyecharts。
from wxpy import Bot
from pyecharts.charts import Geo
'''
初始化机器人
'''
bot = Bot()
'''
获取微信机器人列表
'''
myFriends = bot.friends()
'''
定义空字典,存储在微信中地址的键和值
'''
address_dict = {}
'''
遍历myFriends列表中每一个朋友圈朋友成员。
'''
for friend in myFriends:
'''
如果是字典中没有,字典中建立相应的键,并将键值记录为0,
然后在有键值的基础加1,如果有就在原来基础上加1
'''
if friend.province not in address_dict.keys():
address_dict[friend.province]=0
address_dict[friend.province] +=1
'''
定义两个空列表,接收有效的地名和朋友数量
'''
xx=[]
yy=[]
for keys,value in address_dict.items():
'''
判断键值不能为空
'''
if keys!='':
'''
对键值中每个汉字或字母进行遍历
'''
for key in keys:
'''
单独判断键值中字母或数字是否是汉字
'''
if '\u4e00' <= key <= '\u9fff':
xx.append(keys)
yy.append(value)
'''
将地址和朋友数量用zip进行对应
'''
aa=[list(z) for z in zip(xx,yy)]
geo=(
Geo()
.add_schema(maptype="china")
.add("微信好友全国分布图",aa)
)
'''
将画出的地图数据结果渲染到网页上
'''
geo.render("微信好友全国分布图.html")
上述代码的运行结果如图所示。