概述

Part I

使用须知: 以下教程只适合2018年之前注册且支持登录网页版微信的用户使用。不符合条件的用户无法发起请求,即下述教程及代码无效!
也许你不知道微信还可以这样玩:由于微信给用户开放了一个调用对话等请求的API。于是乎,github上一大神便开发了ItChat开源项目,并进行了封装。ItChat可以干什么呢?不妨往下看看!

Part II

原理:利用爬虫技术和微信网页版的API接口来利用Python模拟登陆网页版微信,可以实现绝大部分网页版微信可以实现的功能,同时也具备网页版微信不具备的能力和乐趣。
功能:可以实现对微信的自动化管理。例如添加、删除好友,查看好友头像图片、昵称、签名,消息转发等。
要求:Python3.6.0以上版本(目前python最新版本3.8.1)
安装python完毕后最好在管理员命令提示符中输入python检查环境是否配置好,否则后续无法正常操作。

安装配置好python环境后接着看下面,ItChat功能丰富,题主也没有一一分析亲自测试,只是用了少部分功能,以下例举ItChat可以完成的几个工作

part III

下述源码均需要在管理员命令提示符(cmd)中安装itchat函数库后方可使用,请执行以下代码:

python -m pip install --upgrade pip
pip install itchat

词云图的自动生成

利用python爬虫爬取微信朋友圈近期好友发布的动态主题,分析朋友圈近期的生活状态,以朋友前使用频率最高的关键词为例生成词云图.

源码
# coding:utf-8
import itchat
import re
itchat.login()
friends = itchat.get_friends(update=True)[0:]
tList = []
for i in friends:signature = i["Signature"].replace(" ", "").replace("span", "").replace("class", "").replace("emoji", "")rep = re.compile("1f\d.+")signature = rep.sub("", signature)tList.append(signature)
text = "".join(tList)
import jieba
wordlist_jieba = jieba.cut(text, cut_all=True)
wl_space_split = " ".join(wordlist_jieba)
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
import os
import numpy as np
import PIL.Image as Image
d = os.path.dirname(__file__)
# 更改目录下Wordcloud生成图片,如:./me.jpg
alice_coloring = np.array(Image.open(os.path.join(d, "./me.jpg")))
my_wordcloud = WordCloud(background_color="white", max_words=50000, mask=alice_coloring,max_font_size=2000, random_state=60,font_path='C:\Windows\Fonts\simhei.ttf')\.generate(wl_space_split)
image_colors = ImageColorGenerator(alice_coloring)
plt.imshow(my_wordcloud.recolor(color_func=image_colors))
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
my_wordcloud.to_file(os.path.join(d, "me_cloud.png"))
itchat.send_image("me_cloud.png", 'filehelper')
操作步骤

安装运行py的函数库依赖(在cmd中输入以下代码):
1)更新pip依赖:

python -m pip install --upgrade pip

2)依次安装函数库:

pip install jieba
pip install pillow
pip install wordcloud
pip install rb

3)准备一张png/jpg图片作为词云图合成背景(该图片最好轮廓清晰,不要太花里胡哨,像素尽量高,否则效果不佳!),并在源码中修改背景图的路径和和名称。
4)双击py文件即可运行,此时会生成一个二维码图片2QCode,用手机微信扫码登陆,接着就是耐心等待python爬虫爬取和生成词云图。

微信自动回复

如果你不在线的时候该程序可以替你秒回复,支持实时显示收到消息的时间节点

import itchat
import time
@itchat.msg_register('Text')
def text_reply(msg):if not msg['FromUserName'] == myUserName:itchat.send_msg(u"[%s]收到好友@%s 的信息:%s\n" %(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(msg['CreateTime'])),msg['User']['NickName'],msg['Text']), 'filehelper')return u'[%s-Digran温馨提示您]\n国家有难,咱不添乱;坐在家里,就是贡献;\n亲戚不走,来年还有;朋友不聚,回头再叙;\n坐在家里,大火烤起;家人一聚,电影看起;\n健康第一,哪都不去;若要出去,口罩带起;\n远离人群,注意身体;隔离疫情,关注消息;\nDigran祝你,健康嗨皮!' % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(msg['CreateTime'])))if __name__ == '__main__':itchat.auto_login()myUserName = itchat.get_friends(update=True)[0]["UserName"]itchat.run()

