crond_weather.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import requests
  2. import sqlite3
  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 apps.Weather.models import District, DayData, ServerDayData
  14. # 配置日志级别和格式
  15. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  16. # 创建一个文件处理器,指定日志文件名和写入模式
  17. os.mkdir("/data/weather/") if not os.path.exists("/data/weather/") else None
  18. file_handler = logging.FileHandler('/data/weather/app.log')
  19. file_handler.setLevel(logging.INFO)
  20. # 创建一个格式化程序,用于定义日志消息的显示方式
  21. formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
  22. file_handler.setFormatter(formatter)
  23. # 将文件处理器添加到根日志记录器中
  24. logging.getLogger('').addHandler(file_handler)
  25. app_id = "69334222"
  26. app_secret = "2u4bHXHD"
  27. province_dict = {
  28. "11": '北京市',
  29. "12": '天津市',
  30. "13": '河北省',
  31. "14": '山西省',
  32. "15": '内蒙古自治区',
  33. "21": '辽宁省',
  34. "22": '吉林省',
  35. "23": '黑龙江省',
  36. "31": '上海市',
  37. "32": '江苏省',
  38. "33": '浙江省',
  39. "34": '安徽省',
  40. "35": '福建省',
  41. "36": '江西省',
  42. "37": '山东省',
  43. "41": '河南省',
  44. "42": '湖北省',
  45. "43": '湖南省',
  46. "44": '广东省',
  47. "45": '广西壮族自治区',
  48. "46": '海南省',
  49. "50": '重庆市',
  50. "51": '四川省',
  51. "52": '贵州省',
  52. "53": '云南省',
  53. "54": '西藏自治区',
  54. "61": '陕西省',
  55. "62": '甘肃省',
  56. "63": '青海省',
  57. "64": '宁夏回族自治区',
  58. "65": '新疆维吾尔自治区'
  59. }
  60. db = "/data/weather/weather.db"
  61. def init_data():
  62. # 导入全部的城市
  63. for k in all_city:
  64. District.objects.get_or_create(
  65. id=k[0],
  66. defaults={
  67. "id": k[0],
  68. "city": k[1],
  69. "pid": k[2]
  70. }
  71. )
  72. def main():
  73. district = District.objects.all()
  74. if not district:
  75. init_data()
  76. logging.warning("up...")
  77. conn1 = sqlite3.connect(db)
  78. cursor1 = conn1.cursor()
  79. sql = """
  80. select * from district where id > 65
  81. """
  82. cursor1.execute(sql)
  83. results = cursor1.fetchall()
  84. results = District.objects.filter(id__gt = 65)
  85. # 更新数据
  86. for row in results:
  87. temp = row.city # 东城区
  88. id = row.id # 110101000000
  89. pid = row.pid # 110100000000
  90. if len(str(pid)) == 2:
  91. # 处理 省 市 样例
  92. city = temp
  93. district = ""
  94. else:
  95. te = District.objects.filter(pid=pid).first()
  96. city = te[0]
  97. district = temp
  98. if city == "市辖区":
  99. city = district
  100. district = ""
  101. province_id = (str(row.id))[:2]
  102. province = province_dict.get(province_id)
  103. try:
  104. today_url = f"https://v0.yiketianqi.com/api?unescape=1&version=v62&appid={app_id}&appsecret={app_secret}&adcode={id}"
  105. today_response = requests.get(today_url, timeout=5)
  106. today_data = json.loads(today_response.text)
  107. if "errcode" not in today_data.keys():
  108. cityid = today_data.get("cityid", "")
  109. DayData.objects.update_or_create(
  110. cityid=cityid,
  111. defaults={
  112. "cityid": cityid,
  113. "province": province,
  114. "city": city,
  115. "district": district,
  116. "content": str(today_data)
  117. }
  118. )
  119. server_day_url = f"https://v0.yiketianqi.com/api?unescape=1&version=v91&appid={app_id}&appsecret={app_secret}&adcode={id}&ext=hours,aqi,life"
  120. server_day_response = requests.get(server_day_url, timeout=5)
  121. server_day_data = json.loads(server_day_response.text)
  122. if "errcode" not in server_day_data.keys():
  123. cityid = today_data.get("cityid", "")
  124. ServerDayData.objects.update_or_create(
  125. cityid=cityid,
  126. defaults={
  127. "cityid": cityid,
  128. "province": province,
  129. "city": city,
  130. "district": district,
  131. "content": str(today_data)
  132. }
  133. )
  134. except Exception as e:
  135. print(e)
  136. logging.warning("over...")
  137. if __name__ == "__main__":
  138. main()