| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- 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:
- try:
- 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
-
- 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()
|