Golang实现免费天气预报获取(OpenWeatherMap)

news2024/11/15 12:52:45

    最近接到公司的一个小需求,需要天气数据,所以就做了一个小接口,供前端调用

    这些数据包括六个元素,如降水、风、大气压力、云量和温度。有了这些,你可以分析趋势,知道明天的数据来预测天气。

1.1 工具简介

     OpenWeatherMap可以访问地球上任何位置的当前天气数据! 我们收集和处理来自不同来源的天气数据,例如全球和本地天气模型、卫星、雷达和庞大的气象站网络。 数据以 JSON、XML 或 HTML 格式提供。

1.2 注册

主页右上角有注册入口 Members

1.3 申请key

注册登录后 默认会有一个key,你也可以增加key

在key的设置界面,可以做一些增删改操作

1.4 价格

https://openweathermap.org/price#weather

2.1 API 调用

# city name
https://api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key}

# JSON
https://api.openweathermap.org/data/2.5/weather?q=London&appid={API key}

# XML
https://api.openweathermap.org/data/2.5/weather?q=London&mode=xml&appid={API key}

# Latitude & Longitude
https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={API key}
https://api.openweathermap.org/data/2.5/weather?lat=44.34&lon=10.99&appid={API key}

2.2 API实战

    这里直接上go可运行源码,我项目中只用到温度、湿度、气压和风速,地区设置的是深圳,其它数据可自行查阅openweathermap官方api文档获取

package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

type CurrentWeather struct {
	Main struct {
		Temp     float32 `json:"temp"`     // 温度
		Humidity float32 `json:"humidity"` // 湿度
		Pressure float32 `json:"pressure"` // 气压
	} `json:"main"`

	Wind struct {
		Speed float32 `json:"speed"` // 风速
	} `json:"wind"`
}

func main() {
	// 用你的API Key替换下面的字符串
	apiKey := "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
	location := "shenzhen"

	// 构造API URL
	url := fmt.Sprintf("https://api.openweathermap.org/data/2.5/weather?q=%s&appid=%s&units=metric", location, apiKey)

	// 发送HTTP GET请求
	resp, err := http.Get(url)
	if err != nil {
		fmt.Println("Error making request:", err)
		return
	}
	defer resp.Body.Close()

	// 读取响应体
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("Error reading response body:", err)
		return
	}

	// 解析JSON数据
	var weatherData CurrentWeather
	err = json.Unmarshal(body, &weatherData)
	if err != nil {
		fmt.Println("Error unmarshalling JSON:", err)
		return
	}
	fmt.Printf("weatherData: %.2f °C\n", weatherData)

	// 打印获取到的数据
	fmt.Printf("Temperature: %.1f °C\n", weatherData.Main.Temp)
	fmt.Printf("Humidity: %.2f %%\n", weatherData.Main.Humidity)
	fmt.Printf("Pressure: %.2f hPa\n", weatherData.Main.Pressure)
	fmt.Printf("Wind Speed: %.1f m/s\n", weatherData.Wind.Speed)
}

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1946971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过4G模块EC600N向阿里云物联网平台物模型上面发送字符串,现在发送int数据是成功的,发送字符串就是不成功

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

35个NumPy数据科学核心方法,从入门到精通

大家好,NumPy是Python数据科学生态中的核心编程库。对于Python开发者,精通NumPy是探索数据奥秘的关键。本文将介绍35个NumPy核心方法,帮助大家快速掌握这一强大工具。 使用NumPy库之前,首先需要进行导入,在Python中&a…

如何在vscode中对在服务器上多卡运行的bash脚本进行debug?

问题描述 使用vscode可以很方便地添加断点,进行代码调试。 在使用服务器时,我们的python代码通常是通过bash脚本来执行的,那么如何进行debug呢? 待运行的bash 脚本示例 前半段定义了一些参数,后半段是执行python代码…

一步一步测试DNS隧道

目录 0、前言 1、DNS解析 1.1 DNS简介 1.2 DNS查询类型 1.3 DNS解析过程 2、DNS隧道准备工作 2.1 DNS隧道介绍 2.1.1 什么是DNS隧道? 2.1.2 DNS隧道的原理 2.2 客户端、服务端准备 2.3 域名准备 2.4 连接隧道 2.5 遇坑 3、隧道确认和利用…

编码行缩进

GitHub 曾经对 400,000 个 GitHub 存储库、10 亿个文件、14 TB 的代码的统计,发现大部分语言还是使用空格的多,除了 Go 语言: 空格的优缺点 优点: 一致性:空格可以确保代码在不同的编辑器和查看工具中看起来是一致的…

Python自动化测试之Selenium各浏览器驱动下载网址

