Python

Python应用-导出微信的好友列表

2020-03-30  本文已影响0人  摸着石头过河_崖边树
tmpdir__17_9_7_15_04_07.jpg

一、主体实现的功能

  1. 核心流程
    导入import itchat ----> 定义好友列表变量 friendsList = [] # 好友列
    表-------->(可选)监听消息@itchat.msg_register(mesageTypes) -------> 登录网页微信itchat.auto_login----->获取好友列表 itchat.get_friends(核心代码) ------->itchat.run()开始运行

2、代码

import itchat
import sys
from weixin.ExcelWriteHelper import *
# 1.定义变量
currentUser = User()  # 当前登录者信息
friendsList = []  # 好友列表

# 2.处理接受微信的信息
def recive_wechat_message(message):
    replay = u'子彬正在沉迷于学习无法自拔,您可以直接给他留意,稍后她会回复'
    return replay

# 3.注册需要监听的数据
# 注册re_msg的意义在于,告诉itchat每次有符合特定条件的消息,itchat要把消息作为参数,去调用re_msg。
# 图片itchat.content.PICTURE
# 语音对应itchat.content.RECORDING
# 名片对应itchat.content.CARD
mesageTypes = [itchat.content.TEXT,   # 文本
           itchat.content.PICTURE,  # 图片
           itchat.content.RECORDING,  # 语音
           itchat.content.MAP,  # 地图
           itchat.content.CARD,  # 名片
           itchat.content.NOTE,  # note
           itchat.content.SHARING,  # 分享
           itchat.content.VIDEO,  # 视频
           ]
@itchat.msg_register(mesageTypes)
def text_replay(msg):
      print(msg)
      replay = u''
      fromUserName = msg['FromUserName']
      # 3.1.获取接受消息内容
      content = msg['Text']

       # 3.2.如果消息不是自己发出的有效
      if not fromUserName == currentUser.user_name:
          replay = recive_wechat_message(content)
      else:
           replay = u'自己发出消息自己收'
      return replay


 # 4.主函数入口
def main():
    # 4.1. 弹出微信登录二维码,扫描登录网页网微信
    itchat.auto_login(hotReload=True)

    # 4.2. 获取好友列表
    friends = itchat.get_friends(update=True)

     # 4.3.获取好友数据,重新组成好友列表
    for i in range(len(friends)):
        item = friends[I]
        if i == 0:
            currentUser.user_name = item['UserName']
            currentUser.nick_name = item['NickName']
            currentUser.head_img_url = item['HeadImgUrl']
            currentUser.remark_name = item['RemarkName']
            currentUser.signature = item['Signature']
            currentUser.sex = item['Sex']
            currentUser.city = item['City']
        else:
            user = User()
            user.user_name = item['UserName']
            user.nick_name = item['NickName']
            user.head_img_url = item['HeadImgUrl']
            user.remark_name = item['RemarkName']
            user.signature = item['Signature']
            user.sex = item['Sex']
            user.city = item['City']
            friendsList.append(user)
# 4.4.导出好友列表
exportFriends(friendsList)

# 4.5. 开始运行
itchat.run()

if __name__ == '__main__':
     main()

代码说明:
1、 使用框架itchat(第三方包):itchat是一个开源的微信个人号接口,里面功能特别强大
2、User是模型类对象

   # 用户模型
class User(object):
  def __init__(self):
        self.__user_name = ""
        self.__nick_name = ""
        self.__head_img_url = ""
        self.__remark_name = ""
        self.__signature = ""
        self.__sex = ""
        self.__city = ""

@property
def user_name(self):
    return self.__user_name

@user_name.setter
def user_name(self, value):
    self.__user_name = value

@property
def nick_name(self):
    return self.__nick_name

@nick_name.setter
def nick_name(self, value):
    self.__nick_name = value

@property
def head_img_url(self):
    return self.__head_img_url

@head_img_url.setter
def head_img_url(self, value):
    self.__head_img_url = value

@property
def signature(self):
    return self.__signature

@signature.setter
def signature(self, value):
    self.__signature = value

@property
def sex(self):
    return self.__sex

@sex.setter
def sex(self, value):
    if value == 1:
        self.__sex = '男'
    else:
        self.__sex = '女'

@property
def city(self):
    return self.__city

@city.setter
def city(self, value):
    self.__city = value

@property
def remark_name(self):
    return self.__remark_name

@remark_name.setter
def remark_name(self, value):
    self.__remark_name = value
  1. exportFriends 是导出的函数

    def exportFriends(friendsList):
        print('接受到的好友列表', friendsList)
        sheet_w = ExcelWriteHelper('test_sheet01', None)
        sheet_w.set_style(bold=True)
        title_list = ['姓名', '性别', '备注', '签名']
        sheet_w.inset_list_in_row(title_list, 0, 0)
        __index = 1
       for item in friendsList:
            row = list([item.nick_name, item.sex, item.remark_name, item.signature])
            sheet_w.inset_list_in_row(row, __index, 0)
            __index = __index + 1
       sheet_w.save_excel("test_sheet.xls")
    print('-------保存完成')
    

