虾米音乐API破解,python模拟接口

就是记录一下虾米音乐部分API模拟过程,如有不当之处请联系,
我以搜索接口为例 其余接口都是类似操作,

虾米音乐API加密解析

1 搜索接口解析

虾米音乐API破解,python模拟接口_第1张图片
虾米音乐API破解,python模拟接口_第2张图片
get请求:

https://www.xiami.com/api/search/searchSongs?_q=%7B%22key%22:%22%E5%9C%A8%E5%B8%8C%E6%9C%9B%E7%9A%84%E7%94%B0%E9%87%8E%E4%B8%8A%22,%22pagingVO%22:%7B%22page%22:2,%22pageSize%22:30%7D%7D&_s=c62d52691162ebcd68a92f3736763925

urldecode解析 https://www.xiami.com/api/search/searchSongs?_q={“key”:“在希望的田野上”,“pagingVO”:{“page”:2,“pageSize”:30}}&_s=c62d52691162ebcd68a92f3736763925

1.参数解析

	_q:{"key":"在希望的田野上","pagingVO":{"page":2,"pageSize":30}} 
	_s: 加密参数 每次请求都不同

2.找到对应的js文件打断点 解析
虾米音乐API破解,python模拟接口_第3张图片
虾米音乐API破解,python模拟接口_第4张图片
3.分析:

e.params._s = a 很明显 来自上一行
var a = o()("".concat(r.split("_")[0], "_xmMain_").concat(e._url, "_").concat(t));
通过打断点得出:
		r: "586bfc6175409072c4dad86ef21c54e8_1593150105578"
		e._url: "/api/search/searchSongs"
		t: "{"key":"在希望的田野上","pagingVO":{"page":2,"pageSize":30}}"

其中r的值 是当前请求的cookie中的xm_sg_tk
其中断点进入函数 o()
虾米音乐API破解,python模拟接口_第5张图片
其中就是md5 加密参数t
("".concat(r.split("_")[0], "_xmMain_").concat(e._url, "_").concat(t))

其中 t等于: e2xxxxxxxx49aab4a4464fd26b4ba_xmMain_/api/search/searchSongs_{"key":"在希望的田野上","pagingVO":{"page":1,"pageSize":30}}

贴上部分代码:

from hashlib import md5

# 获取加密字符串_s
def _get_params__s(api,_q) -> str:
    '''
    :param api: URL的地址     /api/search/searchSongs
    :param _q:  需要加密的参数     {"key":"在希望的田野上","pagingVO":{"page":2,"pageSize":30}}
    :param xm_sg_tk cookie xm_sg_tk去掉是时间戳得值     7f2df3233537f81aae848dc4f47bdeb8
    :return: 加密字符串
    '''
    xm_sg_tk = '7f2df3233537f81aae848dc4f47bdeb8' # cookie中xm_sg_tk去掉时间戳
    data = xm_sg_tk + "_xmMain_" + api + "_" + _q
    return md5(bytes(data, encoding="utf-8")).hexdigest()

2 其余接口

# 各个API接口地址
# 每日音乐推荐
APIDailySongs = "/api/recommend/getDailySongs"
# 排行榜音乐
APIBillboardDetail = "/api/billboard/getBillboardDetail"
# 所有排行榜
APIBillboardALL = "/api/billboard/getBillboards"
# 歌曲详情信息
APISongDetails = "/api/song/getPlayInfo"
# 搜索音乐接口
APISearch = "/api/search/searchSongs"

详细代码以及其他接口请见
github:虾米音乐模拟接口

你可能感兴趣的:(爬虫档案袋,python,js)