weather_history.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import requests
  2. import datetime
  3. import json
  4. import os
  5. import sys
  6. from weather import all_city
  7. import logging
  8. import django
  9. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  10. sys.path.append(BASE_DIR)
  11. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bigdataAPI.settings')
  12. django.setup()
  13. from django.conf import settings
  14. from apps.Weather.models import HistoryData, AddressInfo, DayData
  15. # 配置日志级别和格式
  16. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  17. file_handler = logging.FileHandler('/data/weather/history.log')
  18. file_handler.setLevel(logging.INFO)
  19. # 创建一个格式化程序,用于定义日志消息的显示方式
  20. formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
  21. file_handler.setFormatter(formatter)
  22. # 将文件处理器添加到根日志记录器中
  23. logging.getLogger('').addHandler(file_handler)
  24. def add_address_info_data():
  25. address = AddressInfo.objects.all().count()
  26. if not address:
  27. day_data = DayData.objects.all()
  28. for day in day_data:
  29. AddressInfo.objects.get_or_create(
  30. cityid = day.cityid,
  31. defaults={
  32. "cityid": day.cityid,
  33. "province": day.province,
  34. "city": day.city,
  35. "district": day.district
  36. }
  37. )
  38. else:
  39. logging.warning("address_info 已存在数据")
  40. def history_data():
  41. url = settings.HISTORY_WEATHER_URL
  42. appid = settings.HISTORY_WEATHER_APPID
  43. appsecret = settings.HISTORY_WEATHER_APPSECRET
  44. address = AddressInfo.objects.all().values("cityid")
  45. for i in address[:1]:
  46. cityid = i.get("cityid")
  47. for y in [2022, 2023]:
  48. for m in range(1,13):
  49. response = requests.get(url=f"{url}appid={appid}&appsecret={appsecret}&cityid={cityid}&year={y}&month={m}")
  50. result = json.loads(response.text)
  51. for k in result["data"]:
  52. ymd = k["ymd"]
  53. timestamp = datetime.datetime.strptime(ymd, "%Y-%m-%d").timestamp()
  54. HistoryData.objects.get_or_create(
  55. timestamp = timestamp,
  56. cityid = cityid,
  57. defaults={
  58. "timestamp":timestamp,
  59. "cityid": cityid,
  60. "content": str(k)
  61. }
  62. )
  63. if __name__ == "__main__":
  64. history_data()