import requests from concurrent.futures import ThreadPoolExecutor, as_completed from setting import GAODE_KEY, BANJING, LIANSUO_LIST, ZHUZHAI_COUNT, XUEXIAO_COUNT, XIEZILOU_COUNT, LIANSUO_COUNT, \ JINGPIN_COUNT from log import PPLogger logger = PPLogger(name='gaode_api') logger.setup_logger() def get_zhoubian(location=None): # print(location) data_dict = {'pipei': False, 'zhuzhai': [], 'xuexiao': [], 'xiezilou': [], 'jingpin': [], 'liansuo': []} if not location: return data_dict api = 'https://restapi.amap.com/v5/place/around' keywords = LIANSUO_LIST params_list = [{ 'key': GAODE_KEY, 'keywords': keyword, 'location': location, 'radius': str(BANJING), 'region': '370200', 'city_limit': 'true', 'show_fields': 'business', # 'page_size': '50' } for keyword in keywords] params = { 'key': GAODE_KEY, 'types': '080113|120201|120202|120203|120300|141201|141202|141206', 'location': location, 'radius': str(BANJING), 'region': '370200', 'city_limit': 'true', 'show_fields': 'business', # 'page_size': '50' } results_liansuo = [] with ThreadPoolExecutor() as pool: r1 = [pool.submit(requests.get, api, p) for p in params_list] for future1 in as_completed(r1): results_liansuo.append(future1.result().json()) r2 = [pool.submit(requests.get, api, params)] for future2 in as_completed(r2): results_qita = future2.result().json() if results_qita['infocode'] != '10000': logger.error(results_qita) return data_dict for liansuo in results_liansuo: try: for pois in liansuo['pois']: # print(pois) data_dict['liansuo'].append({'name':pois['name'], 'address':pois['address'], 'distance':pois['distance']}) except Exception as e: logger.error(e, liansuo) for qita in results_qita['pois']: if '写字楼' in qita['type']: data_dict['xiezilou'].append({'name':qita['name'], 'address':qita['address'], 'distance':qita['distance']}) elif '住宅' in qita['type']: data_dict['zhuzhai'].append({'name':qita['name'], 'address':qita['address'], 'distance':qita['distance']}) elif '学校' in qita['type']: data_dict['xuexiao'].append({'name':qita['name'], 'address':qita['address'], 'distance':qita['distance']}) elif '台球' in qita['type']: data_dict['jingpin'].append({'name':qita['name'], 'address':qita['address'], 'distance':qita['distance']}) else: pass if (len(data_dict['zhuzhai']) >= int(ZHUZHAI_COUNT) or len(data_dict['xuexiao']) >= int(XUEXIAO_COUNT) or len( data_dict['xiezilou']) >= int(XIEZILOU_COUNT)) \ and len(data_dict['jingpin']) <= int(JINGPIN_COUNT) \ and len(data_dict['liansuo']) >= int(LIANSUO_COUNT): data_dict['pipei'] = True return data_dict # print(get_zhoubian('120.469038,36.398833'))