| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | 
							- # -*- coding: utf-8 -*-
 
- """
 
- @Author : peng
 
- @Time : 2023-8-18 10:45:46
 
- @File :WeatherControl.py
 
- """
 
- import datetime
 
- from Ansjer.config import CONFIG_INFO, CONFIG_CN
 
- from django.views import View
 
- from Object.IPWeatherObject import WeatherInfo, OpenWeatherMap
 
- from Model.models import UidSetModel, IPAddr
 
- from Object.ResponseObject import ResponseObject
 
- from Object.RedisObject import RedisObject
 
- from Service.CommonService import CommonService
 
- class WeatherView(View):
 
-     def get(self, request, *args, **kwargs):
 
-         request.encoding = 'utf-8'
 
-         operation = kwargs.get('operation')
 
-         return self.validation(request.GET, operation)
 
-     def post(self, request, *args, **kwargs):
 
-         request.encoding = 'utf-8'
 
-         operation = kwargs.get('operation')
 
-         return self.validation(request.POST, operation)
 
-     def validation(self, request_dict, operation):
 
-         lang = request_dict.get('lang', 'en')
 
-         response = ResponseObject(lang)
 
-         if operation == 'get':  # 获取天气
 
-             return self.get_weather(request_dict, response)
 
-         else:
 
-             return response.json(414)
 
-     @staticmethod
 
-     def get_weather(request_dict, response):
 
-         """
 
-         获取天气
 
-         @param request_dict: 请求参数
 
-         @request_dict uid: 设备uid
 
-         @param response: 响应对象
 
-         @return: response
 
-         """
 
-         uid = request_dict.get('uid')
 
-         if not uid:
 
-             return response.json(444, 'uid')
 
-         uid_set_qs = UidSetModel.objects.filter(uid=uid).values('tb_city_information_id', 'ip')
 
-         if not uid_set_qs.exists():
 
-             return response.json(173)
 
-         try:
 
-             # 根据服务器配置使用不同的服务, 国内:阿里云墨迹天气, 测试,国外:OpenWeatherMap
 
-             if CONFIG_INFO == CONFIG_CN:
 
-                 city_id = uid_set_qs[0]['tb_city_information_id']
 
-                 if city_id == 0:
 
-                     return response.json(10, '请更新设备影子地区信息')
 
-                 today = datetime.datetime.today()
 
-                 now_time = datetime.datetime(today.year, today.month, today.day, today.hour)
 
-                 time_stamp = CommonService.str_to_timestamp(now_time.strftime('%Y-%m-%d %H:%M:%S'))
 
-                 key = 'city_id_{}_{}_weather'.format(city_id, time_stamp)
 
-                 redis_obj = RedisObject()
 
-                 weather = redis_obj.get_data(key)
 
-                 if weather:
 
-                     temp, humidity = weather.split('/')
 
-                 else:
 
-                     city_obj = WeatherInfo(city_id)
 
-                     temp, humidity = city_obj.get_city_weather()
 
-                     if temp and humidity:
 
-                         redis_obj.set_ex_data(key, '{}/{}'.format(temp, humidity), 3600)
 
-             else:
 
-                 ip = uid_set_qs[0]['ip']
 
-                 ip_addr_qs = IPAddr.objects.filter(ip=ip, is_geoip2=True).values('lat', 'lon')
 
-                 if not ip_addr_qs.exists():
 
-                     return response.json(173)
 
-                 lat, lon = ip_addr_qs[0]['lat'], ip_addr_qs[0]['lon']
 
-                 open_weather_map = OpenWeatherMap(lat, lon)
 
-                 temp, humidity = open_weather_map.get_weather()
 
-             if temp is None and humidity is None:
 
-                 return response.json(10, '获取天气失败')
 
-             return response.json(0, {'temp': temp, 'humidity': humidity})
 
-         except Exception as e:
 
-             print(e)
 
-             return response.json(500)
 
 
  |