ks_analyze_photo.py 2.5 KB

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