首页 编程教程正文

安卓通讯录同步抖音头像

piaodoo 编程教程 2020-02-22 22:03:32 900 0 python教程

本文来源吾爱破解论坛

本帖最后由 mliang 于 2019-5-22 17:25 编辑
最近在自学python,学习语法感觉挺枯燥的,看的时候都觉得会了,可是一写代码就懵了。 所以想搞个小项目来边学习边练手,这个项目挺简单的 获取抖音的通讯录好友头像,然后写入到手机的通讯录中 导出联系人文件(.vcf)到电脑上,并同时备份一份。 切记一定要备份好通讯录 切记一定要备份好通讯录 切记一定要备份好通讯录 在手机通讯录中导入,然后导入到电脑上 我的手机小米note3,导入出来的文件是3.0的(VERSION:3.0),华为的可能是2.0(VERSION:2.0),我的代码不适合2.0的,因为2.0的文件中对中文做了编码,前两行跟最后一行是固定的,中间的就是一个联系人的信息。姓名不是中文的不可以使用,会乱码。 >BEGIN:VCARD
VERSION:3.0
N:;张三;;;
FN:张三
TEL;TYPE=CELL:18611111111
ORG;CHARSET=UTF-8:联通
END:VCARD 使用mitmdump获取抖音的通讯录好友列表

- 需要安装mitmproxy,requests两个包(pip install 包名)

- 有关mitmproxy的具体配置 <https://blog.csdn.net/freeking101/article/details/83901842>
整个过程中用到的包除了上面两个需要自己安装,其他的都是内置的。文件名(douyin_users.py)
import json

'''
pip install mitmproxy,requests
在当前脚本所子目录下运行 mitmdump -s users.txt
打开抖音app,进入通讯录好友页面
'''
# 获取抖音通讯录好友信息
def response(folw):

    if 'aweme/v1/user/contact' in folw.request.url:
        # 定义一个字典,用来存储需要的数据
        users = {}
        # 用户信息是json数据
        user_list = folw.response.text
        # 把json数据转换成python的字典
        dict_users = json.loads(user_list)
        for user in dict_users['user_list']:
            # 只提取里面的名字跟头像的url
            name = user['third_name']
            url = user['avatar_thumb']['url_list'][0]
            # 把数据存储到字典中
            users[name] = url
        if len(users)>0:
            # 如果字典中有数据,就把数据写入到文件中
            with open('users.txt', 'a', encoding='utf-8') as f:
                # 一行一行的写,'\n'代表换行,方便以后读取数据
                f.writelines(json.dumps(users)+'\n')



​    ```

把头像图片进行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

把写入完成的文件传入手机,导入联系人 代码有很多不完善的地方,只是实现了功能,我也是在边学边写下完成的。

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7449.html

搜索