server_weather.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. from datetime import datetime
  2. import requests
  3. import sqlite3
  4. import json
  5. import os
  6. import sys
  7. from weather import all_city
  8. import logging
  9. import django
  10. import time
  11. import random
  12. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  13. sys.path.append(BASE_DIR)
  14. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bigdataAPI.settings')
  15. django.setup()
  16. from apps.Weather.models import District, DayData, ServerDayData
  17. app_id = "69334222"
  18. app_secret = "2u4bHXHD"
  19. province_dict = {
  20. "11": '北京市',
  21. "12": '天津市',
  22. "13": '河北省',
  23. "14": '山西省',
  24. "15": '内蒙古自治区',
  25. "21": '辽宁省',
  26. "22": '吉林省',
  27. "23": '黑龙江省',
  28. "31": '上海市',
  29. "32": '江苏省',
  30. "33": '浙江省',
  31. "34": '安徽省',
  32. "35": '福建省',
  33. "36": '江西省',
  34. "37": '山东省',
  35. "41": '河南省',
  36. "42": '湖北省',
  37. "43": '湖南省',
  38. "44": '广东省',
  39. "45": '广西壮族自治区',
  40. "46": '海南省',
  41. "50": '重庆市',
  42. "51": '四川省',
  43. "52": '贵州省',
  44. "53": '云南省',
  45. "54": '西藏自治区',
  46. "61": '陕西省',
  47. "62": '甘肃省',
  48. "63": '青海省',
  49. "64": '宁夏回族自治区',
  50. "65": '新疆维吾尔自治区'
  51. }
  52. def init_data():
  53. # 导入全部的城市
  54. for k in all_city:
  55. print(k, "-------------")
  56. district = District()
  57. district.city_id = str(k[0])
  58. district.city = k[1]
  59. district.pid = str(k[2])
  60. district.save()
  61. def main():
  62. headers = {
  63. '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',
  64. 'Accept-Language': 'en-US,en;q=0.8',
  65. 'Accept-Encoding': 'gzip, deflate, br',
  66. 'Connection': 'keep-alive',
  67. }
  68. server_error = 0
  69. print("up server day ...")
  70. server_ct = 0
  71. server_days = ServerDayData.objects.all()
  72. server_start_ct_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
  73. for server_day_obj in server_days:
  74. time_out_k = False
  75. print(server_day_obj.cityid)
  76. 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"
  77. server_day_response = requests.get(server_day_url, headers=headers, timeout=10)
  78. server_ct += 1
  79. try:
  80. if server_day_response.status_code == 200:
  81. server_day_data = json.loads(server_day_response.text)
  82. if "errcode" not in server_day_data.keys():
  83. server_day_obj.content = str(server_day_data)
  84. server_day_obj.save()
  85. else:
  86. time.sleep(2)
  87. print(f"cityid {server_day_obj.cityid} error_code {server_day_response.status_code}")
  88. print(f"request fail again : {server_day_obj.cityid}")
  89. server_day_response = requests.get(server_day_url, headers=headers, timeout=5)
  90. server_ct += 1
  91. if server_day_response.status_code == 200:
  92. server_day_data = json.loads(server_day_response.text)
  93. if "errcode" not in server_day_data.keys():
  94. server_day_obj.content = str(server_day_data)
  95. server_day_obj.save()
  96. print(f"request again success: {server_day_obj.cityid}")
  97. else:
  98. print(f"cityid {server_day_obj.cityid} error_code {server_day_response.status_code} again request afil")
  99. print(f"error {server_error}")
  100. server_error += 1
  101. time_out_k = True
  102. except Exception as e:
  103. print(f"request fail again : {server_day_obj.cityid} {e.args}")
  104. if time_out_k:
  105. time.sleep(3)
  106. else:
  107. time.sleep(2)
  108. with open("/data/weather/weather_count.txt", 'a+', encoding='utf-8') as f:
  109. f.write(f"开始时间:{server_start_ct_time} 结束时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} 调用次数:{server_ct} \n")
  110. if __name__ == "__main__":
  111. main()