from datetime import datetime import requests import sqlite3 import json import os import sys from weather import all_city import logging import django import time import random 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 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(): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299', 'Accept-Language': 'en-US,en;q=0.8', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive', } server_error = 0 print("up server day ...") server_ct = 0 server_days = ServerDayData.objects.all() server_start_ct_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') for server_day_obj in server_days: time_out_k = False print(server_day_obj.cityid) server_day_url = f"http://v1.yiketianqi.com/api?unescape=1&version=v91&appid=69334222&appsecret=2ME6U58N&cityid={server_day_obj.cityid}&ext=hours,aqi,life" server_day_response = requests.get(server_day_url, headers=headers, timeout=10) server_ct += 1 try: if server_day_response.status_code == 200: 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() else: time.sleep(2) print(f"cityid {server_day_obj.cityid} error_code {server_day_response.status_code}") print(f"request fail again : {server_day_obj.cityid}") server_day_response = requests.get(server_day_url, headers=headers, timeout=5) server_ct += 1 if server_day_response.status_code == 200: 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() print(f"request again success: {server_day_obj.cityid}") else: print(f"cityid {server_day_obj.cityid} error_code {server_day_response.status_code} again request afil") print(f"error {server_error}") server_error += 1 time_out_k = True except Exception as e: print(f"request fail again : {server_day_obj.cityid} {e.args}") if time_out_k: time.sleep(1) else: time.sleep(0.5) with open("/data/weather/weather_count.txt", 'a+', encoding='utf-8') as f: f.write(f"七日天气接口: 开始时间:{server_start_ct_time} 结束时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} 调用次数:{server_ct} \n") if __name__ == "__main__": main()