ku_gou_concept.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import hashlib
  2. import requests
  3. import datetime
  4. from urllib.parse import urlencode
  5. # 签名密钥
  6. SECRET_KEY = "NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt"
  7. # 静态参数 抓包获取
  8. STATIC_PARAMS = {
  9. "source_id": "90137",
  10. "appid": "3116",
  11. "clientver": "10759",
  12. "mid": "47995299944446761610674068629729839814",
  13. "uuid": "e021d455b256353109083a3c832eb197",
  14. "dfid": "3eU9yX3FbBTW0y2kdP0DTMWc",
  15. "token": "h550FC6759BD5AE9F286A100CDE21589018D302D601654283CBD8BED897B18DF9C31A8F0A63A09992FA94AE0BF8295CF707A9D41A66374BF9E3E55B908B2C19CE6E4DC3FDDCCD1406C2BE49621047ED4142E864E27BBD31C6A0CA611CBED3F83C710F62DCDE317D88D463901C037801B9182BC9CB32626635C18AE7C676119ED5A",
  16. "userid": "1028024275",
  17. "srcappid": "2919"
  18. }
  19. # 请求头
  20. HEADERS = {
  21. "User-Agent": "Android12-1070-10759-14-0-mobileCallProtocol-wifi",
  22. "KG-THash": "45bec72",
  23. "KG-Rec": "1",
  24. "Accept-Encoding": "gzip, deflate",
  25. "KG-RC": "1",
  26. "Content-Type": "application/x-www-form-urlencoded",
  27. "Host": "gateway.kugou.com",
  28. "Connection": "Keep-Alive"
  29. }
  30. def generate_signature(params):
  31. """
  32. 生成酷狗API签名
  33. """
  34. # 1. 按参数名排序
  35. sorted_params = sorted(params.items(), key=lambda x: x[0])
  36. # 2. 拼接参数字符串
  37. param_str = "".join([f"{k}={v}" for k, v in sorted_params])
  38. # 3. 添加密钥后缀
  39. sign_str = SECRET_KEY + param_str + SECRET_KEY
  40. # 4. 计算MD5签名(大写)
  41. return hashlib.md5(sign_str.encode()).hexdigest()
  42. def call_api():
  43. """
  44. 调用酷狗API接口
  45. """
  46. # 1. 准备参数
  47. params = STATIC_PARAMS.copy()
  48. # 2. 添加动态参数(当前日期)
  49. current_date = datetime.datetime.now().strftime("%Y-%m-%d")
  50. params["receive_day"] = "2025-08-26"
  51. # 3. 添加时间戳
  52. params["clienttime"] = 1755955542752 # int(datetime.datetime.now().timestamp() * 1000)
  53. # 3. 生成签名
  54. signature = generate_signature(params)
  55. params["signature"] = signature
  56. # 4. 构建请求URL
  57. base_url = "https://gateway.kugou.com/youth/v1/recharge/receive_vip_listen_song"
  58. query_string = urlencode(params)
  59. full_url = f"{base_url}?{query_string}"
  60. print("请求URL:", full_url)
  61. # 5. 发送POST请求(无请求体)
  62. try:
  63. response = requests.post(
  64. full_url,
  65. headers=HEADERS,
  66. data="", # 空请求体
  67. timeout=10
  68. )
  69. print("请求成功:", response.json())
  70. # 6. 返回响应
  71. return {
  72. "status": "success",
  73. "status_code": response.status_code,
  74. "response": response.json(),
  75. "request_url": full_url,
  76. "signature": signature
  77. }
  78. except Exception as e:
  79. return {
  80. "status": "error",
  81. "message": str(e),
  82. "request_url": full_url,
  83. "signature": signature
  84. }
  85. if __name__ == "__main__":
  86. params = {
  87. "receive_day": "2025-08-24",
  88. "source_id": 90137,
  89. "appid": 3116,
  90. "clientver": 10759,
  91. "clienttime": 1755944660580,
  92. "mid": "47995299944446761610674068629729839814",
  93. "uuid": "e021d455b256353109083a3c832eb197",
  94. "dfid": "3eU9yX3FbBTW0y2kdP0DTMWc",
  95. "token": "h550FC6759BD5AE9F286A100CDE21589018D302D601654283CBD8BED897B18DF9C31A8F0A63A09992FA94AE0BF8295CF707A9D41A66374BF9E3E55B908B2C19CE6E4DC3FDDCCD1406C2BE49621047ED4142E864E27BBD31C6A0CA611CBED3F83C710F62DCDE317D88D463901C037801B9182BC9CB32626635C18AE7C676119ED5A",
  96. "userid": 1028024275,
  97. "srcappid": 2919
  98. }
  99. # f626d56902edcd023f336e9864191e57
  100. # print(generate_signature(params))
  101. # 调用接口
  102. result = call_api()
  103. # 打印结果
  104. print("=" * 50)
  105. print("酷狗API请求结果")
  106. print("=" * 50)
  107. if result["status"] == "success":
  108. print(f"请求状态: 成功 (HTTP {result['status_code']})")
  109. print(f"请求URL: {result['request_url']}")
  110. print(f"生成签名: {result['signature']}")
  111. print("\n响应内容:")
  112. print(result["response"])
  113. else:
  114. print(f"请求状态: 失败")
  115. print(f"错误信息: {result['message']}")
  116. print(f"请求URL: {result['request_url']}")
  117. print(f"生成签名: {result['signature']}")