zoukankan      html  css  js  c++  java
  • 第一个微信小项目

    今天,利用我们当前学习的知识,加上一些牛逼的python库的学习,我们已经可以自己做一个微信小项目了!

    这次的项目我们需要实现的功能是统计自己的微信的好友数量,同时统计出他们各自的性别,个性签名,所在地区等信息!

    当然啦,不仅仅是统计出数据,我们还希望通过这些数据将他们可视化输出,比如将各位好友的所在地可视化为词云形式,用一种生动活泼形式直观展现出来;

    或者是将他们表现在地图上,将各自的所在地以全国规模表现出来,更加直观且逼格满满!

    话不多说!马上开始!

    我们首先要解决的问题是微信好友信息统计!

    这个版块我们需要用到的库可以有许多,这里介绍两种:

    一种是利用itchat做,它的实现相对简单,它的与微信建立连接的方式是用二维码登录,由语句“itchat.auto_login(hotReload=True)”登录

    itchat.get_friends(update=True)获取朋友名称信息……

    下面是代码:

    import itchat
    from itchat.content import TEXT
    from itchat.content import *
    import sys
    import time
    import re
    import importlib
    importlib.reload(sys)
    import os
     
    @itchat.msg_register([TEXT,PICTURE,FRIENDS,CARD,MAP,SHARING,RECORDING,ATTACHMENT,VIDEO],isGroupChat=True)
    def receive_msg(msg):
        groups = itchat.get_chatrooms(update=True)
        friends = itchat.get_friends(update=True)
        print ("群数量:",len(groups))
        for i in range(0,len(groups)):
            print (i+1,"--",groups[i]['NickName'],groups[i]['MemberCount'],"")
        for f in range(1,len(friends)):#第0个好友是自己,不统计
            if friends[f]['RemarkName']: # 优先使用好友的备注名称,没有则使用昵称
                user_name = friends[f]['RemarkName']
            else:
                user_name = friends[f]['NickName']
                sex = friends[f]['Sex']
                print (f,"--",user_name,sex)
        print ("好友数量",len(friends)-1)        
    itchat.auto_login(hotReload=True)
    itchat.run()

    运行程序,就可以自动跳出登录二维码,扫码进行登录以连接你的微信!

    最终统计出的结果被打在屏幕上:

     这就统计出了我微信的好友数量,各自信息(该代码只有微信名,性别,1为男性,2为女性,0为其他),以及群信息……

     这是比较基础的,但是如果想要可视化,我们必须把信息都存起来!,便于今后运用,于是我们用第二种形式:

    利用wxpy库实现:

    # -*- coding: utf-8 -*-
    """
    Created on Wed Jun  5 15:21:39 2019
    
    @author: DELL
    """
    
    import wxpy 
    bot = wxpy.Bot(cache_path=True)  
    friend_all = bot.friends()
    print(friend_all[0].raw)
    print(len(friend_all))
    lis=[] 
    for a_friend in friend_all:
        NickName = a_friend.raw.get('NickName',None)
        Sex = a_friend.raw.get('Sex',None)     
        Sex ={1:"",2:"",0:"其它"}.get(a_friend.raw.get('Sex',None),None)     
        City = a_friend.raw.get('City',None)     
        Province = a_friend.raw.get('Province',None)     
        Signature = a_friend.raw.get('Signature',None)     
        HeadImgUrl = a_friend.raw.get('HeadImgUrl',None)     
        HeadImgFlag  = a_friend.raw.get('HeadImgFlag',None)     
        list_0=[NickName,Sex,City,Province,Signature,HeadImgUrl,HeadImgFlag] 
        lis.append(list_0) 
    def Tongji(filename,lis):     
        import openpyxl     
        wb = openpyxl.Workbook()     
        sheet = wb.active     
        sheet.title = 'list2excel07'     
        file_name = filename +'.xlsx'     
        for i in range(0, len(lis)):         
            for j in range(0, len(lis[i])):             
                sheet.cell(row=i+1, column=j+1, value=str(lis[i][j])) 
        wb.save(file_name)     
        print("写入数据成功!") 
    Tongji('tongji',lis)
    Friends = bot.friends() 
    data = Friends.stats_text(total=True, sex=True,top_provinces=30, top_cities=500) 
    print(data) 

    我们利用这个库,统计出来更多的数据:微信名,性别,所在城市,省份,甚至是个性签名!

    我们将他们保存为excel文件,另存为“tongji.xlsx”文件,我们看到最终它被保存到了桌面:

    非常nice!,实现了我们的预期!

    我们趁热打铁,将他们所在城市输出成词云!

    这个时候我们需要了解词云库!

    一是wordcloud,我们需要将我们已经导出的excel表数据链接,我们利用pandas库,语句为:df = pd.read_excel(r'tongji.xlsx')

    统计出来的不仅有各自的地点名字,词云还可以根据频率在显示时自定义文字大,频率高了就字体大一些,小了就字体小些。

    我们最终的效果:

    作为汕头人,当然是汕头的朋友认识得比较多啦哈哈哈~

    最后一个可视化项目是,将这些城市在地图上标出来!!

    似乎很难……但是强大的python库能够做到几乎一切你能想到想不到的事!

    首先需要安装地图数据包:

    pip install echarts-china-provinces-pypkg(中国各省份的地图)

    pip install echarts-countries-pypkg(中国地图)

    于是接上你的excel表,就能制作炫酷的图表进行可视化啦!

    代码:

    from pyecharts import Map
    import pandas as pd
    df = pd.read_excel(r'tongji.xlsx')
    province_list = df['province'].fillna('NAN').tolist()
    count_province = pd.value_counts(province_list)
    value =count_province.tolist()   
    attr =count_province.index.tolist() 
    map = Map("微信好友分布", width=1200,
    height=600)
    map.add("", attr, value, maptype='china',is_visualmap=True,visual_text_color='#000',is_label_show=True)
    map.render('map01.html')
    if 1:
        print("Successful!")
    else:
        print("fail!")

    当然我们可以自己加一些提示代码来时刻提醒我们代码运行是否成功:

    这时候桌面就有了一个网页端

    打开就可以见证奇迹了!

     简介直观……很显然,在地图上可以看出,我是个广东人……

    这次的小项目还挺成功哈哈哈,今天的学习先到这里!!

    今天的学习还有一个彩蛋!!

    我们可不可以利用python制作出微信自动回复机器人??

    当然可以!我们先在“图灵机器人官网”创建一个属于你自己的机器人:

     登录之后就可以自己创建了,下面是我创建的一只机器人(创建时可以设置其属性,我的是聊天倾诉型):

    下面用代码实现:

    from wxpy import Bot,Tuling,embed,ensure_one
    bot = Bot()
    my_friend = ensure_one(bot.search('林狗'))  #想和机器人聊天的好友的备注
    tuling = Tuling(api_key='ee8fb3854a6d40c1a0e42f57d7ac0342')
    @bot.register(my_friend)  # 使用图灵机器人自动与指定好友聊天
    def reply_my_friend(msg):
        tuling.do_reply(msg)
    embed()

    依然利用wxpy这个强大的库,调用图灵机器人,链接到我指定的一位微信好友“林狗”这时他跟我聊天时,我就能自动回复他了!

    (这位兄台最终也搞了一个机器人,于是我们的有了下面的一幕……)

    哈哈哈这就有点好玩了,有兴趣的快去试试吧!

    自动回复机器人,你值得拥有!

  • 相关阅读:
    java cp命令
    Ubuntu相关IP配置(转)
    (转)Linux操作系统下VMware的多网卡桥接转换
    Linux问题FAQ1
    hadoop运行常见问题FAQ
    hadoop运行故障问题解决1——datanode节点启动后自动关闭
    Java程序设计9——泛型
    一道灵活的css笔试题
    inherit与auto
    再谈visibility:hidden和display:none
  • 原文地址:https://www.cnblogs.com/iconangle/p/10983493.html
Copyright © 2011-2022 走看看