import requests import sqlite3 import json import os import sys from weather import all_city import logging import django import time 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.Weather.models import District, DayData, ServerDayData # 配置日志级别和格式 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') # 创建一个文件处理器,指定日志文件名和写入模式 os.mkdir("/data/weather/") if not os.path.exists("/data/weather/") else None file_handler = logging.FileHandler('/data/weather/app.log') file_handler.setLevel(logging.INFO) # 创建一个格式化程序,用于定义日志消息的显示方式 formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') file_handler.setFormatter(formatter) # 将文件处理器添加到根日志记录器中 logging.getLogger('').addHandler(file_handler) app_id = "69334222" app_secret = "2u4bHXHD" province_dict = { "11": '北京市', "12": '天津市', "13": '河北省', "14": '山西省', "15": '内蒙古自治区', "21": '辽宁省', "22": '吉林省', "23": '黑龙江省', "31": '上海市', "32": '江苏省', "33": '浙江省', "34": '安徽省', "35": '福建省', "36": '江西省', "37": '山东省', "41": '河南省', "42": '湖北省', "43": '湖南省', "44": '广东省', "45": '广西壮族自治区', "46": '海南省', "50": '重庆市', "51": '四川省', "52": '贵州省', "53": '云南省', "54": '西藏自治区', "61": '陕西省', "62": '甘肃省', "63": '青海省', "64": '宁夏回族自治区', "65": '新疆维吾尔自治区' } def init_data(): # 导入全部的城市 for k in all_city: print(k, "-------------") district = District() district.city_id = str(k[0]) district.city = k[1] district.pid = str(k[2]) district.save() def main(): logging.warning("up today ...") day_data = DayData.objects.all() for day_obj in day_data: today_url = f"http://v0.yiketianqi.com/api?unescape=1&version=v62&appid=69334222&appsecret=2u4bHXHD&cityid={day_obj.cityid}" today_response = requests.get(today_url, timeout=5) try: today_data = json.loads(today_response.text) if "errcode" not in today_data.keys(): day_obj.content = str(today_data) day_obj.save() except Exception as e: logging.warning(f"cityid {day_obj.cityid} error {e} {today_response.text}") logging.warning("over today ...") logging.warning("up server day ...") server_days = ServerDayData.objects.all() for server_day_obj in server_days: server_day_url = f"http://v0.yiketianqi.com/api?unescape=1&version=v91&appid=69334222&appsecret=2u4bHXHD&cityid={server_day_obj.cityid}&ext=hours,aqi,life" server_day_response = requests.get(server_day_url, timeout=5) try: server_day_data = json.loads(server_day_response.text) if "errcode" not in server_day_data.keys(): server_day_obj.content = str(server_day_data) server_day_obj.save() except Exception as e: logging.warning(f"cityid {server_day_obj.cityid} error {e} {today_response.text}") logging.warning("over server day ...") """ district = District.objects.all() # init_data() logging.warning("up...") results = District.objects.filter(id__gt = 31) # 更新数据 for row in results: temp = row.city # 东城区 city_id = row.city_id # 110101000000 pid = row.pid # 110100000000 province_id = city_id[:2] province = province_dict.get(province_id) if len(pid) == 2 and temp == "市辖区": # 处理 市辖区 只有两级,区为空 city = province district = "市辖区" elif len(pid) ==2 and temp != "市辖区": # 三级 省 市 区(县) city = temp district = "" else: dis = District.objects.get(city_id=pid) city = dis.city district = temp try: today_url = f"http://v0.yiketianqi.com/api?unescape=1&version=v62&appid=69334222&appsecret=2u4bHXHD&adcode={city_id}" today_response = requests.get(today_url, timeout=5) today_data = json.loads(today_response.text) if "errcode" not in today_data.keys(): cityid = today_data.get("cityid", "") DayData.objects.update_or_create( cityid=cityid, defaults={ "cityid": cityid, "province": province, "city": city, "district": district, "content": str(today_data) } ) server_day_url = f"http://v0.yiketianqi.com/api?unescape=1&version=v91&appid={app_id}&appsecret={app_secret}&adcode={city_id}&ext=hours,aqi,life" server_day_response = requests.get(server_day_url, timeout=5) server_day_data = json.loads(server_day_response.text) if "errcode" not in server_day_data.keys(): cityid = today_data.get("cityid", "") ServerDayData.objects.update_or_create( cityid=cityid, defaults={ "cityid": cityid, "province": province, "city": city, "district": district, "content": str(server_day_data) } ) except Exception as e: print(e) logging.warning("over...") """ if __name__ == "__main__": main()