使用Dark Sky API构建一个天气仪表盘。

ChangeCode
转载
发布时间: 2025-06-10 17:15:10 | 阅读数 0收藏数 0评论数 0
封面
Dark Sky 专长于天气预报和可视化。Dark Sky 最酷的一点是其天气API,我们可以用它来获取几乎世界上任何地方的天气数据。这不仅仅是知道天气是下雨还是晴天,还包括温度、露点、阵风风速、湿度、降水量、气压、紫外线指数等更多数据,所有这些信息都可以在你想要的时间和地点轻松获取。

准备工作:

材料:

材料名称
数量
备注
树莓派或笔记本电脑
1
/
Dark Sky API 账户
1
/
Initial State 账户
1
/
1

开始使用

我们已经为你做了很多准备工作,包括编写代码和整理信息。你只需要在此过程中做一些调整即可。如果你想挑战一下自己,可以对我们提供的代码进行修改,或更改发送的天气数据,可能性是无限的!

要获取我们为你准备的所有东西,你需要从GitHub上克隆仓库。GitHub是一个允许我们存储、修订和管理此类项目的平台。你可以在一个专用设备上运行此脚本,树莓派就是一个运行这类教程应用程序的理想选择。

要克隆仓库,我们需要进入树莓派的终端,或者通过SSH连接到你的树莓派的电脑终端,并输入以下命令:

$ git clone https://github.com/InitialState/darksky.git

按回车键后,你会看到如下信息:

Cloning into 'darksky'...
remote: Counting objects: 2, done.
remote: Total 2 (delta 0), reused 0 (delta 0), pack-reused 2
Unpacking objects: 100% (2/2), done.
Checking connectivity... done.

当你看到这些信息时,恭喜你,你已成功克隆了GitHub仓库,并拥有了构建此项目所需的所有文件。在进入下一步之前,让我们花点时间浏览这个目录,学习一些基本的命令行命令。

在终端中输入以下命令:

$ ls

这条命令会列出当前目录下的所有内容。列表显示我们的GitHub仓库已成功被克隆到名为“darksky”的目录下。现在让我们看看那个目录里有什么。要进入一个目录,只需输入“cd”,然后输入你想去的目录名称。

在这种情况下,我们将输入:

$ cd darksky

按下回车键后,你会发现我们现在进入了darksky目录。再次输入ls查看我们在树莓派上安装了哪些文件。

README.md darksky.py ...

这里我们可以看到有README文档和Python文件。接下来使用nano命令来查看darksky.py的内容。nano命令允许我们打开nano文本编辑器,在那里可以看到本项目每个部分的所有Python代码。输入:

$ nano darksky.py

在这里你可以看到我们为这个项目准备的所有代码。我们暂时不会对这个文档做任何修改,但你可以随意滚动查看,了解我们在本教程后面将会做什么。

2

使用Dark Sky API

要使用Dark Sky API,你首先需要拥有自己的API密钥。不用担心,获取API密钥既快捷又免费。你只需访问网站并点击“免费试用”来创建账户即可。

  1. 你每天可以免费获得1,000次API调用。超过免费每日限额的每次API请求费用为$0.0001。
  2. 这个限额会在每天世界标准时间(UTC)午夜自动重置。
  3. 预报请求会返回接下来一周的当前天气预报。
  4. 时间机器请求会返回过去或未来某一天的实际观察到的或预测的天气状况。
  5. 你的私有Dark Sky API密钥看起来像这样:0123456789abcdef9876543210fedcba。

你可以通过在浏览器中输入URL的方式来对Dark Sky发起API调用,格式如下:

https://api.darksky.net/forecast/[key]/[latitude],[longitude]

将“key”替换为你的Dark Sky API密钥,并将经度/纬度替换为你想要查询的任何位置。你可以通过前往Google地图并搜索你的位置来找到这些值,它们会显示在URL中。复制上面的Dark Sky URL,并添加你的访问密钥和所需的经纬度值到地址栏中。

完成这一步后,你会看到类似如下的内容:

{
"latitude": 37.8267,
"longitude": -122.4233,
"timezone": "America/Los_Angeles",
"currently": {
"time": 1550615286,
"summary": "Clear",
"icon": "clear-day",
"nearestStormDistance": 57,
"nearestStormBearing": 15,
"precipIntensity": 0,
"precipProbability": 0,
"temperature": 53.9,
"apparentTemperature": 53.9,
"dewPoint": 29.59,
"humidity": 0.39,
"pressure": 1022.45,
"windSpeed": 3.87,
"windGust": 9.25,
"windBearing": 259,
"cloudCover": 0.01,
"uvIndex": 3,
"visibility": 7.8,
"ozone": 309.71
},
...
}

初次查看可能会觉得信息量大且难以阅读,因此我建议使用JSON格式化工具来帮助使数据更易于阅读。格式化后的数据显示可能如下所示:

{
"object": {9},
"latitude": 37.8267,
"longitude": -122.4233,
"timezone": "America/Los_Angeles",
"currently": {19},
"time": 1550615286,
"summary": "Clear",
"icon": "clear-day",
"nearestStormDistance": 57,
"nearestStormBearing": 15,
...
}

至此,恭喜你,你刚刚完成了API调用!看到了吗?这有多么简单,甚至不需要编写一行代码。现在你已经掌握了API的使用方法,我们可以继续进行数据流部分的学习了。

3

初始状态

我们希望将所有的天气数据流式传输到一个云服务,并让该服务将我们的数据转换成一个漂亮的仪表盘,以便我们可以从笔记本电脑或移动设备访问。我们的数据需要一个目的地,我们将使用Initial State作为这个目的地。

