cbd_analysis.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import requests
  2. import datetime
  3. import pandas as pd
  4. import os
  5. import sys
  6. import django
  7. import json
  8. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  9. sys.path.append(BASE_DIR)
  10. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bigdataAPI.settings')
  11. django.setup()
  12. from apps.PestAnalysis.models import CbdAddrPest, HeNanAddr
  13. def init_henan_addr():
  14. json_file = os.path.join(BASE_DIR, 'crond_script', 'henan-data.json')
  15. with open(json_file, 'r') as f:
  16. data = json.load(f)
  17. province = data.get("provinces")
  18. for p in province:
  19. cities = p.get("cities")
  20. for c in cities:
  21. city = c.get("name")
  22. code = c.get("code")
  23. HeNanAddr.objects.get_or_create(
  24. code = code,
  25. defaults={
  26. "province": "河南省",
  27. "city": city,
  28. "code": code
  29. }
  30. )
  31. districts = c.get("districts")
  32. for d in districts:
  33. HeNanAddr.objects.create(
  34. province = "河南省",
  35. city = city,
  36. district = d.get("name"),
  37. code = d.get("code")
  38. )
  39. def device_info(file_path):
  40. df = pd.read_excel(file_path)
  41. device_info = df.to_dict(orient='records')
  42. return device_info
  43. def get_cbd_data(devices):
  44. di = 0
  45. for device in devices:
  46. d_id = device.get("id")
  47. di += 1
  48. print(di, "+++++", d_id)
  49. province = device.get("province")
  50. city = device.get("city")
  51. district = device.get("district")
  52. url = "https://web.hnyfwlw.com/api/api_gateway?method=forecast.cbd_analysis.analysis_pest_result"
  53. data = {
  54. "d_id": str(d_id),
  55. "start": "2025-01-01",
  56. "end": "2025-12-31",
  57. "offset": 0,
  58. "model": "B",
  59. "token": "pXQBKiumY1soyO854pFUfMARZV9pmJ0idqAePsqilVI="
  60. }
  61. response = requests.post(url, data=data)
  62. result = response.json()
  63. rk_data = result.get("data")
  64. day = rk_data.get("day")
  65. pest_title_list = rk_data.get("pest")
  66. pest_name = rk_data.get("pest_name")
  67. for index, p in enumerate(pest_name):
  68. pest_info = pest_title_list[index]
  69. for dindex, d in enumerate(day):
  70. if pest_info[dindex]:
  71. addr_obj = HeNanAddr.objects.filter(city = city, district = district)
  72. if addr_obj:
  73. addr_obj = addr_obj.first()
  74. addr_code = addr_obj.code
  75. if addr_code:
  76. cbd_pest_obj = CbdAddrPest.objects.filter(
  77. format_date=d,
  78. pest = p,
  79. province = province,
  80. city = city,
  81. district = district,
  82. addr_code = str(addr_code)
  83. )
  84. if cbd_pest_obj:
  85. cbd_pest_obj = cbd_pest_obj.first()
  86. org_count = cbd_pest_obj.count
  87. cbd_pest_obj.count = org_count + pest_info[dindex]
  88. cbd_pest_obj.save()
  89. else:
  90. CbdAddrPest.objects.create(
  91. date = int(datetime.datetime.strptime(d, "%Y-%m-%d").timestamp()),
  92. format_date=d,
  93. pest = p,
  94. province = province,
  95. city = city,
  96. district = district,
  97. count = pest_info[dindex],
  98. addr_code = str(addr_code)
  99. )
  100. if __name__ == '__main__':
  101. devices = device_info(f"{BASE_DIR}/crond_script/find_query.xlsx")
  102. get_cbd_data(devices)
  103. # init_henan_addr()