使用Rust开发命令行工具
生成二进制文件,将其扔到环境变量的path下即可~
用rust打造实时天气命令行工具[1]
找到合适的API
使用该api[2]
如请求 api.openweathermap.org/data/2.5/weather?q=Beijing&appid=your_key:
{
"coord": {
"lon": 116.3972,
"lat": 39.9075
},
"weather": [{
"id": 803,
"main": "Clouds",
"description": "broken clouds",
"icon": "04d"
}],
"base": "stations",
"main": {
"temp": 293.35,
"feels_like": 292.34,
"temp_min": 291.09,
"temp_max": 294.13,
"pressure": 1026,
"humidity": 35,
"sea_level": 1026,
"grnd_level": 1020
},
"visibility": 10000,
"wind": {
"speed": 4.86,
"deg": 344,
"gust": 7.43
},
"clouds": {
"all": 73
},
"dt": 1634262993,
"sys": {
"type": 2,
"id": 2021025,
"country": "CN",
"sunrise": 1634250256,
"sunset": 1634290552
},
"timezone": 28800,
"id": 1816670,
"name": "Beijing",
"cod": 200
}
初始化项目&coding
使用cargo new rust_weather 初始化一个项目。
对于cargo.toml文件:
[package]
name = "rust_weather"
version = "0.1.0"
edition = "2018"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]
structopt = "0.3.21"
exitfailure = "0.5.1"
serde = "1.0.114"
serde_json = "1.0.56"
serde_derive = "1.0.114"
reqwest = { version = "0.11", features = ["json"] }
tokio = { version = "1", features = ["full"] }
对于src/main.rs文件:
use exitfailure::ExitFailure;
use reqwest::Url;
use serde_derive::{Deserialize, Serialize};
use structopt::StructOpt;
#[derive(Serialize,Deserialize,Debug)]
struct W {
coord: Coord,
weather: Weather,
base: String,
main: Main,
}
impl W {
async fn get(city: &String) -> Result<Self, ExitFailure> {
let url = format!("https://api.openweathermap.org/data/2.5/weather?q={}&appid=40452068d845180226c3f289341974b7", city);
// 转换为url
let url = Url::parse(&*url)?;
let resp = reqwest::get(url).await?.json::<W>().await?;
Ok(resp)
}
}
#[derive(Serialize,Deserialize,Debug)]
struct Coord {
lon: f64,
lat: f64,
}
#[derive(Serialize,Deserialize,Debug)]
struct Weather {
details: Details,
}
#[derive(Serialize,Deserialize,Debug)]
struct Details {
id: i32,
main: String,
description: String,
icon: String,
}
#[derive(Serialize,Deserialize,Debug)]
struct Main {
temp: f64,
feels_like: f64,
temp_min: f64,
temp_max: f64,
pressure: i32,
humidity: i32,
}
#[derive(StructOpt)]
struct Input {
city: String
}
#[tokio::main]
async fn main() -> Result<(), ExitFailure> {
let input = Input::from_args();
//println!("{}", input.city);
let resp = W::get(&input.city).await?;
println!("{} \n 天气: {} \n 当前温度: {} \n 最高温度: {} \n 最低温度: {} \n 湿度: {}", input.city, resp.weather.details.main, resp.main.temp, resp.main.temp_max, resp.main.temp_min, resp.main.humidity);
//println!("Hello, world!");
Ok(())
}
使用cargo run Beijing进行调试
直到能够准确输出预订结果,如下:
➜ rust_weather git:(master) ✗ cargo run Beijing
Finished dev [unoptimized + debuginfo] target(s) in 0.13s
Running `target/debug/rust_weather Beijing`
Beijing
天气: Clouds
当前温度: 293.35
最高温度: 294.13
最低温度: 291.09
湿度: 35
将二进制文件移动到系统PATH路径下
此时target/debug/rust_weather即想要的二进制文件,可将其复制到任意一个系统PATH路径下
echo $PATH
/opt/homebrew/opt/node@12/bin:/Users/fliter/.nvm/versions/node/v16.9.0/bin:/usr/local/Cellar/mysql@5.7/5.7.28/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Users/fliter/.cargo/bin:/usr/local/go/bin:/Users/fliter/go/bin:/Users/fliter/Downloads/:/bin:/usr/local/MongoDB/bin:/usr/local/Cellar/ffmpeg/4.3.1/bin:/Users/fliter/.cargo/bin
还可以重命名,如改为weather,复制到usr/local/bin下,而后source .zshrc
在任意命令行窗口下,执行 weather Binzhou:
Binzhou
天气: Rain
当前温度: 291.63
最高温度: 291.63
最低温度: 291.63
湿度: 67
参考自原子之音[3]
参考资料
用rust打造实时天气命令行工具: https://www.bilibili.com/video/BV1eL411b7EL
[2]该api: https://openweathermap.org/api
[3]原子之音: https://www.bilibili.com/video/BV1eL411b7EL
本文由 mdnice 多平台发布
相关文章:
使用Rust开发命令行工具
生成二进制文件,将其扔到环境变量的path下即可~ 用rust打造实时天气命令行工具[1] 找到合适的API 使用该api[2] 如请求 api.openweathermap.org/data/2.5/weather?qBeijing&appidyour_key: { "coord": { "lon": 116.3972, "lat&quo…...
CentOS中Oracle11g进程有哪些
最近遇到Oracle数据库运行过程实例进程由于某种原因导致中止的问题,专门看了下正常Oracle数据库启动后的进程有哪些,查阅资料了解了下各进程的作用,记录如下。 oracle 3032 1 0 07:36 ? 00:00:00 ora_pmon_orcl oracle …...
WebRTC之FEC前向纠错协议
FEC前向纠错用于丢包恢复,对媒体包进行异或或其他算法生成冗余包进行发送。如果接收端出现丢包,可以通过冗余包恢复出原始的媒体包。FEC的代价是增加码率带宽,所以一般会根据网络状况、丢包率来动态调整FEC冗余系数,也会结合NACK/…...
软件测试技术分享丨使用Postman搞定各种接口token实战
现在许多项目都使用jwt来实现用户登录和数据权限,校验过用户的用户名和密码后,会向用户响应一段经过加密的token,在这段token中可能储存了数据权限等,在后期的访问中,需要携带这段token,后台解析这段token才…...
GBU812-ASEMI逆变器专用整流桥GBU812
编辑:ll GBU812-ASEMI逆变器专用整流桥GBU812 型号:GBU812 品牌:ASEMI 芯片个数:4 封装:GBU-4 恢复时间:>50ns 工作温度:-55C~150C 浪涌电流:200A 正向电流&…...
D2007在64位Win7出现 delphi 2007 assertion failure thread32.cpp 的解决办法
Delphi2007 原来安装在Win7 下 运行正常, 自从升级到Win10 ,新建工程运行然后关闭报错, 报错信息如下: --------------------------- bds.exe - bordbk105N.dll --------------------------- Assertion failure: "(!"S…...
windows10 docker 安装在D盘
win10安装docker后发现c盘空间急速减少,360管家查看发现images镜像安装在C盘,于是重装docker desktop以为在安装过程中能够选择,遗憾的是没有提供选择权限,默认直接就安装到了c盘。 desktop 迁移 百度得知可以将c盘的docker安装…...
Scikit-learn强化学习代码批注及相关练习
一、游戏介绍 木棒每保持平衡1个时间步,就得到1分。每一场游戏的最高得分为200分每一场游戏的结束条件为木棒倾斜角度大于41.8或者已经达到200分。最终获胜条件为最近100场游戏的平均得分高于195。代码中env.step(),的返回值就分…...
执行jmeter端口不够用报错(Address not available)
执行jmeter端口不够用报错(Address not available) linux解决方案 // 增加本地端口范围 echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range// 启用快速回收TIME_WAIT套接字 sudo sysctl -w net.ipv4.tcp_tw_recycle 1// 启用套接字的重用 sudo sysctl -w net.ipv4.…...
【Go Web 篇】从零开始:构建最简单的 Go 语言 Web 服务器
随着互联网的迅速发展,Web 服务器成为了连接世界的关键组件之一。而在现代编程语言中,Go 语言因其卓越的性能和并发能力而备受青睐。本篇博客将带你从零开始,一步步构建最简单的 Go 语言 Web 服务器,让你对 Go 语言的 Web 开发能力…...
Android系统-性能-优化概述
目录 引言: APP优化: 网络优化: 内存优化: 卡顿优化: 引言: 先大概对Android性能优化做一个简单分类和梳理。由于性能影响因素多,比如本文分类的APP,内存,网络&…...
用Cmake build OpenCV后,在VS中查看OpenCV源码的方法(环境VS2022+openCV4.8.0) Part II
用Cmake build OpenCV后,在VS中查看OpenCV源码的方法 Part II 用Cmake build OpenCV后,在VS中查看OpenCV源码的方法(环境VS2022openCV4.8.0) Part I_松下J27的博客-CSDN博客 在上一篇文章中,我用cmake成功的生成了ope…...
深度学习5:长短期记忆网络 – Long short-term memory | LSTM
目录 什么是 LSTM? LSTM的核心思路 什么是 LSTM? 长短期记忆网络——通常被称为 LSTM,是一种特殊的RNN,能够学习长期依赖性。由 Hochreiter 和 Schmidhuber(1997)提出的,并且在接下来的工作中…...
LabVIEW开发灭火器机器人
LabVIEW开发灭火器机器人 如今,自主机器人在行业中有着巨大的需求。这是因为它们根据不同情况的适应性。由于消防员很难进入高风险区域,自主机器人出现了。该机器人具有自行检测火灾的能力,并通过自己的决定穿越路径。 由于消防安全是主要问…...
1.2 Kali Linux的网络配置
前言 最新文章请见此处,持续更新,敬请订阅!https://blog.csdn.net/algorithmyyds/category_12418682.html 网络在如今的社会已是十分重要的媒介,如果没有网络,很多事情将难以办成。渗透测试也是一样——毕竟在攻击机…...
目标检测的训练过程
数据集准备(Dataset preparation): 收集或创建带有注释的数据集,其中包括图像或帧以及标注,指定了其中物体的位置和类别。标注通常包括边界框坐标(x、y、宽度、高度)和相应的类别标签。数据预处理: 将图像调整为模型能…...
软考高级系统架构设计师系列论文七十七:论软件产品线技术
软考高级系统架构设计师系列论文七十七:论软件产品线技术 一、摘要二、正文三、总结一、摘要 本人在测井行业的一个国有企业软件开发部工作,从2021年初开始,我陆续参加了多个测井软件开发项目,这些项目都是测井行业资料处理解释软件,具有很强的行业特征,其开发方向和应用…...
基于大语言模型知识问答应用落地实践 – 知识库构建(上)
01 背景介绍 随着大语言模型效果明显提升,其相关的应用不断涌现呈现出越来越火爆的趋势。其中一种比较被广泛关注的技术路线是大语言模型(LLM)知识召回(Knowledge Retrieval)的方式,在私域知识问答方面可以…...
一文1500字从0到1搭建 Jenkins 自动化测试平台
Jenkins 自动化测试平台的作用 自动化构建平台的执行流程(目标)是: 我们将代码提交到代码托管工具上,如github、gitlab、gitee等。 1、Jenkins要能够检测到我们的提交。 2、Jenkins检测到提交后,要自动拉取代码&#x…...
前端面试:【实际项目经验】团队协作、代码管理和Git命令梳理
在现代软件开发中,团队协作、代码管理和版本控制是至关重要的方面。本文将分享一些实际项目经验,重点关注团队协作、代码管理,以及Git版本控制的关键命令和最佳实践。 团队协作: 明确角色和责任: 在项目开始阶段&#…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
