把头像图片进行base64编码,并写入.vcf文件的PHOTO;ENCODING=BASE64;JPEG:{}后面
- ```python
import json, os, base64, re
import requests
当前目录下建立一个img的文件,用来存储用户头像
img_path = os.path.join(os.getcwd(), 'img')
需要写入vcf文件中的
photo = 'PHOTO;ENCODING=B;TYPE=JPEG:'
读取users.txt中的好友信息
def get_user():
with open('users.txt', 'r') as f:
按行读取用户信息
users_list = f.readlines()
# 取到的用户信息是一个列表,列表中的元素是字典
for users in users_list:
users = json.loads(users)
for name, url in users.items():
# 调用下载图片的函数
download_img(name, url)
下载好友头像,两个参数,一个用户名(跟手机通讯录存储的名字一样),一个是头像url
def download_img(name, url):
如果img文件夹不存在
if not os.path.exists(img_path):
# 创建
os.mkdir(img_path)
# 向url地址发送一个get请求
res = requests.get(url)
# 获取图片后缀名
hz = res.headers['Content-Type'].split('/')[1]
# 下载图片
with open(os.path.join(img_path, '%s.%s' % (name, hz)), 'wb') as f:
f.write(res.content)
print('文件:%s.%s写入完毕' % (name, hz))
把图片的base64编码写入.vcf文件中
def write_vcf():
读取文件并获取每个联系人的信息
with open('00001.vcf', 'r', encoding='utf-8') as f:
tel = f.read()
# BEGIN:VCARD 中间的信息就是一个联系人的信息 END:VCARD,用正则表达式匹配联系人信息
pa = re.compile('BEGIN:VCARD(.*?)END:VCARD', re.S)
messages = pa.findall(tel)
# FN: 中间是联系人的姓名 \n
n = re.compile('FN:(.*?)\n', re.S)
for mes in messages:
name = n.findall(mes)[0]
# 如果PHOTO不存在联系人信息中,说明通讯录中没有这个人的头像,否则就是有头像不处理
if 'PHOTO' not in mes:
# 返回联系人姓名,跟其他信息
yield name, mes
m = img_base64_encode()
# 把文明写入相应的联系人信息中
with open('00009.vcf', 'a', encoding='utf-8') as f:
# 如果通讯录中的联系人存在m.keys(),就把他的头像信息写入vcf文件中,
# 如果不存在,说明这个人没有开通抖音或者已经有头像了。
if name in m.keys():
f.write('BEGIN:VCARD')
# 此人的其他信息
f.write(mes)
# 此人的头像信息
f.write(photo + m[name] + '\n')
f.write('END:VCARD' + '\n')
把头像图片进行base64编码
def img_base64_encode():
存储用户名跟头像base64编码的字典
m = {}
for filename in os.listdir(img_path):
# 获取img目录下的所有图片文件的名称,并提取用户名(文件名是以用户名命名的)
name = filename.split('.')[0]
with open(os.path.join(img_path, filename), 'rb') as f:
# 把图片文件进行base64编码
s = base64.b64encode(f.read())
# print('%s的base64编码是:%s' % (name,str(s, encoding='utf-8')))
m[name] = str(s, encoding='utf-8')
return m
g = write_vcf()
for a in range(30):
print(g.next())
get_user()
while True:
try:
print(g.next())
except StopIteration:
print("已经完毕")
break