微信群发消息

该代码适合用于管理者群发消息或者节日期间,由于微信好友太多没法一一祝福。该代码改变了以往群发消息死板的方式,可以获取微信好友备注,更显得人性化和真诚

#-*- coding:utf-8 -*-
import itchat
from time import sleep
itchat.auto_login()
friends=itchat.get_friends(update=True)[0:]
#myfriends = itchat.get_friends()
m=0
count=0
for i in friends:#beizhu1=i['UserName']Mark=i['RemarkName']if len(Mark)<30 and len(Mark)>1:message = '''国家有难,咱不添乱;坐在家里,就是贡献;\n亲戚不走,来年还有;朋友不聚,回头再叙;\n坐在家里,大火烤起;家人一聚,电影看起;\n健康第一,哪都不去;若要出去,口罩带起;\n到处检查,道路封闭;远离人群,注意身体;\n隔离疫情,关注消息;Digran愿你,健康嗨皮!'''itchat.send(msg=message, toUserName=i['UserName'])count+=1print(count)print('%s 的祝福已经发出!'% Mark)print('发送成功')print("\n")sleep(0.5)m=m+1print('共发出%d条祝福!' % m)

图片转字符

玩过抖音/快手的朋友应该看过有种视频,全是由字符构成的人在跳舞。以下代码不是合成视频,而是把图片转化成字符画。由于本人是用女朋友头像做的实验,不方便展示,敬请见谅!
注意:在运行前需要自己按标注修改成适合你的代码,且可能因缺少必要组件会报错,有疑问可以联系和咨询题主

