前言
获取某音直播间商品必须登录,我们提前准备好某音web端
的用户cookie
,拿到cookie
中的sessionid
就能直接调用API了
封装
我们将API集成在MoreAPI中,这样使用的时候就能直接调用了
MoreAPI官方文档:https://apifox.com/apidoc/shared-0b55c993-4634-4f70-b6fc-3edf1c27344d
MoreAPI官网: https://www.wouldmissyou.com/
做好分析之后我们将传入两个请求参数,share_text
作为移动端直播间的分享链接,sessionid
作为web端cookie中的sessionid字段值
。请求视图如下:
class LiveGoodsView(HTTPMethodView):
"""
直播商品
"""
async def post(self, request) -> HTTPResponse:
share_text = request.json.get("share_text")
sessionid = request.json.get("sessionid")
return await live_goods(locals())
用户使用参数进行请求后,就可以直接返回live_goods
方法中的内容
# live_goods.py
async def live_goods(data):
share_text = data.get("share_text")
sessionid = data.get("sessionid")
if not share_text:
return json_fail_response(CodeDict.params_fail)
if not sessionid:
return json_fail_response(CodeDict.params_fail, message="请传入登录后的cookie -> sessionid字段")
room_id = await get_id(share_text)
live_data_url = f"https://webcast.amemv.com/webcast/room/reflow/info/?live_id=1&room_id={room_id}&version_code=99.99.99&app_id=1128"
u_headers = {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0"
}
try:
live_data_response = await proxy_request_get(url=live_data_url, headers=u_headers)
live_data_response = live_data_response.json()
author_id = live_data_response['data']['room']['owner_user_id']
web_rid = live_data_response['data']['room']['owner']['web_rid']
except:
return json_fail_response(CodeDict.request_fail)
url_path = f"device_platform=webapp&aid=6383&channel=channel_pc_web&room_id={str(room_id)}&author_id={str(author_id)}&offset=0&limit=20&pc_client_type=1&version_code=210800&version_name=21.8.0&cookie_enabled=true&screen_width=1920&screen_height=1080&browser_language=zh-CN&browser_platform=MacIntel&browser_name=Edge&browser_version=122.0.0.0&browser_online=true&engine_name=Blink&engine_version=122.0.0.0&os_name=Mac+OS&os_version=10.15.7&cpu_core_num=6&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50"
x_b = XBogus()
x_params = x_b.getXBogus(url_path)[0]
re_url = "https://live.douyin.com/live/promotions/page/?" + x_params
ref = f'https://live.douyin.com/{str(web_rid)}'
cookie = f"sessionid={sessionid};ttwid={str(await generate_ttwid())}"
l_headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Referer': ref,
'Cookie': cookie
}
try:
response_data = await proxy_request_get(url=re_url, headers=l_headers)
response_data = response_data.json()
except:
return json_fail_response(CodeDict.request_fail)
return json_success_response(response_data)
支持API接口就写好了
调用
调用我们写好API,查看效果