几分钟内构建你自己的天气仪表板(无需 API 密钥,零成本)

几分钟内构建你自己的天气仪表板(无需 API 密钥,零成本)

一份适合初学者的指南,使用 Streamlit、Plotly 和免费数据创建交互式天气可视化

引言

你可以无需花费一分钱或寻找 API 密钥,在 Python 中构建一个实时天气仪表板。以下是创建一个在线运行、展示实时天气数据及美观交互式图表的方法。

为什么这在 2026 年很重要

今天(2026 年 6 月 30 日),数据可视化工具变得如此平易近人,以至于任何了解基础 Python 的人都可以构建外观专业的数据仪表板。像 Streamlit 这样的工具消除了学习 Web 开发的门槛——你不需要懂得 HTML、CSS 或 JavaScript。对于想要快速将灵感转化为现实的人来说,这具有重大意义。Open-Meteo API 也已成为免费天气数据的首选来源,无需注册,让此类项目真正实现了无缝体验。

你将构建的内容

一个具备以下功能的天气仪表板:

  • 显示任何位置的当前天气状况(温度、湿度、风速)
  • 展示未来几天温度趋势的美观图表
  • 允许你选择地球上的任意城市并立即查看实时数据
  • 在 Streamlit Cloud(Streamlit 的托管服务)上免费运行

整个项目作为一个 Web 应用运行——只需访问一个 URL 即可在浏览器中与之交互。无需管理后端,无需担心服务器。

你所需要准备的

  • 电脑上已安装 Python 3.7 或更高版本
  • 一个文本编辑器(VS Code、Sublime,或任何你喜欢的编辑器)
  • 一个免费的 GitHub 账号
  • 一个免费的 Streamlit Cloud 账号(使用相同的 GitHub 登录)
  • 就这些。无需 API 密钥,无需信用卡,无需订阅。

工作原理(核心思想)

Streamlit 能自动将 Python 脚本转换为 Web 应用。你只需编写 Python 代码,添加少量专用命令来实现交互,Streamlit 就会负责将其转化为网站。Plotly 用于创建图表——它们是交互式的,因此用户可以悬停在数据点上并放大查看。Open-Meteo 是一个由志愿者运营的免费天气 API,无需身份验证或频率限制(在合理范围内)。

这三个部分完美协作:从 Open-Meteo 获取数据,用 Python 进行处理,使用 Streamlit 显示,并通过 Plotly 进行可视化。

步骤 1:安装工具

打开终端并运行:

pip install streamlit plotly requests pandas

这将安装你需要的库。 requests 从互联网获取数据, pandas 帮助整理数据,且 streamlitplotly 处理其余部分。

步骤 2:创建你的 Python 脚本

创建一个名为 app.py 的新文件并粘贴以下内容:

import streamlit as st
import plotly.graph_objects as go
import requests
import pandas as pd
from datetime import datetime

st.set_page_config(page_title="Weather Dashboard", layout="wide")

st.title("Live Weather Dashboard")

city = st.text_input("Enter a city name:", "London")

if city:
    try:
        geo_url = f"https://geocoding-api.open-meteo.com/v1/search?name={city}&count=1"
        geo_response = requests.get(geo_url).json()
        
        if geo_response["results"]:
            location = geo_response["results"][0]
            lat, lon = location["latitude"], location["longitude"]
            name = location["name"]
            
            weather_url = f"https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lon}&current=temperature_2m,humidity,weather_code,wind_speed_10m&hourly=temperature_2m&daily=temperature_2m_max,temperature_2m_min&timezone=auto"
            weather_response = requests.get(weather_url).json()
            
            current = weather_response["current"]
            daily = weather_response["daily"]
            
            col1, col2, col3, col4 = st.columns(4)
            col1.metric("Temperature", f"{current['temperature_2m']}°C")
            col2.metric("Humidity", f"{current['humidity']}%")
            col3.metric("Wind Speed", f"{current['wind_speed_10m']} km/h")
            col4.metric("Location", name)
            
            df = pd.DataFrame({
                "Date": pd.to_datetime(daily["time"]),
                "Max": daily["temperature_2m_max"],
                "Min": daily["temperature_2m_min"]
            })
            
            fig = go.Figure()
            fig.add_trace(go.Scatter(x=df["Date"], y=df["Max"], name="High", mode="lines+markers"))
            fig.add_trace(go.Scatter(x=df["Date"], y=df["Min"], name="Low", mode="lines+markers"))
            fig.update_layout(title="Temperature Forecast", xaxis_title="Date", yaxis_title="Temperature (°C)")
            
            st.plotly_chart(fig, use_container_width=True)
    
    except Exception as e:
        st.error(f"Could not fetch data: {e}")