在自动化测试领域,Selenium无疑是一个不可或缺的工具。它允许开发者编写脚本来模拟用户在浏览器中的操作,从而进行自动化测试。然而,为了使用Selenium控制不同的浏览器,我们需要安装相应的浏览器驱动(WebDriver&#x…

Istio_01_Istio初识

文章目录 IstioService Mesh Istio Istio: 以服务网格形态用于服务治理的开放平台和基础设施 本质: 以非侵入式治理服务之间的访问和调用服务治理: 流量管理、可观测性、安全性可同时管理多类基础设施(多种网络方案) 如: Istio和Kubernetes架构的结合 Istio通过Kubernetes的域…

SpringBoot 2.x 配置ssl - 自签证书/信用库

文章目录 前言SpringBoot 2.x 配置ssl - 自签证书/信用库1. yml 配置2. 当服务器为客户端发送https请求时改造 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气…

通过 WSL 2 在Windows 上挂载 Linux 磁盘

原文查看 曾为了传输或者共享不同系统的文件频繁地在 Windows 和 Linux 系统之间切换,效率过低,所以尝试通过 WSL 2 在Windows 上挂载 Linux 磁盘。 先决条件 需要在Windows 10 2004 及更高版本(Build 19041 及更高版本)或 Win…

Docker简单快速入门

1. 安装Docker 基于 Ubuntu 24.04 LTS 安装Docker 。 # 更新包索引并安装依赖包 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common# 添加Docker的官方GPG密钥并存储在正确的位置 curl -fsSL https://mirror…

记一次Mycat分库分表实践

一、分库分表 在系统的研发过程中,随着数据量的不断增长,单库单表已无法满足数据的存储需求,此时就需要对数据库进行分库分表操作。 分库分表是随着业务的不断发展,单库单表无法承载整体的数据存储时,采取的一种将整体数据分散存储到不同服务器上的不同数据库中的不同数…

【C++BFS算法】2192. 有向无环图中一个节点的所有祖先

本文涉及知识点 CBFS算法 LeetCode2192. 有向无环图中一个节点的所有祖先 给你一个正整数 n ,它表示一个 有向无环图 中节点的数目,节点编号为 0 到 n - 1 (包括两者)。 给你一个二维整数数组 edges ,其中 edges[i]…

vue3前端开发-小兔鲜项目-产品详情基础数据渲染

vue3前端开发-小兔鲜项目-产品详情基础数据渲染!这一次内容比较多,我们分开写。第一步先完成详情页面的基础数据的渲染。然后再去做一下右侧的热门产品的列表内容。 第一步,还是老规矩,先准备好接口函数。方便我们的页面组件拿到对…

Vue Router基础

Router 的作用是在单页应用(SPA)中将浏览器的URL和用户看到的内容绑定起来。当用户在浏览不同页面时,URL会随之更新,但页面不需要从服务器重新加载。 1 Router 基础 RouterView RouterView 用于渲染当前URL路径对应的路由组件。…

【Linux】-----工具篇(yum介绍)

目录 Ⅰ、是什么? Ⅱ、Linux下安装软件的三种方式 ①源代码安装 ②rpm包安装 ③yum安装 Ⅲ、yum相关操作 1.查看软件包 2.安装软件 3.卸载软件 Ⅳ、yum本地配置 Ⅰ、是什么? yum是包管理器,也就像一个软件下载安装管理的客户端&…

vsftpd搭建FTP服务器 - 虚拟用户

命令记录 $ sudo apt install vsftpd db-util $ sudo nano /etc/vsftpd.conf $ sudo nano /etc/vsftpd/vsftpd-virtual-users.txt $ sudo db_load -T -t hash -f /etc/vsftpd/vsftpd-virtual-users.txt /etc/vsftpd/vsftpd-virtual-users.db ls /etc/vsftpd/vsftpd-virtual-us…

【PHP】系统的登录和注册

一、为什么要学习系统的登录和注册 系统的登录和注册可能存在多种漏洞,这些漏洞可能被恶意攻击者利用,从而对用户的安全和隐私构成威胁。通过学习系统的登录和注册理解整个登录和注册的逻辑方便后续更好站在开发的角度思考问题发现漏洞。以下是一些常见…

基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(一)|| RISC / 底层代码执行步骤 / 汇编指令

本篇文章基于韦东山老师讲课笔记和自己理解编写。 RISC ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点: ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 …

Cyberchef基础概念之-分叉合并-fork/merge

本文将介绍如何利用cyberchef中的fork和merge操作,通过对数据进行分叉和合并对数据进行分类处理。为读者提供数据处理多种思路,使得读者能够在日常的工作中灵活的应对数据中的不同部分,还原被编码数据的原貌。 fork和merge操作是Cyberchef非…

【odoo17】后端py方法触发右上角提示组件

概要 在前面文章中,有介绍过前端触发的通知服务。 【odoo】右上角的提示(通知服务) 此文章则介绍后端触发方法。 内容 直接上代码:但是前提一定是按钮触发!!!!! def bu…