In [1]:
#我的Python版本是:
import sys
print(sys.version)
print(sys.version_info)
=======注意=======
这里我用Python2.7,实际上代码在Python3.6,3.5运行一切正常。itchat更新后就没有再测试啦。
注意微信更新了反广告机制,注意不要一次性发太多东西,避免被微信封号。
=======注意=======
登录微信网页版,itchat.auto_login()
会生成QR码,使用手机扫一扫即可登录。
提示Please scan the QR code to log in.
时,用手机扫描弹出的二维码
itchat.auto_login(enableCmdQR=True)
itchat.auto_login(enableCmdQR=-1)
In [2]:
import itchat
itchat.auto_login()
使用friends
储存好友列表,update=True
可以确保好友列表是最新的。注意好友列表第0个是自己
In [3]:
friends = itchat.get_friends(update=True)[0:]
friends
好友列表第0个是自己,我们可以看一下。顺带说一下,好友列表的顺序 (貌似) 是按照好友添加顺序
In [4]:
friends[0]
Out[4]:
创建一个目录,用来保存所有好友头像。注意使用os.chdir(user)
切换个到工作目录,方便后续保存图片。
In [5]:
import os
user = friends[0]["PYQuanPin"][0:]
print(user)
os.mkdir(user)
os.chdir(user)
os.getcwd()
Out[5]:
批量下载好友头像,储存到friends[i]['img']
中。然后我们print(friends[0]
看看有没有变化(正常情况下应该可以看到增加了img,以二进制方式储存头像)。因为我家网络经常链接失败,所以用try...except...
来写这一段。
"UserName"
这个字段开头总有个@符号,直接暴力去除。如果不喜欢的话,可以把"UserName"
换成"PYQuanPin"
,不过不保证重名。
同时把头像保存在user
目录地下,方便下一步使用。
错误是由于从os模块引入了所有的函数导致的,os模块下有一个open函数,接受整型的文件描述符和打开模式,from os import *
引入os模块的open函数,覆盖了python内建的open函数,导致错误。删除from os import *
这行,然后再根据需要,指定引入os模块下的函数
In [6]:
for i in friends:
try:
i['img'] = itchat.get_head_img(userName=i["UserName"])
i['ImgName']=i["UserName"][1:] + ".jpg"
except ConnectionError:
print('get '+i["UserName"][1:]+' fail')
fileImage=open(i['ImgName'],'wb')
fileImage.write(i['img'])
fileImage.close()
#这里不建议看friends[0],太长了
看看我有多少个好友(friends里面有多少条记录),看看下载了多少头像(os.listdir(os.getcwd())
看目录底下有多少文件)
In [7]:
friendsSum=len(friends)
imgList=os.listdir(os.getcwd())
numImages=len(imgList)
print('I have ',friendsSum,'friend(s), and I got ',numImages,'image(s)')
单个图像边长eachsize=64
像素,一行eachline=int(sqrt(numImages))+1
个头像,最终图像边长eachSize*eachline
In [8]:
import math
eachSize=64
eachLine=int(math.sqrt(numImages))+1
print("单个图像边长",eachSize,"像素,一行",eachLine,"个头像,最终图像边长",eachSize*eachLine)
import图像处理Python图像处理库:PIL中Image
In [9]:
import PIL.Image as Image
toImage = Image.new('RGBA', (eachSize*eachLine,eachSize*eachLine))#新建一块画布
x = 0
y = 0
for i in imgList:
try:
img = Image.open(i)#打开图片
except IOError:
print("Error: 没有找到文件或读取文件失败",i)
else:
img = img.resize((eachSize, eachSize), Image.ANTIALIAS)#缩小图片
toImage.paste(img, (x * eachSize, y * eachSize))#拼接图片
x += 1
if x == eachLine:
x = 0
y += 1
print("图像拼接完成")
看一下拼接好的图像是什么样的(注意文件过大是常有的现象,请先去掉注释) 回到上一级目录(没人想在一堆文件里面找拼图吧?) 然后保存文件,顺带发送给文件传输助手
In [14]:
toImage.show()
os.chdir(os.path.pardir)
os.getcwd()
toImage.save(friends[0]["PYQuanPin"][0:]+".jpg")
itchat.send_image(friends[0]["PYQuanPin"][0:]+".jpg", 'filehelper')
Out[14]:
至此,大功告成,别忘记退出网页版微信
In [15]:
itchat.logout()
Out[15]: