7 Commits

Author SHA1 Message Date
RTAkland
936dd14a87 feat: updated 2021-12-25 12:18:22 +08:00
RTAkland
21a7f9140d feat: updated 2021-12-25 12:15:13 +08:00
RTAkland
23f44c3f78 feat: fixed a bug 2021-12-25 12:14:53 +08:00
RTAkland
9477c33952 feat: update 2021-12-25 12:09:30 +08:00
RTAkland
7fdd0d56a1 feat: fixed a bug 2021-12-25 12:08:52 +08:00
RTAkland
2117771518 feat: update README.md 2021-12-24 19:52:11 +08:00
RTAkland
ea4d04a71c feat: add hitokoto 2021-12-24 19:51:49 +08:00
7 changed files with 63 additions and 56 deletions

View File

@@ -1,7 +1,7 @@
<p align="center">
<a href="https://github.com/MarkusJoe/QWeather">
<img src="https://img.shields.io/badge/Python-3.10.x-blue.svg" alt="PythonVersion">
<img src="https://img.shields.io/badge/release-3.1.4b-green.svg" alt="QWeatherVersion">
<img src="https://img.shields.io/badge/release-3.2.0-green.svg" alt="QWeatherVersion">
<img src="https://img.shields.io/badge/LINCESE-Apache2.0-orange.svg" alt="LICENSE">
</a>
</p>
@@ -32,15 +32,15 @@
- 你可以在**注明来源版权信息**的情况下对源代码进行任意分发和修改以及衍生
### 已实现功能
- [x] 发送免费版&开发板右键
- [x] 发送免费版&开发版天气预报功能
- [x] 间隔10分钟请求一次自然灾害预警信息
- [x] 在网页上快速查看天气
- [ ] ~~推送到QQ(咕咕咕)~~
### 问题汇总
#### Python 版本:
> 程序使用了Python3.10中的match-case语句
> 请使用Python3.10版本运行
> 程序使用了*Python3.10.x*中的match-case语句
> 请使用*Python3.10.x*版本运行
#### 主题选择:
> 在2.9.0之后的版本不支持自定义天气图标 只能使用最新的图标
#### 配置填写问题:
@@ -54,7 +54,7 @@
### 网页上查看天气
- 将所有准备工作完成(能正常运行QWeather.py)
- 运行QWeather.py
- 运行`QWeather.py`
- 打开浏览器输入**127.0.0.1:7898**
>127.0.0.1可以更改为部署本项目的服务器ip, 7898端口不能被其他程序占用或不开放此端口

View File

@@ -15,8 +15,7 @@ from core.language import Language
from core.settings import change_settings
from core.read_config import read_config
from core.sendmail import Mail
from lib.get_host_ip import get_host_ip
from lib import webservice
from lib.webservice import accept_requests
def check_time():
@@ -116,8 +115,8 @@ def main():
processes.submit(check_time)
if settings[2]['webservice']:
Logger.info(f'{language["webservice_ip"]}:{get_host_ip()}:7898')
processes.submit(webservice.process_request())
Logger.info(f'{language["webservice_ip"]}:127.0.0.1:7898')
processes.submit(accept_requests())
time_count = 0
while True:

View File

@@ -1,20 +0,0 @@
# -- coding:utf-8 --
# @Author: markushammered@gmail.com
# @Development Tool: PyCharm
# @Create Time: 2021/12/21
# @File Name: get_host_ip.py
import socket
def get_host_ip():
"""
查询本机ip地址
:return: ip
"""
ip_s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ip_s.connect(('8.8.8.8', 80))
ip = ip_s.getsockname()[0]
ip_s.close()
return ip

View File

@@ -3,3 +3,21 @@
# @Development Tool: PyCharm
# @Create Time: 2021/12/24
# @File Name: hitokoto.py
import requests
from core.language import Language
from core.logger import Logger
def hitokoto():
language = Language()
url = 'https://v1.hitokoto.cn/'
Logger.info(f'{language["hitokoto"]}')
res = requests.get(url).json()
speaker = res['from_who']
text = res['hitokoto']
if not speaker:
speaker = language['noname']
full_text = f'{text} --{speaker}'
return full_text

