import hashlib import requests import datetime from urllib.parse import urlencode # 签名密钥 SECRET_KEY = "NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt" # 静态参数 抓包获取 STATIC_PARAMS = { "source_id": "90137", "appid": "3116", "clientver": "10759", "mid": "47995299944446761610674068629729839814", "uuid": "e021d455b256353109083a3c832eb197", "dfid": "3eU9yX3FbBTW0y2kdP0DTMWc", "token": "h550FC6759BD5AE9F286A100CDE21589018D302D601654283CBD8BED897B18DF9C31A8F0A63A09992FA94AE0BF8295CF707A9D41A66374BF9E3E55B908B2C19CE6E4DC3FDDCCD1406C2BE49621047ED4142E864E27BBD31C6A0CA611CBED3F83C710F62DCDE317D88D463901C037801B9182BC9CB32626635C18AE7C676119ED5A", "userid": "1028024275", "srcappid": "2919" } # 请求头 HEADERS = { "User-Agent": "Android12-1070-10759-14-0-mobileCallProtocol-wifi", "KG-THash": "45bec72", "KG-Rec": "1", "Accept-Encoding": "gzip, deflate", "KG-RC": "1", "Content-Type": "application/x-www-form-urlencoded", "Host": "gateway.kugou.com", "Connection": "Keep-Alive" } def generate_signature(params): """ 生成酷狗API签名 """ # 1. 按参数名排序 sorted_params = sorted(params.items(), key=lambda x: x[0]) # 2. 拼接参数字符串 param_str = "".join([f"{k}={v}" for k, v in sorted_params]) # 3. 添加密钥后缀 sign_str = SECRET_KEY + param_str + SECRET_KEY # 4. 计算MD5签名(大写) return hashlib.md5(sign_str.encode()).hexdigest() def call_api(): """ 调用酷狗API接口 """ # 1. 准备参数 params = STATIC_PARAMS.copy() # 2. 添加动态参数(当前日期) current_date = datetime.datetime.now().strftime("%Y-%m-%d") params["receive_day"] = "2025-08-26" # 3. 添加时间戳 params["clienttime"] = 1755955542752 # int(datetime.datetime.now().timestamp() * 1000) # 3. 生成签名 signature = generate_signature(params) params["signature"] = signature # 4. 构建请求URL base_url = "https://gateway.kugou.com/youth/v1/recharge/receive_vip_listen_song" query_string = urlencode(params) full_url = f"{base_url}?{query_string}" print("请求URL:", full_url) # 5. 发送POST请求(无请求体) try: response = requests.post( full_url, headers=HEADERS, data="", # 空请求体 timeout=10 ) print("请求成功:", response.json()) # 6. 返回响应 return { "status": "success", "status_code": response.status_code, "response": response.json(), "request_url": full_url, "signature": signature } except Exception as e: return { "status": "error", "message": str(e), "request_url": full_url, "signature": signature } if __name__ == "__main__": params = { "receive_day": "2025-08-24", "source_id": 90137, "appid": 3116, "clientver": 10759, "clienttime": 1755944660580, "mid": "47995299944446761610674068629729839814", "uuid": "e021d455b256353109083a3c832eb197", "dfid": "3eU9yX3FbBTW0y2kdP0DTMWc", "token": "h550FC6759BD5AE9F286A100CDE21589018D302D601654283CBD8BED897B18DF9C31A8F0A63A09992FA94AE0BF8295CF707A9D41A66374BF9E3E55B908B2C19CE6E4DC3FDDCCD1406C2BE49621047ED4142E864E27BBD31C6A0CA611CBED3F83C710F62DCDE317D88D463901C037801B9182BC9CB32626635C18AE7C676119ED5A", "userid": 1028024275, "srcappid": 2919 } # f626d56902edcd023f336e9864191e57 # print(generate_signature(params)) # 调用接口 result = call_api() # 打印结果 print("=" * 50) print("酷狗API请求结果") print("=" * 50) if result["status"] == "success": print(f"请求状态: 成功 (HTTP {result['status_code']})") print(f"请求URL: {result['request_url']}") print(f"生成签名: {result['signature']}") print("\n响应内容:") print(result["response"]) else: print(f"请求状态: 失败") print(f"错误信息: {result['message']}") print(f"请求URL: {result['request_url']}") print(f"生成签名: {result['signature']}")