第1步:注册Initial State账户

访问 https://iot.app.initialstate.com 并创建一个新账户。你可以获得14天的免费试用,任何拥有.edu邮箱地址的人都可以注册免费的学生计划。

第2步:安装ISStreamer

在你的树莓派上安装Initial State的Python模块。在命令提示符中运行以下命令:

$ cd /home/pi/
$ \curl -sSL https://get.initialstate.com/python -o - | sudo bash

第3步:实现自动化

执行第2步后,你会看到类似如下的输出:

pi@raspberrypi ~ $ \curl -sSL https://get.initialstate.com/python -o - | sudo bash
Password:
Beginning ISStreamer Python Easy Installation!
This may take a couple minutes to install, grab some coffee :)
But don't forget to come back, I'll have questions later!

Found easy_install: setuptools 1.1.6
Found pip: pip 1.5.6 from /Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg (python 2.7)
pip major version: 1
pip minor version: 5
ISStreamer found, updating...
Requirement already up-to-date: ISStreamer in /Library/Python/2.7/site-packages
Cleaning up...

Do you want automagically get an example script? [y/N]
Where do you want to save the example? [default: ./is_example.py]

Please select which Initial State app you're using:
1. app.initialstate.com
2. [NEW!] iot.app.initialstate.com
Enter choice 1 or 2:
Enter iot.app.initialstate.com user name:
Enter iot.app.initialstate.com password:

当询问是否自动获取示例脚本时,输入“y”表示是,并按回车以默认位置保存脚本。对于你正在使用的应用程序的问题,选择2(除非你在2018年11月之前注册),然后输入你的用户名和密码。

第4步:运行示例脚本

运行测试脚本来确保我们可以创建一个数据流到你的Initial State账户。输入以下命令:

$ python is_example.py

第5步:示例数据

回到你的Initial State账户,在网页浏览器中查看。一个新的名为“Python Stream Example”的数据桶应该已经出现在你的日志架左侧(可能需要刷新页面)。点击这个数据桶来查看你的数据。

4

Dark Sky天气仪表盘

现在到了有趣的部分。我们已经准备好开始使用Dark Sky API(或其替代品)来创建一个天气仪表盘,并捕捉选定地点的天气历史。为此,我们将使用Python脚本:darksky.py。这个脚本简单地使用你的API密钥调用Dark Sky API,并在指定的时间间隔内检索天气信息。它还会将数据流传输到你的Initial State账户,使你能够创建一个Dark Sky天气仪表盘。

你可以将此脚本复制到你的树莓派上,或者通过我们之前克隆的GitHub仓库访问它。可以通过输入以下命令进入darksky目录:

$ cd darksky

从这里,你可以访问用于创建天气仪表盘的Python文件。但在运行之前,你需要设置所需的参数并插入你的密钥。通过输入以下命令打开darksky.py文件:

$ nano darksky.py

然后编辑脚本顶部附近的这部分内容:

# --------- 用户设置 ---------
CITY = "Nashville"
GPS_COORDS = "36.1628414,-86.780199"
DARKSKY_API_KEY = "在此处放置你的Dark Sky API密钥"
BUCKET_NAME = ":partly_sunny: " + CITY + " Weather"
BUCKET_KEY = "ds1"
ACCESS_KEY = "在此处放置你的Initial State访问密钥"
MINUTES_BETWEEN_READS = 15
# ---------------------------------

你需要设置所需的GPS坐标和城市名称。还需插入你的Dark Sky API密钥和Initial State账户访问密钥,否则数据将无法传输。MINUTES_BETWEEN_READS参数设置脚本轮询Dark Sky API获取天气信息的频率。15分钟是一个不错的长期间隔。为了短期测试,可以将其设置为0.5分钟。完成修改后,按Control+X退出并保存。

设置好参数后,就可以运行脚本了:

$ python darksky.py

如果你是通过SSH连接到你的树莓派,并希望长时间不间断运行此脚本,可以使用如下nohup命令(无挂断):

$ nohup python darksky.py &

该脚本不仅仅是读取天气数据并发送到Initial State。它还将利用Initial State工具内置的表情符号支持,使仪表盘更加酷炫。你可以在weather_icon函数中看到将当前天气状态转换为表情符号标记的逻辑。对于月相(moon_icon函数)和风向(wind_dir_icon函数),也有类似的处理过程。

5

结论

前往你的Initial State账户查看数据。我将所有的百分比值改为弧形仪表盘,将降水量改为液量计,温度改为温度计。你可以根据需要更改为任何类型的磁贴类型,并为仪表和折线图选择你喜欢的颜色。你还可以将仪表盘设置为暗色或亮色主题,并通过嵌入iFrame的方式将最终产品嵌入到网站中。

如果你想使用来自公开分享的仪表盘布局作为自己的仪表盘,可以按照[这里的说明](这里应包含具体的链接或进一步指示)导入布局到你的数据桶中。你还可以给仪表盘添加背景图片以增加更多的上下文信息。

我们的仪表盘公共分享URL是https://iot.app.initialstate.com/#/404/tiles/bkt_ebon1jp1i2kqc

现在你已经掌握了Dark Sky API(或其替代品),可能性是无穷无尽的!网上有无数免费的API等待你去探索,开始你的项目吧。

请注意,由于Dark Sky API已停止服务,上述内容假设你正在使用一个类似的天气API服务或者Dark Sky API的一个开源替代品。如果有特定的服务或替代API,请确保替换相应的API调用和服务细节。

阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载