天气查询

简介: 【10月更文挑战第02天】

天气查询

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_())

image.png

错误分析

  1. OSError: 表示底层的 socket 连接出现了问题。
  2. MaxRetryError: 表示连接尝试超过了最大重试次数。
  3. ProxyError: 表示代理连接失败。

解决步骤

  1. 检查代理设置

    • 确保你的代理服务器正在运行并且配置正确。
    • 如果你不需要使用代理,确保你的请求没有被错误地配置为使用代理。
  2. 检查网络连接

    • 确保你的网络连接正常,没有任何防火墙或网络策略阻止你的连接。
  3. 检查 API 密钥

    • 确保你的 API 密钥是正确的,并且已经激活。
  4. 尝试不使用代理

    • 如果你不需要代理,确保在请求中不使用代理设置。

示例代码

以下是一个不使用代理的示例代码:

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 密钥正确。
  • 确保网络连接正常。
  • 确保代理服务器配置正确(如果使用)。
  • 检查防火墙或网络策略是否阻止了连接。
目录
相关文章
|
7月前
|
JSON JavaScript 前端开发
免费实时天气预报api接口
免费实时天气预报api接口
919 0
|
数据可视化 JavaScript 开发工具
天猫精灵之天气查询开发
天猫精灵之天气查询
|
1月前
|
API
天气预报15日-墨迹天气-地址查询版免费API接口教程
该接口提供15日天气预报服务,通过指定地址获取墨迹天气预报。支持POST或GET请求,需提供用户ID、KEY、省份名称及地点等参数。返回数据包括15天内每天的天气详情,如最高最低温度、天气变化及图标等。示例中使用的ID和KEY为公共测试账号,建议使用个人账号以获得更高调用频率。
|
XML API 数据格式
天气预报API接口
原文:天气预报API接口 一、中央气象台API接口: 1.
18713 0
|
1月前
|
API
天气预报15日-墨迹天气-IP查询版免费API接口教程
该接口提供基于指定IP地址的15日天气预报,支持POST和GET请求方式。请求需包含用户ID、KEY,可选填IP地址,默认查询访问者IP所在地天气,查询失败时默认返回北京天气。返回值包括状态码、地点及15天天气详情,如星期、日历、天气状况、温度范围及天气图标等。示例请求和响应详见文档。
126 48
|
1月前
|
API
全球天气预报1天-经纬度版免费API接口教程
该接口用于获取全球任意地区的天气信息,需提供经纬度参数。支持POST和GET请求,返回包括天气、气温、气压、湿度等详细信息。详情及示例参见API文档。
|
1月前
|
API
全球天气预报5天-经纬度版免费API接口教程
该接口提供全球任意地区未来5天的天气预报,需输入经纬度参数。支持POST和GET请求方式,返回数据包括天气、气温、气压等详细信息。请求需包含用户ID和KEY,详情及示例参见文档。
|
1月前
|
API
天气预报-腾讯天气-7天-地址查询版免费API接口
这是一个免费的腾讯天气API接口,用于查询指定地址的7天天气预报。支持POST和GET请求方式。请求参数包括id、key、province、city、county等。返回参数包含日期、天气状况、温度等信息。 示例请求地址:https://cn.apihz.cn/api/tianqi/tengxun.php?id=88888888&key=88888888&province=四川省&city=绵阳市&county=。
|
1月前
|
API
天气预报-腾讯天气-7天-IP查询版免费API接口教程
根据IP地址自动查询该IP归属地7天天气预报的腾讯天气API。请求地址为`https://cn.apihz.cn/api/tianqi/tengxunip.php`,支持GET和POST请求。需提供ID、Key和IP地址作为参数。返回数据包含天气预报信息。
|
4月前
|
JSON 前端开发 JavaScript
构建简易天气查询应用
【8月更文挑战第31天】本文将引导你一步步打造一个简易的天气查询应用,不仅提供代码示例,还分享如何利用开源API获取实时数据。我们将探讨如何设计用户界面,处理用户输入,并展示如何在屏幕上优雅地呈现天气信息。文章末尾,我们还将讨论如何进行错误处理和优化用户体验。

热门文章

最新文章