🎧 Listen to this article: हिंदी · English · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · ଓଡ଼ିଆ · 日本語 · 中文
🌍 Read this in your language: हिंदी · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · ଓଡ଼ିଆ · 日本語 · 中文
引言
你可以无需花费一分钱或寻找 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 帮助整理数据,且 streamlit 与 plotly 处理其余部分。
步骤 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}¤t=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_USERNAME 和 REPO_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
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.
Free. No spam — unsubscribe in one click.


Responses
Sign in to leave a response.