此脚本:

  • 允许用户输入城市名称
  • 查询该城市的经纬度
  • 从 Open-Meteo 获取当前天气和天气预报
  • 在大卡片中显示关键指标(温度、湿度、风速)
  • 绘制展示未来一周最高和最低温度的图表

步骤 3:本地测试

在终端中,导航到包含 app.py 的文件夹并运行:

streamlit run app.py

Streamlit 会打开一个浏览器窗口。输入城市名称即可查看效果。你会看到实时数据立即呈现。尝试输入“Tokyo”、“New York”或地球上的任何城市——Open-Meteo 拥有所有这些城市的数据。

步骤 4:推送到 GitHub

创建一个新的 GitHub 仓库(公开,无需 README)。然后:

git init
git add app.py
git commit -m "Initial weather dashboard"
git branch -M main
git remote add origin https://github.com/YOUR_USERNAME/REPO_NAME.git
git push -u origin main

YOUR_USERNAMEREPO_NAME 替换为你实际的 GitHub 用户名和仓库名称。

步骤 5:部署到 Streamlit Cloud

前往 Streamlit Cloud (它是免费的,且使用你的 GitHub 账号登录)。点击“New app”并连接你的仓库。Streamlit 会自动找到你的 app.py 文件并进行部署。不出一分钟,你就能获得一个可以与任何人分享的实时 URL。

如果你更新了 GitHub 中的代码,Streamlit 会自动重新部署。你完全无需接触服务器。

步骤 6:自定义(可选)

你可以轻松添加更多功能:

  • 同时显示更多城市
  • 添加更多图表类型(随时间变化的湿度、风向模式)
  • 显示极端天气预警
  • 保存喜爱的城市

Streamlit 的文档非常出色且对初学者友好。核心启发:只要你会写 Python,Streamlit 就能让你无需学习 Web 开发即可构建 Web 应用。

结语

构建天气仪表板不再意味着要费力应对服务器、数据库或 API 身份验证。Streamlit 处理了繁琐的部分,Plotly 让图表更加美观,而 Open-Meteo 免费提供数据。你可以在不到一个小时内将创意变为已部署的应用。这是数据可视化普及程度上的真正变革。

优点

  • 完全免费——无费用、无 API 密钥、无隐藏费用
  • 构建迅速——整个过程大约需要一小时
  • 默认美观——Plotly 图表无需调优即可展现专业外观
  • 交互性强——用户无需你编写额外代码即可点击、悬停和缩放
  • 自动部署——将代码推送到 GitHub,Streamlit 立即重新部署
  • 可扩展至实际项目——相同的方法适用于拥有数千个数据点的仪表板
  • 无需 Web 开发技能——纯 Python

缺点

  • Streamlit Cloud 存在速率限制和资源上限(免费层规格有限)
  • Open-Meteo 的免费层没有正常运行时间保证(虽然不太可能挂掉,但没有 SLA 承诺)
  • 每次用户进行交互时,Streamlit 都会重新运行整个脚本(对于重度计算可能会比较缓慢)
  • UI 设计自定义受限(使用的是 Streamlit 的外观,而不是完全定制的企业品牌体验)
  • 默认没有后端数据库(除非单独构建,否则数据不会持久化)
  • 如果尝试获取海量历史数据集,性能会下降

注意事项

上述代码示例使用了占位符和示例 API 端点。在部署之前,请在本地进行测试并确认其能够配合真实数据正常工作。Open-Meteo 免费且可靠,但存在速率限制——请勿每秒调用数千次。如果你添加了需要存储用户数据的功能,请切记设置适当的后端数据库(Streamlit Cloud 可以连接到 PostgreSQL 或其他服务,但这超出了本文讨论的范围)。请自行承担风险,并在公开分享链接前进行充分测试。

常见问题

  • 如果 Open-Meteo 宕机了会怎样?
  • 我可以添加用户账号并保存喜爱的城市吗?
  • 有多少人可以同时使用该仪表板?
  • 我可以添加更多城市来进行横向并排比较吗?
  • 数据是实时的还是被缓存的?
  • 如何添加更多图表和可视化效果?
  • 我可以自定义颜色和字体吗?
  • 如果 Streamlit Cloud 对于我的使用场景来说太慢了怎么办?

标签

#streamlit #datavisualization #python #plotly #weather #webapps #datascience #opendata

Free field guide

Docker Security Checklist

Lock down your containers from build to runtime — 29 practical controls covering images, runtime flags, secrets, and the daemon. Enter your email — you'll get the PDF instantly, plus new posts on Docker, Linux & security.