数据获取第三部分
- 一、go请求抖音接口
- 二、go获取数据
- 三、python自动化获取抖音iid
- 四、python服务端代码部署签名算法
一、go请求抖音接口
1.获取直播间列表接口
https://webcast.amemv.com/webcast/feed/?cate_id=0&channel_id=21&content_type=0&req_type=0&show_location=0&style=2&sub_channel_id=0&sub_type=live_merge&tab_id=1&type=live&max_time=1632617241765&req_from=feed_loadmore&enter_source=live_merge-live_cover&webcast_sdk_version=1560&webcast_language=zh&webcast_locale=zh_CN&os_api=22&device_type=MI%209&ssmix=a&manifest_version_code=110501&dpi=240&uuid=863254316123529&app_name=aweme&version_name=11.5.0&ts=1632617268&cpu_support64=false&app_type=normal&ac=wifi&host_abi=armeabi-v7a&update_version_code=11509900&channel=gdt_growth14_big_yybwz&_rticket=1632617268230&device_platform=android&iid=1539749293618855&version_code=110500&mac_address=00%3AF4%3A8D%3A7F%3AEB%3AED&cdid=26ef06f3-d0c5-4ed1-bc88-3bca82ce7966&openudid=10d8232e457a66ec&device_id=3825946774998071&resolution=1280*720&os_version=5.1.1&language=zh&device_brand=Android&aid=1128&mcc_mnc=46007
接口可变参数
max_time 下一页游标,请求接口后返回下一页的游标
ts 时间戳
_rticket 毫秒时间戳
iid和device_id 用户唯一表示(可能被抖音封禁)
url := fmt.Sprintf("https://webcast.amemv/webcast/feed/?cate_id=0&channel_id=21&content_type=0&req_type=0&show_location=0&style=2&sub_channel_id=0&sub_type=live_merge&tab_id=1&type=live&max_time=%v&req_from=feed_loadmore&enter_source=live_merge-live_cover&webcast_sdk_version=1560&webcast_language=zh&webcast_locale=zh_CN&os_api=22&device_type=MI9&ssmix=a&manifest_version_code=110501&dpi=240&uuid=351564010359305&app_name=aweme&version_name=11.5.0&ts=%v&cpu_support64=false&app_type=normal&ac=wifi&host_abi=armeabi-v7a&update_version_code=11509900&channel=gdt_growth14_big_yybwz&_rticket=%v&device_platform=android&iid=%v&version_code=110500&mac_address=00:F4:8D:7F:EB:ED&cdid=06f5e02b-6343-41d0-90a5-d9851444b1c3&openudid=f1b36729d56797e4&device_id=%v&resolution=1280*720&os_version=5.1.1&language=zh&device_brand=Android&aid=1128&mcc_mnc=46007",
max_time, strTs, strRticket,global.USERS[i].IID, global.USERS[i].DevId)
2.获取直播间观看人数列表
https://webcast.amemv.com/webcast/ranklist/room/7011033733058890530/contributor/?sec_anchor_id=MS4wLjABAAAASz7PwznGnQ0NEVObD7NesWZFHCuQ57jOxScjfR2Qdjk&room_id=7011033733058890530&rank_type=30&webcast_sdk_version=1560&webcast_language=zh&webcast_locale=zh_CN&os_api=22&device_type=MI%209&ssmix=a&manifest_version_code=110501&dpi=240&uuid=863254598923521&app_name=aweme&version_name=11.5.0&ts=1632384451&cpu_support64=false&app_type=normal&ac=wifi&host_abi=armeabi-v7a&update_version_code=11509900&channel=gdt_growth14_big_yybwz&_rticket=1632384452081&device_platform=android&iid=2736017703177928&version_code=110500&mac_address=00%3AF4%3A8D%3A7F%3AEB%3AED&cdid=5ab13fd4-8b6b-4b4f-8048-d4ccc69e3730&openudid=42934351239ad324&device_id=1055991630410519&resolution=720*1280&os_version=5.1.1&language=zh&device_brand=Android&aid=1128&mcc_mnc=46007
可变参数
room_id :7011033733058890530
sec_anchor_id = MS4wLjABAAAASz7PwznGnQ0NEVObD7NesWZFHCuQ57jOxScjfR2Qdjk
ts=1632384451
_rticket 时间戳除以1000
iid和device_id 用户唯一表示(可能被抖音封禁)
url := fmt.Sprintf("https://webcast.amemv/webcast/ranklist/room/%v/contributor/?sec_anchor_id=%v&room_id=%v&rank_type=30&webcast_sdk_version=1560&webcast_language=zh&webcast_locale=zh_CN&os_api=22&device_type=MI9&ssmix=a&manifest_version_code=110501&dpi=240&uuid=863254598923521&app_name=aweme&version_name=11.5.0&ts=%v&cpu_support64=false&app_type=normal&ac=wifi&host_abi=armeabi-v7a&update_version_code=11509900&channel=gdt_growth14_big_yybwz&_rticket=%v&device_platform=android&iid=%v&version_code=110500&mac_address=00:F4:8D:7F:EB:ED&cdid=5ab13fd4-8b6b-4b4f-8048-d4ccc69e3730&openudid=42934351239ad324&device_id=%v&resolution=720*1280&os_version=5.1.1&language=zh&device_brand=Android&aid=1128&mcc_mnc=46007",
roomId, userId, roomId, strTs, strRticket, val.IID, val.DevId)
二、go获取数据
1.伪造请求参数
ts := int(time.Now().Unix())
rticket := int(time.Now().Unix() * 1000)
2.拼装url
url := fmt.Sprintf("https://webcast.amemv/webcast/ranklist/room/%v/contributor/?sec_anchor_id=%v&room_id=%v&rank_type=30&webcast_sdk_version=1560&webcast_language=zh&webcast_locale=zh_CN&os_api=22&device_type=MI9&ssmix=a&manifest_version_code=110501&dpi=240&uuid=863254598923521&app_name=aweme&version_name=11.5.0&ts=%v&cpu_support64=false&app_type=normal&ac=wifi&host_abi=armeabi-v7a&update_version_code=11509900&channel=gdt_growth14_big_yybwz&_rticket=%v&device_platform=android&iid=%v&version_code=110500&mac_address=00:F4:8D:7F:EB:ED&cdid=5ab13fd4-8b6b-4b4f-8048-d4ccc69e3730&openudid=42934351239ad324&device_id=%v&resolution=720*1280&os_version=5.1.1&language=zh&device_brand=Android&aid=1128&mcc_mnc=46007",
roomId, userId, roomId, strTs, strRticket, val.IID, val.DevId)
3.拼装请求头
headers := map[string]string{
"Host": "webcast.amemv",
"Connection": "keep-alive",
"Cookie": cookie,
"X-SS-REQ-TICKET": strRticket,
"sdk-version": "1",
"User-Agent": agent,
"X-Khronos": strTs,
"X-Gorgon": gorgon,
"X-Pods": "",
}
4.发送请求
data, err := utils.HttpGet(global.IP, url, headers)
if err != nil {
log.Printf("err fail %v", err)
return datas, err
}
5.分析并获取数据
for _, val := range foller.Data.Ranks {
if val.User.Gender == 1 || val.User.Gender == 2 {
gender := "男"
if val.User.Gender == 2{
gender = "未知"
}
user := LiveUser{
Id: fmt.Sprintf("%v", val.User.ID),
SecUid: val.User.SecUID,
Nickname: val.User.Nickname,
Gender: gender,
Level: fmt.Sprintf("%v", val.User.PayGrade.Level),
Display_id: val.User.DisplayID,
Scor: fmt.Sprintf("%v", val.Score),
}
datas = append(datas, &user)
}
}
三、python自动化获取抖音iid
1.python使用pyautogui包
pyautogui是一款自动化点击的包
主要是根据软件在屏幕上的位置实现自动化点击操作来打开抖音,配合fiddle抓包抓取请求包含iid的url并保存到本地文件夹。最后使用分析txt文件的url获取到iid存到redis。
import socket
from functools import reduce
import redis
import pyautogui
import time, json
import os
# POST https://register.xmpush.global.xiaomi/pass/v2/register HTTP/1.1
# User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; MI 9 Build/NMF26X)
# Host: register.xmpush.global.xiaomi
# Connection: Keep-Alive
# Accept-Encoding: gzip
# Content-Type: application/x-www-form-urlencoded
# Content-Length: 315
#
# android_id=5ba6756546df6c8b&appid=2882303761517509924&apptoken=5571750917924&appversion=110501&board=Xiaomi&brand=Android&devid=a-152B2B16C8CDA2504BB529B29AB6499694A76BEB&devid1=a-A21A7A725CE0BC1F69F718430AE1620CE15C5CCA&model=MI+9&os=5.1.1-500210628&packagename=com.ss.android.ugc.aweme&sdkversion=30619&space_id=0
#
# 窗口大小 模拟器位置 x=522 y=140 大小 800*670
# 模拟器位置 486 292 大小1009*578
def setup():
print("开机中")
time.sleep(5)
# 启动新的模拟器
pyautogui.click(1215, 287)
time.sleep(30)
# 输入密码
pyautogui.click(974, 800)
pyautogui.scroll(-500)
time.sleep(1)
pyautogui.press('shift')
time.sleep(1)
pyautogui.typewrite('q123')
pyautogui.press('enter')
print("开机成功")
# 1.获取本机路由ip
# print(GetLocalIPByPrefix('192.168'))
def GetLocalIPByPrefix(prefix):
r""" 多网卡情况下,根据前缀获取IP(Windows 下适用) """
localIP = ''
for ip in socket.gethostbyname_ex(socket.gethostname())[2]:
if ip.startswith(prefix):
localIP = ip
return localIP
# 2.虚拟点击下载安卓模拟器
def setupYeshen():
# # 2.1点击模拟器
pyautogui.click(330, 740,clicks=2)
time.sleep(5)
#
# # 删除原本的模拟器
pyautogui.click(1262, 287, clicks=1)
pyautogui.click(1010, 494, clicks=1)
# # 克隆模拟器
pyautogui.click(1322,287, clicks=1)
pyautogui.click(1280, 320, clicks=1)
time.sleep(3)
#启动输入密码
setup()
# #安装xpsot
print("安装xposed中")
time.sleep(3)
pyautogui.click(1330, 486, clicks=2)
time.sleep(3)
pyautogui.click(1162, 789, clicks=2)
time.sleep(3)
pyautogui.click(625, 640)
time.sleep(3)
pyautogui.click(785, 583)
time.sleep(5)
print("安装xposed成功")
# # 关闭模拟
pyautogui.click(1220, 59)
time.sleep(3)
pyautogui.click(1049, 588)
time.sleep(1)
print("关闭模拟器成功")
time.sleep(5)
# 启动新的模拟器
setup()
# 打开fiddle
print("打开fiddle")
pyautogui.click(334, 852, clicks=2)
time.sleep(5)
# 打开抖音
print("打开抖音")
pyautogui.click(760, 596)
time.sleep(20)
pyautogui.click(965, 669)
time.sleep(3)
pyautogui.scroll(-500)
time.sleep(3)
pyautogui.scroll(-500)
time.sleep(3)
pyautogui.scroll(-1000)
print("开始抓取并分析请求")
time.sleep(5)
print("抓取成功,开始关闭模拟器")
# 关闭模拟
pyautogui.click(1217, 59)
time.sleep(3)
pyautogui.click(1058, 588)
time.sleep(3)
print("模拟器关闭成功")
def Close():
# pyautogui.mouseUp(button='right', x=236, y=1058)
pyautogui.click(button='right', x=294, y=1059)
time.sleep(2)
pyautogui.click(206,1002)
def sent_redis_id():
print("我开始迁移id到redis")
r = redis.Redis(host='***.***.***', port=5930, decode_responses=True) # host是redis主机,需要redis服务端和客户端都启动 redis默认端口是6379
list = march()
for i in list:
dict = {
"devId":i.get("devce_id"),
"iId":i.get("iid"),
}
p = json.dumps(dict)
print(p)
a = r.lpush("list3", p)
print(a)
if os.path.exists("E://response.txt"):
os.remove("E://response.txt")
2.fiddle抓包并保存到本地代码
if(oSession.host == 'aweme.snssdk' && oSession.url.Contains("iid") && oSession.url.Contains("device_id")){
var filename = "E:/response.txt";
//var logContent = oSession.GetResponseBodyAsString(); //oSession.GetResponseBodyAsString()获取相应内容字符串
var sw : System.IO.StreamWriter;
if (System.IO.File.Exists(filename)){ //是否有该文件夹
sw = System.IO.File.AppendText(filename); //有添加
sw.Write(oSession.url);
sw.Write("\n");
}
else{
sw = System.IO.File.CreateText(filename); //没有创建
sw.Write(oSession.url);
sw.Write("\n");
}
sw.Close();
sw.Dispose();
}
四、python服务端代码部署签名算法
签名算法已经写好,通过flask进行服务端部署
安装python环境后直接执行即可
更多推荐
某音init_gorgon(),x-gorgon分析和数据的获取(3)
发布评论