View File

@@ -7,7 +7,7 @@
import socket
import sys
import threading
from core.logger import Logger
from core.read_config import read_config
from core.information import WeatherInfo
@@ -15,7 +15,7 @@ from core.language import Language
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(('localhost', 7898))
server.bind(('127.0.0.1', 7898))
server.listen(5)
language = Language()
@@ -295,32 +295,42 @@ def build_html():
return "You hadn't selected a mode"
def process_request():
def process_requests(c, a):
"""
处理请求
:param c: connection
:param a: address
:return:
"""
try:
while True:
c, a = server.accept()
data = str(c.recv(1024)).split(':')[0][6:][:-17]
html = build_html()
if data == '/': # 判断用户请求的目标是否为根目录, 如果是则返回html; 如果不是则继续判断
c.send('HTTP1.1/ 200 OK\r\n\r\n'.encode('utf-8'))
c.send(html.encode('utf-8'))
Logger.info(f'{language["get_resource"]} {data} {language["get_resource_from"]} {a[0]}:{a[1]}')
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'{language["get_resource"]} {data} {language["get_resource_from"]} {a[0]}:{a[1]}')
except FileNotFoundError:
c.send(f'HTTP1.1/ 404 Not Found\r\n\r\n{html}'.encode('utf-8'))
c.close()
data = str(c.recv(1024)).split(':')[0][6:][:-17]
html = build_html()
if data == '/' or '': # 判断用户请求的目标是否为根目录, 如果是则返回html; 如果不是则继续判断
c.sendto('HTTP1.1/ 200 OK\r\n\r\n'.encode('utf-8'), a)
c.sendto(html.encode('utf-8'), a)
Logger.info(f'{language["get_resource"]} {data} {language["get_resource_from"]} {a[0]}:{a[1]}')
else: # 继续判断用户请求的文件是否存在
try:
with open(f'.{data}', 'rb') as f:
c.sendto('HTTP1.1/ 200 OK\r\n\r\n'.encode('utf-8'), a)
c.sendto(f.read(), a)
Logger.info(f'{language["get_resource"]} {data} {language["get_resource_from"]} {a[0]}:{a[1]}')
except FileNotFoundError:
c.sendto(f'HTTP1.1/ 404 Not Found\r\n\r\n{html}'.encode('utf-8'), a)
except BrokenPipeError:
Logger.critical(f'{language["connection_speed_too_fast"]}')
sys.exit(1)
Logger.error(f'{language["connection_speed_too_fast"]}')
except IOError:
Logger.critical(f'{language["an_io_error"]}')
sys.exit(1)
Logger.error(f'{language["an_io_error"]}')
finally:
c.close()
return
def accept_requests():
"""
接受请求
:return:
"""
while True:
c, a = server.accept()
threading.Thread(target=process_requests, args=(c, a,)).start()

View File

@@ -33,7 +33,7 @@
"change_setting": "You are changing setting.",
"exit": "Exited.",
"webservice_ip": "Local webservice ip",
"connection_speed_too_fast": "Connection speed is too fast, subprocess: webservice has exited.",
"connection_speed_too_fast": "Connection speed is too fast",
"an_io_error": "An IO error.",
"noname": "No name.",
"hitokoto": "Get hitokoto successfully.",

View File

@@ -32,7 +32,7 @@
"change_setting": "更改设置",
"exit": "已退出",
"webservice_ip": "webservice地址",
"connection_speed_too_fast": "连接速度过快, 子进程:webservice.py 已退出",
"connection_speed_too_fast": "连接速度过快",
"an_io_error": "一个IO错误",
"noname": "佚名",
"hitokoto": "一言获取成功",