import requests import datetime import pandas as pd import os import sys import django import json BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bigdataAPI.settings') django.setup() from apps.PestAnalysis.models import CbdAddrPest, HeNanAddr def init_henan_addr(): json_file = os.path.join(BASE_DIR, 'crond_script', 'henan-data.json') with open(json_file, 'r') as f: data = json.load(f) province = data.get("provinces") for p in province: cities = p.get("cities") for c in cities: city = c.get("name") code = c.get("code") HeNanAddr.objects.get_or_create( code = code, defaults={ "province": "河南省", "city": city, "code": code } ) districts = c.get("districts") for d in districts: HeNanAddr.objects.create( province = "河南省", city = city, district = d.get("name"), code = d.get("code") ) def device_info(file_path): df = pd.read_excel(file_path) device_info = df.to_dict(orient='records') return device_info def get_cbd_data(devices): di = 0 for device in devices: d_id = device.get("id") di += 1 print(di, "+++++", d_id) province = device.get("province") city = device.get("city") district = device.get("district") url = "https://web.hnyfwlw.com/api/api_gateway?method=forecast.cbd_analysis.analysis_pest_result" data = { "d_id": str(d_id), "start": "2025-01-01", "end": "2025-12-31", "offset": 0, "model": "B", "token": "pXQBKiumY1soyO854pFUfMARZV9pmJ0idqAePsqilVI=" } response = requests.post(url, data=data) result = response.json() rk_data = result.get("data") day = rk_data.get("day") pest_title_list = rk_data.get("pest") pest_name = rk_data.get("pest_name") for index, p in enumerate(pest_name): pest_info = pest_title_list[index] for dindex, d in enumerate(day): if pest_info[dindex]: addr_obj = HeNanAddr.objects.filter(city = city, district = district) if addr_obj: addr_obj = addr_obj.first() addr_code = addr_obj.code if addr_code: cbd_pest_obj = CbdAddrPest.objects.filter( format_date=d, pest = p, province = province, city = city, district = district, addr_code = str(addr_code) ) if cbd_pest_obj: cbd_pest_obj = cbd_pest_obj.first() org_count = cbd_pest_obj.count cbd_pest_obj.count = org_count + pest_info[dindex] cbd_pest_obj.save() else: CbdAddrPest.objects.create( date = int(datetime.datetime.strptime(d, "%Y-%m-%d").timestamp()), format_date=d, pest = p, province = province, city = city, district = district, count = pest_info[dindex], addr_code = str(addr_code) ) if __name__ == '__main__': devices = device_info(f"{BASE_DIR}/crond_script/find_query.xlsx") get_cbd_data(devices) # init_henan_addr()