前言
都说抖音有毒,一刷就停不下来了。看来抖音这款产品紧紧抓住了人们内心深处的某些需求。当然今天不是来探讨抖音这款产品的啊。今天我们来学习如何用Python实现自动刷抖音,并为颜值高的的小哥哥小姐姐点赞并评论。
项目环境
语言:Python3
编辑器:Pycharm
其他工具:手机一个,数据线一条,android studio
实现思路
1.获取手机抖音短视频的截图
2.调用百度API识别人脸
3.对符合条件的视频点赞和评论
获取抖音视频的截图
获取视频截屏,在这里用的是adb工具。adb工具即Android Debug Bridge(安卓调试桥)。是连接Android手机与PC端的桥梁,通过adb可以管理、操作模拟器和实体设备,如安装软件、查看设备软硬件参数、系统升级、运行shell命令等。在这里通过命令行窗口发送对应的命令,就可以实现手机的截屏。如果没有安装adb工具包,需要先安装adb工具包。
具体实现代码
# 图片压缩比例 SIZE_normal = 1.0 SIZE_small = 1.5 SIZE_more_small = 2.0 # adb手机截图 def get_screen_shot_img(): # 截图 os.system(\"adb shell /system/bin/screencap -p /sdcard/screenshot.jpg\") os.system(\"adb pull /sdcard/screenshot.jpg face.jpg\") # 压缩图片 img = Image.open(\"face.jpg\").convert(\'RGB\') scale = SIZE_small w, h = img.size img.thumbnail((int(w / scale), int(h / scale))) img.save(\'face.jpg\')
调用百度API识别人脸
(1)进入百度云的人脸识别控制台
https://console.bce.baidu.com/ai/?_=1528192333418&fromai=1#/ai/face/overview/index
若没有百度账号,可以用手机号快速注册一个。
(2)创建人脸识别应用
账号登录成功之后,你需要创建应用才能正式调用百度api,应用创建成功后会获取到应用对应的API Key及Secret Key,用着两个参数进行接口调用操作,及相关配置。
点击上图中的创建应用,填写【应用名称】和【应用描述】,即可创建应用(其他选项可以不做操作,使用默认值即可)
(3)获取秘钥
创建完成后,点击“返回应用列表”进行下一步操作。平台将会分配给你此应用的相关凭证:API Key、Secret Key。他将用于在下一步获取调用接口所需的Access Token中。
(4)拿到API Key,Secret Key之后,通过这两个参数获取调用接口所需的Access Token
具体实现代码
def get_access_token(): # client_id 为官网获取的AK, client_secret 为官网获取的SK host = \'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】\' \\ \'&client_secret=【官网获取的SK】 \' header_dict = {\'User-Agent\': \'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko\', \"Content-Type\": \"application/json\"} req = request.Request(url=host, headers=header_dict) res = request.urlopen(req) res = res.read() res_json = json.loads(res.decode(\'utf-8\')) return res_json[\"access_token\"]
调用百度API
\'\'\' 调用百度API,进行人脸探测 imgPath:图片的地址 access_token:开发者token \'\'\' def get_face_info_from_bai_du(img_path, access_token): # 接口请求地址 request_url = \"https://aip.baidubce.com/rest/2.0/face/v3/detect\" # 二进制方式打开图片文件 f = open(img_path, \'rb\') # 图片转换为base64 img = base64.b64encode(f.read()) params = {\"face_field\": \"age,beauty,gender\", \"image\": img, \"image_type\": \'BASE64\', \"max_face_num\": 5} params = urllib.parse.urlencode(params).encode(encoding=\'utf-8\') request_url = request_url + \"?access_token=\" + access_token # 调用post请求方法 face_info = get_info_post_json_data(request_url, params) # json字符串转对象 face_json = json.loads(face_info) print(face_info) if face_json[\'error_msg\'] == \'SUCCESS\': # 如果没有发现人像,会返回空 if face_json[\'result\'][\'face_num\'] == 0: face_dict = {} else: # 把想要的部分提取存入字典中 result = face_json[\'result\'][\'face_list\'][0] gender = result[\'gender\'][\'type\'] age = str(result[\'age\']) beauty = str(result[\'beauty\']) face_dict = {\"gender\": gender, \"age\": age, \"beauty\": beauty} return face_dict
注意此处有坑,说说我入坑的过程。申请完ak和sk之后我调用人脸识别的api。返回的消息是:{‘error_code\’: 6, ‘error_msg\’: ‘No permission to access data\’}。我一查官方文档说是没有获取用户数据的权限。需要啥权限呢,难道调用这个接口还需要申请权限?不是有ak和sk吗?各种百度,无果。放弃了。晚上继续搞,这次从官方文档入手找原因。无意看到说是api升级了。从v2升级到了v3。我申请的ak和sk对应的是v3版的。而我调用的接口确实v2版的。具体体现在请求URL的区别上,所以苦苦找不到原因。从入坑的经历获取的教训是:一定要仔细看官方文档;找不出bug的时候,就先放一放,回头再看,就会茅塞顿开,一切迎刃而解。
下面给出正常调用api返回的json数据
{ \"error_code\":0, \"error_msg\":\"SUCCESS\", \"log_id\":304592828857184421, \"timestamp\":1542885718, \"cached\":0, \"result\":{ \"face_num\":1, \"face_list\":[ { \"face_token\":\"9ae54ea1941d2b9d8a7e881f3ae39fe1\", \"location\":{ \"left\":374.5, \"top\":406.94, \"width\":140, \"height\":136, \"rotation\":30 }, \"face_probability\":0.99, \"angle\":{ \"yaw\":-12, \"pitch\":10.26, \"roll\":29.76 }, \"age\":21, \"beauty\":53.22, \"gender\":{ \"type\":\"female\", \"probability\":1 } } ] } }
人脸识别这块。是根据你调用接口所传的参数来返回你需要的值。传的参数越多,返回消息越详细。我这里只获取年龄,性别,颜值这几个参数。同样v2版的接口和v3版的接口返回的数据格式也是有区别的。
对符合条件的视频点赞和评论
获取到api返回的数据后就是一些判断。我这里的判断是:如果识别到人脸,年龄在18岁以上,颜值在40以上。就点赞+评论。
具体实现
\'\'\' 将获得的数据进行分析 face_dict:人脸识别后的数据 \'\'\' def analysis_face(face_dict): # 如果发现人脸继续判断 if len(face_dict) != 0: # 如果为女生 if face_dict[\"gender\"] == \"female\": print(\"性别:女\") print(\"年龄:\" + face_dict[\"age\"]) print(\"颜值:\" + face_dict[\"beauty\"]) # 如果颜值在40以上,并且年龄大于18继续 if float(face_dict[\"beauty\"]) > 40 and float(face_dict[\"age\"]) > 18: # 点赞 commentaries() print(\"------------------捕获小姐姐一枚------------------\") print(\"------------------颜值好高哦,已点赞❤------------\") else: print(\"颜值不及格,继续努力,下一个\") # 如果为男生 else: print(\"性别:男\") print(\"年龄:\" + face_dict[\"age\"]) print(\"颜值:\" + face_dict[\"beauty\"]) # 如果颜值在40以上,并且年龄大于18继续 if float(face_dict[\"beauty\"]) > 40 and float(face_dict[\"age\"]) > 18: # 点赞 commentaries() print(\"------------------捕获小哥哥一枚------------------\") print(\"------------------颜值好高哦,已点赞❤------------\") else: print(\"颜值不及格,继续努力,下一个\") else: print(\"没有发现小姐姐和小哥哥,下一个\") # 上滑新视频 next_video()
怎么实现点赞和评论呢?没错还是使用adb工具。不过这里还需要用到一个Android studio 插件——Android Device Monitor。为什么要用他呢。因为当我们点赞的时候,需要知道点赞这个按钮在屏幕的具体位置。同理评论也需要知道评论输入框的坐标位置。
下面来看怎么用Android Device Monitor获取手机屏幕坐标信息。
连接上手机之后,如上图4个步骤。就可以获取到手机屏幕任意一点的位置坐标。这里只需要输入大概的位置坐标即可。那么这个插件从哪来呢。据说Android Studio3.0之前的版本,都自带这个插件。而我刚好是3.0之后的版本,所以还需要另外做些工作。具体使用方式如下:
在android-sdk/tools/目录的命令行中输入以下内容:monitor。即进入CMD窗口,cd到当时安装Android-sdk的目录,再继续cd到tools目录下,然后输入命令monitor,这是期待已久的Android Device Monitor就会出现。因为每款手机的屏幕尺寸可能不一样。所以下面的参数仅是我手机测量得到的坐标。
下面就是具体点赞评论的实现
# 点赞评论 def commentaries(): os.system(\"adb shell input tap 1000 1200\") # 点赞 time.sleep(0.01) os.system(\"adb shell input tap 1000 1400\") # 点击评论按钮 time.sleep(0.05) os.system(\"adb shell input tap 50 2000\") # 获取EditText输入框焦点 os.system(\"adb shell am broadcast -a ADB_INPUT_TEXT --es msg \'真好真好\'\") # 评论 os.system(\"adb shell input tap 1000 1860\") # 发送评论 time.sleep(1) os.system(\"adb shell input tap 500 100\") # 退回主界面
这里还有一点需要注意:adb shell input text 不支持中文输入。只能输入\’hello world\’这样的英文,输入英文前也是需要将键盘切换到英文输入模式下的。继续百度,如何实现中文输入,发现另一个神器—ADBKeyBoard.apk,一款老外写的输入法。完美解决不能输入中文的问题。源码地址:https://github.com/senzhk/ADBKeyBoard。安装这个app。并将默认输入法切换成ADBKeyBoard。
最后提醒大家,抖音会限制一个账号在一段时间内的评论次数,长时间高频率的评论抖音就会暂时关掉你的评论权限。会给你来一句“你的发言太快了,请你控制寄几”,估计害怕有人专门刷评论。不过个把小时就会解封。
暂无评论内容