gaode_api.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import requests
  2. from concurrent.futures import ThreadPoolExecutor, as_completed
  3. from setting import GAODE_KEY, BANJING, LIANSUO_LIST, ZHUZHAI_COUNT, XUEXIAO_COUNT, XIEZILOU_COUNT, LIANSUO_COUNT, \
  4. JINGPIN_COUNT
  5. from log import PPLogger
  6. logger = PPLogger(name='gaode_api')
  7. logger.setup_logger()
  8. def get_zhoubian(location=None):
  9. # print(location)
  10. data_dict = {'pipei': False, 'zhuzhai': [], 'xuexiao': [], 'xiezilou': [], 'jingpin': [], 'liansuo': []}
  11. if not location:
  12. return data_dict
  13. api = 'https://restapi.amap.com/v5/place/around'
  14. keywords = LIANSUO_LIST
  15. params_list = [{
  16. 'key': GAODE_KEY,
  17. 'keywords': keyword,
  18. 'location': location,
  19. 'radius': str(BANJING),
  20. 'region': '370200',
  21. 'city_limit': 'true',
  22. 'show_fields': 'business',
  23. # 'page_size': '50'
  24. } for keyword in keywords]
  25. params = {
  26. 'key': GAODE_KEY,
  27. 'types': '080113|120201|120202|120203|120300|141201|141202|141206',
  28. 'location': location,
  29. 'radius': str(BANJING),
  30. 'region': '370200',
  31. 'city_limit': 'true',
  32. 'show_fields': 'business',
  33. # 'page_size': '50'
  34. }
  35. results_liansuo = []
  36. with ThreadPoolExecutor() as pool:
  37. r1 = [pool.submit(requests.get, api, p) for p in params_list]
  38. for future1 in as_completed(r1):
  39. results_liansuo.append(future1.result().json())
  40. r2 = [pool.submit(requests.get, api, params)]
  41. for future2 in as_completed(r2):
  42. results_qita = future2.result().json()
  43. if results_qita['infocode'] != '10000':
  44. logger.error(results_qita)
  45. return data_dict
  46. for liansuo in results_liansuo:
  47. try:
  48. for pois in liansuo['pois']:
  49. # print(pois)
  50. data_dict['liansuo'].append({'name':pois['name'], 'address':pois['address'], 'distance':pois['distance']})
  51. except Exception as e:
  52. logger.error(e, liansuo)
  53. for qita in results_qita['pois']:
  54. if '写字楼' in qita['type']:
  55. data_dict['xiezilou'].append({'name':qita['name'], 'address':qita['address'], 'distance':qita['distance']})
  56. elif '住宅' in qita['type']:
  57. data_dict['zhuzhai'].append({'name':qita['name'], 'address':qita['address'], 'distance':qita['distance']})
  58. elif '学校' in qita['type']:
  59. data_dict['xuexiao'].append({'name':qita['name'], 'address':qita['address'], 'distance':qita['distance']})
  60. elif '台球' in qita['type']:
  61. data_dict['jingpin'].append({'name':qita['name'], 'address':qita['address'], 'distance':qita['distance']})
  62. else:
  63. pass
  64. if (len(data_dict['zhuzhai']) >= int(ZHUZHAI_COUNT) or len(data_dict['xuexiao']) >= int(XUEXIAO_COUNT) or len(
  65. data_dict['xiezilou']) >= int(XIEZILOU_COUNT)) \
  66. and len(data_dict['jingpin']) <= int(JINGPIN_COUNT) \
  67. and len(data_dict['liansuo']) >= int(LIANSUO_COUNT):
  68. data_dict['pipei'] = True
  69. return data_dict
  70. # print(get_zhoubian('120.469038,36.398833'))