1. 程式人生 > >我用 Python 實現自動刷抖音小姐姐!

我用 Python 實現自動刷抖音小姐姐!

前言

都說抖音有毒,一刷就停不下來了,看來抖音這款產品緊緊抓住了人們內心深處的某些需求。當然今天不是來探討抖音這款產品的啊。今天我們來學習如何用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)進入百度雲的人臉識別控制檯,若沒有百度賬號,可以用手機號快速註冊一個。

(2)建立人臉識別應用

賬號登入成功之後,你需要建立應用才能正式呼叫百度api,應用建立成功後會獲取到應用對應的API Key及Secret Key,用著兩個引數進行介面呼叫操作,及相關配置。

我用 Python 實現自動刷抖音小姐姐!

 

點選上圖中的建立應用,填寫【應用名稱】和【應用描述】,即可建立應用(其他選項可以不做操作,使用預設值即可)

(3)獲取祕鑰

建立完成後,點選“返回應用列表”進行下一步操作。平臺將會分配給你此應用的相關憑證:API Key、Secret Key。他將用於在下一步獲取呼叫介面所需的Access Token中。

我用 Python 實現自動刷抖音小姐姐!

 

(4)拿到API Key,Secret Key之後,通過這兩個引數獲取呼叫介面所需的Access Token

我用 Python 實現自動刷抖音小姐姐!

 

具體實現程式碼

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。返回的訊息是:{'errorcode': 6, 'errormsg': '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
 }
 }
 ]
 }
}

python 人臉識別這塊。是根據你呼叫介面所傳的引數來返回你需要的值。傳的引數越多,返回訊息越詳細。我這裡只獲取年齡,性別,顏值這幾個引數。同樣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獲取手機螢幕座標資訊。

我用 Python 實現自動刷抖音小姐姐!

 

連線上手機之後,如上圖4個步驟。就可以獲取到手機螢幕任意一點的位置座標。這裡只需要輸入大概的位置座標即可。那麼這個外掛從哪來呢。據說Android Studio3.0之前的版本,都自帶這個外掛。而我剛好是3.0之後的版本,所以還需要另外做些工作。具體使用方式如下: 在android-sdk/tools/目錄的命令列中輸入以下內容:monitor。即進入CMD視窗,cd到當時安裝Android-sdk的目錄,再繼續cd到tools目錄下,然後輸入命令montior,這是期待已久的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,一款老外寫的輸入法。完美解決不能輸入中文的問題。

安裝這個app。並將預設輸入法切換成ADBKeyBoard。這款app我已上傳到百度雲。後臺回覆【輸入法】,就可獲取。

我用 Python 實現自動刷抖音小姐姐!

 

最後執行程式!即可自動刷!

進群:548377875   即可獲取數十套PDF的獲取方式哦!