天气查询
import sys
import requests
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout # QTimer
from PyQt5.QtCore import Qt
from PyQt5.QtCore import QTimer
class WeatherWidget(QWidget):
def __init__(self):
super().__init__()
# 创建主布局
self.layout = QVBoxLayout()
self.setLayout(self.layout)
# 创建显示天气信息的标签
self.weather_label = QLabel("正在获取天气信息...")
self.layout.addWidget(self.weather_label)
# 初始化并设置窗口大小等属性
self.setGeometry(300, 300, 400, 150)
self.setWindowTitle("实时天气")
# 设置API和地点
self.api_key = 'b3979fe05b1bec2ba57****38396' # 替换为你的实际API Key
self.location = 'Nepal' # 替换为你想查询的城市名
# 定义更新天气信息的方法
self.update_weather()
# 使用定时器每分钟更新一次天气信息
self.timer = QTimer(self, interval=60000) # 每60秒触发一次
self.timer.timeout.connect(self.update_weather)
self.timer.start()
def update_weather(self):
url = f"https://api.openweathermap.org/data/2.5/weather?q={self.location}&appid={self.api_key}&units=metric"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
print(data)
weather_info = f"{data['name']} 当前温度:{data['main']['temp']}℃"
self.weather_label.setText(weather_info)
else:
self.weather_label.setText("无法获取天气信息,请检查API key或网络连接")
if __name__ == "__main__":
app = QApplication(sys.argv)
widget = WeatherWidget()
widget.show()
sys.exit(app.exec_())
错误分析
- OSError: 表示底层的 socket 连接出现了问题。
- MaxRetryError: 表示连接尝试超过了最大重试次数。
- ProxyError: 表示代理连接失败。
解决步骤
检查代理设置:
- 确保你的代理服务器正在运行并且配置正确。
- 如果你不需要使用代理,确保你的请求没有被错误地配置为使用代理。
检查网络连接:
- 确保你的网络连接正常,没有任何防火墙或网络策略阻止你的连接。
检查 API 密钥:
- 确保你的 API 密钥是正确的,并且已经激活。
尝试不使用代理:
- 如果你不需要代理,确保在请求中不使用代理设置。
示例代码
以下是一个不使用代理的示例代码:
import requests
api_key = '你的API密钥'
url = f'http://api.openweathermap.org/data/2.5/forecast?id=524901&appid={api_key}'
response = requests.get(url)
data = response.json()
if response.status_code == 200:
print(data)
else:
print('Error:', data['message'])
如果你需要使用代理,可以这样设置:
import requests
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
api_key = '你的API密钥'
url = f'http://api.openweathermap.org/data/2.5/forecast?id=524901&appid={api_key}'
response = requests.get(url, proxies=proxies)
data = response.json()
if response.status_code == 200:
print(data)
else:
print('Error:', data['message'])
检查代理服务器
如果你确实需要使用代理,确保代理服务器地址和端口号配置正确。你可以在系统设置或网络设置中检查这些信息。
总结
- 确保 API 密钥正确。
- 确保网络连接正常。
- 确保代理服务器配置正确(如果使用)。
- 检查防火墙或网络策略是否阻止了连接。