ExcelWriteHelper是我写的文件工具类,内部使用xlwt插件

  1. ExcelWriteHelper 工具类说明

    '''
     @作者: 子彬
     @描述:利用面向对象的思想写入excel中的内容
    '''
    
     import os
     import xlwt   #  写入文件小于255 使用,大于255 会报错
    class ExcelWriteHelper(object):
    
    # 初始化
      def __init__(self, sheet_name, style):
         # 1. 创建存放excel文件的对象
         self.__workBook = xlwt.Workbook()
         # 2. 创建存放excel文件中一张表格的对象cell_overwrite_ok 未设置将会报错
         self.__sheet = self.__workBook.add_sheet(sheet_name, cell_overwrite_ok=True)
         # 3.初始化样式
         if style:
             self.set_style(style.name,
                        style.height,
                        style.bold,
                        style.borders,
                        style.borders_colours)
         else:
             self.__style = xlwt.XFStyle()
             print('-------初始化样式None')
    
    # 设置单元格样式
    def set_style(self, name='Arial',
               height=400,
               bold=False,
               borders=True,
               borders_colours=0x40):
        # 初始化样式
        self.__style = xlwt.XFStyle()
    
         # 字体设置
         __font = xlwt.Font()  # 为样式创建字体
         __font.name = name
         __font.height = height
         __font.bold = bold
         self.__style.font = __font
    
        # 设置边框
        if borders is True:
             __border = xlwt.Borders()
             __border.left = xlwt.Borders.MEDIUM
             __border.right = xlwt.Borders.MEDIUM
             __border.top = xlwt.Borders.MEDIUM
             __border.bottom = xlwt.Borders.MEDIUM
             __border.left_colour = borders_colours
             __border.right_colour = borders_colours
             __border.top_colour = borders_colours
             __border.bottom_colour = borders_colours
             self.__style.borders = __border
    
    def save_excel(self, path):
       '''
       保存表格
       :param path: 保存的路径
       :return:
       '''
       __full_path = None
       if path:
           __full_path = path
       else:
           __full_path = ''  # 默认的路径
       # 保存数据
       self.__workBook.save(__full_path)
    
    def inset_value_in_cell(self, value, row_index, col_index):
     '''
      把字符串插入表格的某一个单元
     :param value:  插入的值
     :param row_index:  行号
     :param col_index:  列号
     :return:
     '''
     self.__sheet.write(row_index, col_index, value, self.__style)
    
    def inset_list_in_row(self, value, row_start_index, col_start_index):
     '''
     把列表填入表格的行
     :param value: 列表值
     :param row_start_index:  填入列表所在的起始行
     :param col_start_index:  填入列表所在的起始列
     :return:
     '''
     __row_index = 0
     __col_index = 0
     if row_start_index:
         __row_index = row_start_index
     else:
         __row_index = 0
    
     if col_start_index:
         __col_index = col_start_index
     else:
         __col_index = 0
    
     for __item in value:
         self.inset_value_in_cell(__item, __row_index, __col_index)
         __col_index = __col_index + 1
    
    def inset_list_in_col(self, value, row_start_index, col_start_index):
     '''
       把列表填入表格的列
     :param value:  数组列表值
     :param row_start_index:  填入列表所在的起始行
     :param col_start_index:  填入列表所在的起始列
     :return:
     '''
     __row_index = 0
     __col_index = 0
     if row_start_index:
         __row_index = row_start_index
     else:
         __row_index = 0
    
     if col_start_index:
         __col_index = col_start_index
     else:
         __col_index = 0
    
     for __item in value:
         self.inset_value_in_cell(__item, __row_index, __col_index)
         __row_index = __row_index + 1
    
    def inset_list_in_area(self, value, row_start_index, col_start_index):
     '''
     把列表填入区域 - 按顺序填入表格
     :param value:
     :param row_start_index:
     :param col_start_index:
     :return:
     '''
     __row_index = row_start_index
     __col_index = col_start_index
     for item_list in value:
         for item in item_list:
             self.inset_value_in_cell(item, __row_index, __col_index)
             __col_index = __col_index + 1
         # 换行
         __col_index = row_start_index
         __row_index = __row_index + 1
    

代码说明:
A、init内置方法,初始化
B、set_style 设置单元格样式
C、save_excel 保存表格
D、inset_value_in_cell 把字符串插入表格的某一个单元
E、inset_list_in_row把列表填入表格的行
F、inset_list_in_col把列表填入表格的列
G、inset_list_in_area把列表填入区域 - 按顺序填入表格

结果:导出test.sheet.xls

image.png

最后赠言

学无止境,学习Python的伙伴可以多多交流。

上一篇 下一篇

猜你喜欢

热点阅读