From 575de9463d49b21b1ec0111c320e9ecd45de7a3b Mon Sep 17 00:00:00 2001 From: RTAkland Date: Sat, 18 Dec 2021 21:38:29 +0800 Subject: [PATCH] feat: use high quality pictures --- res/basic-resources/sunrise.png | Bin 993 -> 6581 bytes res/basic-resources/sunset.png | Bin 1005 -> 6605 bytes test.py | 6 + tests/webserver.py | 301 ++++++++++++++++++++++++++++++++ 4 files changed, 307 insertions(+) create mode 100644 test.py create mode 100644 tests/webserver.py diff --git a/res/basic-resources/sunrise.png b/res/basic-resources/sunrise.png index 5cbe9f7eb2c7ab30f13a4a6c9dde00ab6c343a5b..12f419ab8ebe60080850a6815dffb80f13accef7 100644 GIT binary patch literal 6581 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 P00000NkvXXu0mjfV*1U0 diff --git a/res/basic-resources/sunset.png b/res/basic-resources/sunset.png index 2e8a73dcda7710dc10596f6dbfba0dba0ca8b5b9..874f2043b201e332de613fa63848f8c7e577a174 100644 GIT binary patch literal 6605 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 bn>+9~fuNKy%ru+l00000NkvXXu0mjfiNx8* diff --git a/test.py b/test.py new file mode 100644 index 0000000..292bd1a --- /dev/null +++ b/test.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python3 +# -- coding:utf-8 -- +# @Author: markushammered@gmail.com +# @Development Tool: PyCharm +# @Create Time: 2021/12/18 +# @File Name: test.py \ No newline at end of file diff --git a/tests/webserver.py b/tests/webserver.py new file mode 100644 index 0000000..00c0420 --- /dev/null +++ b/tests/webserver.py @@ -0,0 +1,301 @@ +#!/usr/bin/env python3 +# -- coding:utf-8 -- +# @Author: markushammered@gmail.com +# @Development Tool: PyCharm +# @Create Time: 2021/12/18 +# @File Name: web_weather.py + +import socket +from core.logger import Logger +from core.read_config import read_config +from core.information import WeatherInfo + +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) +server.bind(('127.0.0.1', 7898)) +server.listen(5) + + +def build_html(): + settings = read_config() + city = settings[3]['city-name'] + mode = settings[1]['mode'] + match mode: + case 'dev': + dev_weather = WeatherInfo().dev_version() + dates = dev_weather[0] + day_weathers = dev_weather[1] + night_weathers = dev_weather[2] + highest_temps = dev_weather[3] + lowest_temps = dev_weather[4] + icons = dev_weather[5] + sunset = dev_weather[6] + sunrise = dev_weather[7] + humidity = dev_weather[8] + wind_speed = dev_weather[9] + wind_scale = dev_weather[10] + wind_dir = dev_weather[11] + uv_index = dev_weather[12] + cloud = dev_weather[13] + pressure = dev_weather[14] + vis = dev_weather[15] + + html = f""" + + + + + Title + +

地区:{city}

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
| 日期  | 天气  | 最低温度  | 最高温度  
今天{day_weathers[0]}/{night_weathers[0]} + {lowest_temps[0]}℃{highest_temps[0]}℃
{dates[1]}{day_weathers[1]}/{night_weathers[1]} + {lowest_temps[1]}℃{highest_temps[1]}℃
{dates[2]}{day_weathers[2]}/{night_weathers[2]} + {lowest_temps[2]}℃{highest_temps[2]}℃
{dates[3]}{day_weathers[3]}/{night_weathers[3]} + {lowest_temps[3]}℃{highest_temps[3]}℃
{dates[4]}{day_weathers[4]}/{night_weathers[4]} + {lowest_temps[4]}℃{highest_temps[4]}℃
{dates[5]}{day_weathers[5]}/{night_weathers[5]} + {lowest_temps[5]}℃{highest_temps[5]}℃
{dates[6]}{day_weathers[6]}/{night_weathers[6]} + {lowest_temps[6]}℃{highest_temps[6]}℃
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
风速/风级/风向相对湿度紫外线
{wind_speed}m/s  {wind_scale}  {wind_dir} {humidity}% {uv_index} 
 
能见度大气压强相对云量
{vis}km {pressure}hPa {cloud}% 
+ + + + + + + + + + + + + + +
 
Sunrise Sunset
 {sunrise} --------------- {sunset} 
+
+
+
+
+ + + QWeather +  ·  + Github Repo + + +
""" + return html + case 'free': + dev_weather = WeatherInfo().free_version() + dates = dev_weather[0] + day_weathers = dev_weather[1] + night_weathers = dev_weather[2] + highest_temps = dev_weather[3] + lowest_temps = dev_weather[4] + icons = dev_weather[5] + sunset = dev_weather[6] + sunrise = dev_weather[7] + humidity = dev_weather[8] + wind_speed = dev_weather[9] + wind_scale = dev_weather[10] + wind_dir = dev_weather[11] + uv_index = dev_weather[12] + cloud = dev_weather[13] + pressure = dev_weather[14] + vis = dev_weather[15] + + html = f""" + + + + + Title + +

地区:{city}

+
+ + + + + + + + + + + + + + + + + + + + + + +
| 日期  | 天气  | 最低温度  | 最高温度  
今天{day_weathers[0]}/{night_weathers[0]} + {lowest_temps[0]}℃{highest_temps[0]}℃
{dates[1]}{day_weathers[1]}/{night_weathers[1]} + {lowest_temps[1]}℃{highest_temps[1]}℃
{dates[2]}{day_weathers[2]}/{night_weathers[2]} + {lowest_temps[2]}℃{highest_temps[2]}℃
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
风速/风级/风向相对湿度紫外线
{wind_speed}m/s  {wind_scale}  {wind_dir} {humidity}% {uv_index} 
 
能见度大气压强相对云量
{vis}km {pressure}hPa {cloud}% 
+ + + + + + + + + + + + + + +
 
Sunrise Sunset
 {sunrise} --------------- {sunset} 
+
+
+
+
+ + + QWeather +  ·  + Github Repo + + +
""" + return html + case _: + return "You hadn't selected a mode" + + +def process_request(): + while True: + c, a = server.accept() + data = str(c.recv(1024)).split(':')[0][6:][:-17] + html = build_html() + if data == '/': + c.send('HTTP1.1/ 200 OK\r\n\r\n'.encode('utf-8')) + c.send(html.encode('utf-8')) + Logger.info(f'{a}: Get {data} --by browser') + else: + print(data) + try: + with open(f'.{data}', 'rb') as f: + c.send('HTTP1.1/ 200 OK\r\n\r\n'.encode('utf-8')) + c.send(f.read()) + Logger.info(f'{a}: Get {data} --by browser') + except FileNotFoundError: + c.send(f'HTTP1.1/ 404 Not Found\r\n\r\n{html}'.encode('utf-8')) + c.close()