Python应用-导出微信的好友列表
2020-03-30 本文已影响0人
摸着石头过河_崖边树
tmpdir__17_9_7_15_04_07.jpg
一、主体实现的功能
- 核心流程
导入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
-
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插件
-
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的伙伴可以多多交流。