#!/usr/bin/env python3 # -- coding:utf-8 -- # @Author: markushammered@gmail.com # @Development Tool: PyCharm # @Create Time: 2021/12/18 # @File Name: webserver.py import socket import sys 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(): try: 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: 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() except BrokenPipeError: Logger.critical('Link speed was too fast! Subprocess:webserver exited') sys.exit(1)