5 个版本
0.2.4 | 2021 年 5 月 27 日 |
---|---|
0.2.3 | 2021 年 5 月 27 日 |
0.1.7 |
|
0.0.8 |
|
#32 in #天气
每月 78 次下载
用于 5 crates
235KB
2.5K SLoC
openweathermap
...是一个 rust crate,它允许您轻松地从 OpenWeatherMap 获取当前天气数据。这是我为了学习 rust 而制作的一个 非官方 扩展,但我希望您能从中获得乐趣。
内容
如何使用
首先将此 crate 添加到您的 Cargo.toml
文件中的依赖项
[dependencies]
openweathermap = "0.2.3"
获取持续的天气更新
然后在 Rust 源文件中使用此 crate,通过调用 openweathermap::init()
获取一个接收器对象。然后您可以使用这个接收器对象来调用 openweathermap::update()
来获取天气更新,如下例所示
extern crate openweathermap;
use openweathermap::{init,update};
fn main() {
// start our observatory via OWM
let receiver = &init("Berlin,DE", "metric", "en", "<APIKEY>", 10);
loop {
match update(receiver) {
Some(response) => match response {
Ok(current) => println!(
"Today's weather in {} is {}",
current.name.as_str(),
current.weather[0].main.as_str()
),
Err(e) => println!("Could not fetch weather because: {}", e),
},
None => (),
}
}
}
第一步:开始轮询
init()
启动一个线程,该线程将定期轮询 OpenWeatherMap 以获取最新的当前天气报告。然后您可以使用 update()
来请求它。
然后:获取天气更新
从 update()
获取的结果有三种可能类型,您将不得不面对它们
无新内容: None
update()
如果当前没有可用的更新,则返回 None
。这意味着: 您不会收到两次相同的更新!换句话说:update()
不会为您缓存最后的天气更新。
天气更新: CurrentWeather
如果轮询线程通过 update()
下载了新更新,则返回一些 CurrentWeather
对象。CurrentWeather
是一个嵌套的 struct
,包含已解析的 json 属性。这些属性在这里有很好的描述 这里。
一些错误: Err
出错时,update()
返回一些包含简短错误描述的 String
对象。
可能会出现错误...
- 最初,当还没有更新时,您将获得一个包含确切字符串
"loading..."
(在openweathermap::LOADING
中预定义)的Err
。 - 如果收到 服务器错误 响应(例如,如果使用了无效的 API 密钥,则返回
401 未授权
)。 - 在解析来自 OpenWeatherMap 的响应时出现 json 错误。
只获取一次天气
如果您只需要一次天气信息,可以使用将 init()
和 update()
包装到单个同步或异步调用中的 weather()
方法。在第一次成功的天气更新后,生成的线程将立即停止,并将结果作为返回值。
extern crate openweathermap;
use openweathermap::blocking::weather;
fn main() {
// start our observatory via OWM
match &weather("Berlin,DE", "metric", "en", "<APIKEY>") {
Ok(current) => println!(
"Today's weather in {} is {}",
current.name.as_str(),
current.weather[0].main.as_str()
),
Err(e) => println!("Could not fetch weather because: {}", e),
}
}
weather()
有一个 阻塞 和一个 非阻塞 变体。
- 上面的示例使用同步(阻塞)变体
openweathermap::blocking::weather
,它不会返回,直到有新的更新。 - 如果您想自己处理返回的 future,请使用
openweathermap::weather
并异步等待结果,直到有结果。
参考文档
除本介绍外,还有一个参考文档,可以在 这里 找到。
链接
网站
在 openweathermap.thats-software.com 上,这份 README 文件看起来更好。
github 仓库
有关源代码,请参阅 github.com 上的 此存储库。
在 crates.io
在 crates.io 上发布。
许可
openweathermap 根据 MIT 许可证(LICENSE-MIT
或 http://opensource.org/licenses/MIT)授权。
依赖关系
~6–22MB
~307K SLoC