import numpy
import matplotlib.pyplot
import cv2
KEYS = [0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01]
#先准备好图片转换后会变成哪些字符,一会儿还会对字符进行排序
charset = ['.', '!', '~', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '+']
#orders用于存放排序后字符的顺序
orders = numpy.zeros(len(charset))
#计算出每个符号再点阵中有多少个点显示
def numsofone_in_charbytes(text):# 先获取字符的ascii码值offset = ord(text)# 然后打开字库文件找到位置with open("./ASC16", "rb") as ASC16:location = offset*16ASC16.seek(location)retbytes = ASC16.read(16)# 已经获取到该字符的点阵表示字节retbytes,现在要计算这16字节中有多少个1count = 0for i in range(len(retbytes)):# 对于retbytes中的每一个字节for j in range(len(KEYS)):if KEYS[j] & retbytes[i]:count += 1return count
for s in range(len(charset)):orders[s] = numsofone_in_charbytes(charset[s])
print(orders)
#依据这个对点进行排序
#numpy.argsort()可以给出排序后各元素在原来数组中的索引
s = numpy.argsort(orders)
print(s)
#依据上面的索引重新对charset排序
charsetnew = []
for i in range(len(charset)):charsetnew.append(charset[s[i]])
print(charsetnew)
#排序完成后就可以建立图片像素和字符的映射
#建立映射并不是简单的一个像素对应一个字符,考虑到图片的大小问题
#有时需要进行缩放,不然做出来的字符画会过大无法显示
#这里我们将图片中每16*8大小的一个像素块的平均像素值映射成一个字符
#先写一个函数,将输入图片都裁剪成宽为8的倍数,高为16的倍数,即去掉右边和下面的余值
def trim_pic(img):shape = numpy.shape(img)# 如果图片本身的长宽不满足要求就直接返回空if shape[0] < 16 or shape[1] < 8:return Noneheight = shape[0]//16width = shape[1]//8print(height)print(width)trimed_pic = img[:height*16, :width*8]return trimed_pic
#裁剪完成后,将图片看成16*8大小像素块的组成,然后计算每一个像素块的平均像素值
#得到平均像素值的矩阵,其实相当于池化操作,这里的图片一律先转成灰度图再输入
def pool16_8(img):# shape,第一个元素是矩阵行数,所以是图片的高shape = numpy.shape(img)row = shape[0] // 16cow = shape[1] // 8avgpixel = numpy.zeros((row,cow), dtype=float)for i in range(row):for j in range(cow):# 此处计算各个像素块的平均值t = 0.0for t1 in range(16):for t2 in range(8):t += img[t1+i*16, t2+j*8]avgpixel[i, j] = t/(16*8)return avgpixel
#上面的函数完成后,再根据映射将元素替换成字符
def cvt2char(avgpixel, charset):# avgpixel是计算后的像素平均值,charset是用于制作字符画的字符集chars = len(charset)race = 255.0/charsshape = numpy.shape(avgpixel)retcharmatrix = []rowchar = []for i in range(shape[0]):for j in range(shape[1]):# 获取像素的等级s = avgpixel[i, j] // race# 得到对应的字符rowchar.append(charset[int(s)])retcharmatrix.append(rowchar[:])rowchar.clear()return retcharmatrix
#stackoverflow上一位大佬写的彩色图片转换成灰度图的代码
def rgb2gray(rgb):return numpy.dot(rgb[..., :3], [0.299, 0.587, 0.114])
#至此,所有的步骤都完成,下面是用图片做实验了
#读入一张图片
srcimg = matplotlib.pyplot.imread("D:\itchat\mine.jpg")
#转换成灰度图
grayimg = rgb2gray(srcimg)
#先裁剪一下
trimedimg = trim_pic(grayimg)
#再进行池化平均
pooledimg = pool16_8(trimedimg)
#再得到转换后的字符矩阵
charpic = cvt2char(pooledimg, charsetnew)
#简单输出看一下
for r in charpic:for c in r:print(c, end='')print()
'''
t = []
rect_list = []
for i in range(16):rect_list.append([])
print(rect_list)
text = ""
#获取text的gb2312编码
gb2312 = text.encode('gb2312')
print(gb2312)
#将gb2312转换成十六进制的表示,hex_str是bytes类的实例
hex_str = binascii.b2a_hex(gb2312)
print(type(hex_str))
#按照UTF-8编码转换成字符串
result = str(hex_str, encoding='utf-8')
#eval()函数执行一个字符串表达式,并返回表达式的值
#前两位对应汉字的第一个字节:区码
area = eval('0x'+result[:2]) - 0xA0
#后两位对应汉字的第二个字节:位码
index = eval('0x'+result[2:]) - 0xA0
offset = (94*(area-1) + (index-1)) * 32
front_rect = None
#读取HZK16的汉字库文件
with open("./HZK16", "rb") as f:# 找到text字的字模f.seek(offset)# 读取该字模font_rect = f.read(32)
for k in range(len(font_rect) // 2):每两个字节一行,一共16行row_list = rect_list[k]for j in range(2):for i in range(8):asc = font_rect[k*2+j]flag = asc & KEYS[i]row_list.append(flag)for row in rect_list:for i in row:if i:print('0', end=' ')else:print('.', end=' ')print()
'''

由于篇幅有限,这里只是展示部分代码,喜欢的本文话请给作者赞赏一下,你的赞赏是我坚持的动力!

