ks_analyze_photo.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import json
  2. from hashlib import md5
  3. import requests
  4. from flask import Flask, request, jsonify
  5. app = Flask(__name__)
  6. # def haiwai_tunnel_proxies():
  7. # tunnel = "c101.kdlfps.com:18866"
  8. # # 用户名密码方式
  9. # username = "f2801246645"
  10. # password = "q0i0ohnl"
  11. # proxies = {
  12. # "http": "http://%(user)s:%(pwd)s@%(proxy)s/" % {"user": username, "pwd": password, "proxy": tunnel},
  13. # "https": "http://%(user)s:%(pwd)s@%(proxy)s/" % {"user": username, "pwd": password, "proxy": tunnel}
  14. # }
  15. # return proxies
  16. def process_range_data(data, label_key, value_key, selected_key=None, tips_key=None):
  17. processed_data = []
  18. for item in data:
  19. processed_item = {label_key: item['label'], value_key: item['value']}
  20. if selected_key and item['selected'] is not None:
  21. processed_item[selected_key] = item['selected']
  22. if tips_key and item['tips'] is not None:
  23. processed_item[tips_key] = item['tips']
  24. processed_data.append(processed_item)
  25. return processed_data
  26. @app.route('/analyze_photo', methods=['GET'])
  27. def analyze_photo():
  28. photo_id = request.args.get('photo_id')
  29. if not photo_id:
  30. return jsonify({"error": "photo_id is required"}), 400
  31. url = 'https://creator-app.kuaishou.com/rest/bamboo/inspiration/n/photo/analysis'
  32. headers = {
  33. 'Accept-Language': 'zh-cn',
  34. 'Connection': 'keep-alive',
  35. 'Content-Type': 'application/x-www-form-urlencoded',
  36. 'Host': 'creator-app.kuaishou.com',
  37. }
  38. query = {}
  39. data = {
  40. 'photoId': photo_id,
  41. 'client_key': '214c9979',
  42. }
  43. src = {}
  44. src.update(query)
  45. src.update(data)
  46. src = ''.join([f'{key}={src[key]}' for key in sorted(src.keys(), reverse=False)])
  47. salt = '08d8eece8e83'
  48. sig = md5(f'{src}{salt}'.encode()).hexdigest()
  49. query.update({'sig': sig})
  50. response = requests.post(url=url, headers=headers, params=query, data=data)
  51. if response.status_code != 200:
  52. return jsonify({"error": "Failed to analyze photo"}), response.status_code
  53. body = response.content.decode()
  54. json_body = json.loads(body)
  55. user_range = json_body['data']['play']['userRange']
  56. if len(user_range) == 0:
  57. return jsonify({photo_id: "无观众画像"})
  58. age_range = user_range['ageRange']
  59. sex_range = user_range['sexRange']
  60. province_range = user_range['provinceRange']
  61. age_range_data = process_range_data(age_range, '年龄范围', '占比', '挑选', '年龄范围占比')
  62. sex_range_data = process_range_data(sex_range, '性别', '占比', '挑选')
  63. province_range_data = process_range_data(province_range, '地域', '占比', '挑选')
  64. result = {
  65. "年龄范围": [item for item in age_range_data if item],
  66. "性别占比": [item for item in sex_range_data if item],
  67. "地域占比": [item for item in province_range_data if item]
  68. }
  69. return jsonify(result)
  70. if __name__ == '__main__':
  71. app.run(host='0.0.0.0', port=8080)