微信还可以这样玩|ItChat相关推荐

  1. 图像还可以这样玩!如何用波的算法处理图像

    我对图像处理一直很感兴趣,曾经写过好几篇博客. 前几天读到一篇文章,它提到图像其实是一种波,可以用波的算法处理图像.我顿时有一种醍醐灌顶的感觉,从没想到这两个领域是相关的,图像还可以这样玩!下面我就来 ...

  2. 微信使用教程(微信怎么玩?微信公众平台教程)

    微信使用教程 现在没玩微信只能说是"来自星星的你"了,连80后学子手绘微信教程分享给父母了,没用微信的朋友们,该换手机的换手机,该开通微信的开通微信去! 微信教程目录 微信怎么玩 ...

  3. 神奇的streamlit (哇 原来深度学习还可以这样玩)

    神奇的streamlit (原来深度学习还可以这样玩) 文章目录 神奇的streamlit (原来深度学习还可以这样玩) Streamlit 简介 Streamlit带来的改变 Streamlit的简 ...

  4. python美元汇率兑换程序代码_还可以这样玩?用Python完成一个在线汇率转换小程序...

    原标题:还可以这样玩?用Python完成一个在线汇率转换小程序 大家好,小数在这里给大家拜个早年啦 今天给大家分享的是用Python完成一个在线汇率转换小程序,是基于一个持续更新的汇率网站实现的,让我 ...

  5. 我的世界java营火如何合成_我的世界如果有了篝火会怎么样? 原来MC还可以这样玩...

    众所周知<我的世界>JAVA版1.14,PE版1.10都加入了全新的方块"篝火".对于这个方块,我们充满了期待!若在这样的版本里玩MC,会发生什么呢? 这次" ...

  6. Python微信操控(itchat)

    Python微信操控(itchat) itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单. 开源地址 https://github.com/littlecodersh/ItC ...

  7. 世界杯+竞猜php,2018世界杯:分享微信游戏—玩竞猜更精彩

    原标题:2018世界杯:分享微信游戏-玩竞猜更精彩 2018年世界杯,又是一场有情怀的世界级赛事,曾经聚在学校食堂看世界杯,曾经在顶着黑眼圈爱世界杯,曾经为了争小贝更帅而面红耳赤...2018年的世界 ...

  8. 朋友圈人设文案价值百万,打造你的微信变现玩法

    朋友圈人设文案价值百万,打造你的微信变现玩法 相信大多数人一旦有一点时间,就会不自觉的掏出手机来看,这已经成了习惯.现代人空闲的时候都会逛逛朋友圈,那么如何打造朋友圈才能为你赚钱变现,积累人脉,为你带 ...

  9. 小程序源码:(更新)云开发微群人脉微信-多玩法安装简单

    大家好,今天给大家带来的这一款是经过优化更新并有所改动的一个版本 我们之前也发布过一款,今天这一款是在之前的哪一款的基础下增加优化 该小程序的群码都是系统自动采集的,所以没有上线但是没有群的烦恼 另外 ...

最新文章

  1. Docker 镜像小结 - 每天5分钟玩转 Docker 容器技术(21)
  2. 网络虚拟化是否需要额外的网络架构?
  3. what format should you export from matlab?
  4. CENTOS elasticsearch plugin install:Failed: SSLException[java.security.ProviderException,解决
  5. boost::hof::unpack用法的测试程序
  6. element-ui 可复选树型表格
  7. MongoDB教程——第2天
  8. 未预期的符号 `( 附近有语法错误_沈北附近的换锁上门
  9. csdn下载频道积分规则
  10. KVYcam(网络摄像头软件) v13.0.3.0
  11. 如何看Dlink DWA-125 无线网卡使用的芯片
  12. 若依前后端分离框架学习-1:前端引入
  13. 用python画一个正方形
  14. jquery动态修改背景图片
  15. 工作时间如何安排:集中注意力的方法
  16. Java工程师修炼之道
  17. ce玩家_当玩家选择错误时
  18. AUTOCAD——工作空间设置
  19. 抖音直播带货复盘数据怎么分析?3个小技巧快速掌握直播复盘
  20. python毕业设计Django框架校园鲜花水果购物商城毕业设计毕设参考

热门文章

  1. ATFX:道琼斯指数的反弹,11月能否突破35000关口?
  2. macOS SwiftUI 教程之 06 绘图实现正弦波,通过调整频率和步进值来更新正弦波视图 (教程含源码)
  3. 虚拟机的桥接模式和NAT模式
  4. php程序员学什么语言好就业_中高级PHP程序员应该掌握哪些技术?
  5. 42岁大厂高管,给30岁-39岁人提个醒:这6个让你变强的习惯,要尽快养成
  6. 阿里p7大手子测试笔记:一线互联网大厂面试问题吃透,巧过面试关
  7. python中if brthon环境安装包_Python实现base64编码的图片保存到本地功能示例
  8. 开源财务会计软件(搬运)
  9. 10.STC15W408AS单片机A/D转换器
  10. 打包SWF和HTML,将多个swf打包成一个EXE文件