使用chatGPT开发获取格点天气数据

1. 格点天气

1.1. 格点天气

以经纬度为基准的全球高精度、公里级、格点化天气预报产品,包括任意经纬度的实时天气和天气预报。其中,任意坐标的高精度天气,精确到3-5公里范围,包括:温度、湿度、大气压、天气状况、风力、风向等。

注意:格点天气是一种数值预报,由卫星、气象雷达等数据通过模型算法运算而来,它可能受到许多因素的影响,如山脉、建筑物、人类活动、大气变化等。格点天气与观测站数据会有所不同,不可直接对比。

1.1. 格点天气预报

格点天气预报是一种基于空间插值方法,以一定空间分辨率在网格点上对大气各种物理量进行预报的技术。它通过对大气物理量进行网格化,以空间分辨率较高的方式预测未来气象变化。具体来说,格点天气预报通常采用的是数值天气预报模式,将地球分为一系列网格,利用物理方程计算每个网格内的天气参数,然后通过时间积分来预报未来天气。

格点天气预报的特点是可以提供较高精度的天气预报,因为它可以更好地捕捉小尺度天气现象和局地气象变化。此外,格点天气预报也可以针对不同的应用场景提供不同的预报结果。例如,针对航空、海洋、农业、城市气象等不同领域提供不同的预报数据,可以帮助相关领域做出更加准确的决策。

1.2. 格点实时天气

格点实时天气则是指利用近地观测数据以及格点天气模型,通过插值算法实时生成各类气象要素的技术。它可以快速生成气象要素的分布状态,并通过预报模型对未来几小时的变化趋势进行预报。这种技术可以用于实时监测和预警天气灾害、航空、海洋等领域的气象服务。

格点实时天气的特点是具有实时性和准确性。通过使用近地观测数据,它可以更加准确地反映实际天气状况,并及时提供气象预警服务。此外,由于实时预报的时间较短,因此其分辨率更高,能够更好地反映小尺度天气现象的变化。

2. 如何获取气象数据服务

本文以和风天气为例,注册用户(免费/收费),使用其API接口,详见“开始使用”。

2.1. 注册用户

第一步 注册帐号
首先你需要一个和风天气的帐号,关于帐号的说明文档,请参考帐号管理。

点击注册!

第二步 创建项目和KEY
在控制台的左侧导航中,选择项目管理,并点击右上角的“创建项目”按钮。参考项目和KEY。

在创建项目时,需要同时选择一种订阅,例如:免费订阅、标准订阅或高级订阅,我们这里暂时以免费订阅为例。参考订阅。

第三步 获取数据
在浏览器中输入下列API地址(请将最后的KEY替换成你在上一步创建的KEY):

https://devapi.qweather.com/v7/weather/now?location=101010100&key=你的KEY
如果在上一步选择的是标准订阅,请确保你的帐号可用额度≥10,并在浏览器中输入下列API地址:

https://api.qweather.com/v7/weather/now?location=101010100&key=你的KEY
此时你应该就可以获得北京市的实时天气数据了。不过请注意,免费订阅仅支持有限的数据和请求量,请参考订阅对比。

第四步 更多数据
参考开发文档获取更多数据。

2.2. API

对于和风天气网的格点天气,对应API及参数如下:

格点24小时天气预报API:

  • url=“https://devapi.qweather.com/v7/grid-weather/24h?”

  • location=‘103.59984,36.18057’ ,换成自己实际的 经、纬度

  • key=‘***************’ #我自己的和风天气key

格点实时天气数据API:

  • url=“https://devapi.qweather.com/v7/grid-weather/now?”

  • location=‘103.59984,36.18057’ ,换成自己实际的 经、纬度

  • key=‘***************’ #我自己的和风天气key

返回结果集:

  • code API状态码,具体含义请参考状态码
  • updateTime 当前API的最近更新时间
  • fxLink 当前数据的响应式页面,便于嵌入网站或应用
  • now.obsTime 数据观测时间
  • now.temp 温度,默认单位:摄氏度
  • now.icon 天气状况和图标的代码,图标可通过天气状况和图标下载
  • now.text 天气状况的文字描述,包括阴晴雨雪等天气状态的描述
  • now.wind360 风向360角度
  • now.windDir 风向
  • now.windScale 风力等级
  • now.windSpeed 风速,公里/小时
  • now.humidity 相对湿度,百分比数值
  • now.precip 当前小时累计降水量,默认单位:毫米
  • now.pressure 大气压强,默认单位:百帕
  • now.cloud 云量,百分比数值。可能为空
  • now.dew 露点温度。可能为空
  • refer.sources 原始数据来源,或数据源说明,可能为空
  • refer.license 数据许可或版权声明,可能为空

3. 使用chatGPT开发python获取格点天气数据

开发获取格点天气数据,与发电数据(电量)结合构建机器学习数据集,需要是个后台的服务,为了快速、高质量实现,我选择了chatGPT协助实现。

3.1. chatGPT写的代码

import requests
import csv
import time
import datetime
import keyboard

# API接口
url = "https://devapi.qweather.com/v7/grid-weather/now"

# 请求参数,location为经纬度坐标,key为API密钥
params = {
    "location": "103.59984,36.18057",
    "key": "**********"
}

fieldnames = ['obsTime', 'temp', 'icon', 'text', 'wind360', 'windDir', 'windScale', 'windSpeed', 'humidity', 'precip', 'pressure', 'cloud', 'dew']

# csv文件名
filename = 'weather_data.csv'

# 获取天气数据
while True:
    # 按下Esc键退出
    if keyboard.is_pressed('Esc'):
        print('程序已退出')
        break
    
    # 获取当前时间
    current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())

    # 判断是否为整点或半点
    if current_time.split(":")[1] in ["00", "30"]:     
        # 发送API请求并获取返回结果
        response = requests.get(url, params=params)
        result = response.json()

        # 提取关键数据并写入csv文件
        now_data = result['now']
        with open(filename, mode='a', newline='') as file:
            writer = csv.DictWriter(file, fieldnames=fieldnames)
            if file.tell() == 0:
                writer.writeheader()
           
            writer.writerow(now_data)

        # 记录日志
        with open('log.txt', mode='a') as log:
            log.write(f'{current_time}:获取天气数据成功\n')

    # 程序等待60秒钟后再次执行
    time.sleep(60)  

3.2. 与chatGPT沟通过程,清晰、准确描述需求

下面是我与其沟通过程:

我:
使用python语言,开发自动逐时获取天气数据服务,输入Esc键退出。
使用如下API接口获取当前天气数据,
https://devapi.qweather.com/v7/grid-weather/now?location=103.59984,36.18057&key=***********
数据保存为csv格式,并记录每次取数据的日志。

chatGPT:

import requests
import csv
import time

# API接口地址
url = "https://devapi.qweather.com/v7/grid-weather/now"

# 请求参数,根据需要修改
params = {
    "location": "103.59984,36.18057",
    "key": "***********"
}

# csv文件名
filename = "weather_data.csv"

# 日志文件名
log_filename = "weather_log.txt"

# 逐时获取天气数据
with open(filename, mode="a", newline="") as csv_file, open(log_filename, mode="a") as log_file:
    writer = csv.writer(csv_file)
    while True:
        try:
            # 发送请求
            response = requests.get(url, params=params)
            # 解析响应数据
            data = response.json()
            # 提取需要的数据
            obs_time = data["updateTime"]
            temp = data["gridTemperature"]
            humidity = data["humidity"]
            wind_speed = data["windSpeed"]
            # 写入csv文件
            writer.writerow([obs_time, temp, humidity, wind_speed])
            # 写入日志文件
            log_file.write(f"{obs_time}: success\n")
        except Exception as e:
            # 发生异常时写入日志文件
            log_file.write(f"{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}: error {str(e)}\n")
        # 暂停1小时后继续下一次循环
        time.sleep(3600)

其中,您需要将API接口地址、请求参数、文件名等信息修改为实际情况,并使用自己的API密钥进行授权认证。程序会不断逐时获取天气数据,并将数据保存到csv文件中,同时记录每次取数据的日志。按下Esc键可退出程序。

我:
我没有说清晰,取数据的时间为整点,帮着调整下程序。

chatGPT:

import requests
import csv
import time
import datetime

# API接口
url = "https://devapi.qweather.com/v7/grid-weather/now"

# 请求参数,location为经纬度坐标,key为API密钥
params = {
    "location": "103.59984,36.18057",
    "key": "***********"
}

# 循环获取数据
while True:
    # 获取当前时间
    now = datetime.datetime.now()
    
    # 判断是否为整点
    if now.minute == 0 and now.second == 0:
        # 发送请求获取数据
        response = requests.get(url, params=params)
        data = response.json()
        
        # 打印数据
        print(data)
        
        # 保存数据到csv文件
        with open("weather.csv", mode="a", newline="") as file:
            writer = csv.writer(file)
            writer.writerow([now.strftime("%Y-%m-%d %H:%M:%S"), data["now"]["temp"], data["now"]["humidity"]])
        
        # 记录日志
        with open("log.txt", mode="a") as file:
            file.write(f"{now.strftime('%Y-%m-%d %H:%M:%S')}:获取数据成功\n")
        
    # 等待1分钟
    time.sleep(60)
    
    # 监听键盘,按下Esc键退出循环
    if msvcrt.kbhit():
        if ord(msvcrt.getch()) == 27:
            print("退出程序")
            break

这里使用了Python标准库中的datetime模块来获取当前时间,判断是否为整点,并将时间格式化成字符串。同时,每次获取数据时,记录当前时间到日志文件中。

我:
还麻烦你补充一点,csv数据中,需要补充数据字段名称,例如数据内容如下: ‘now’: {‘obsTime’: ‘2023-04-27T09:00+00:00’, ‘temp’: ‘10’, ‘icon’: ‘100’, ‘text’: ‘晴’, ‘wind360’: ‘63’, ‘windDir’: ‘东北风’, ‘windScale’: ‘5’, ‘windSpeed’: ‘30’, ‘humidity’: ‘46’, ‘precip’: ‘0.0’, ‘pressure’: ‘820’, ‘cloud’: ‘25’, ‘dew’: ‘-1’}

chatGPT:

fieldnames = ['obsTime', 'temp', 'icon', 'text', 'wind360', 'windDir', 'windScale', 'windSpeed', 'humidity', 'precip', 'pressure', 'cloud', 'dew']

with open('weather.csv', mode='a', newline='') as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    if file.tell() == 0:
        writer.writeheader()
    writer.writerow(data)

其中fieldnames是一个列表,包含每个数据字段的名称,writer.writeheader()可以在第一次写入数据时自动添加字段名称行。

我:
非常好,谢谢!
再麻烦一下,我要没间隔30分钟,取一次数据,帮修改下代码。

chatGPT:

import requests
import csv
import time
import keyboard

# API接口和参数
url = 'https://devapi.qweather.com/v7/grid-weather/now'
location = '103.59984,36.18057'
key = '***********'
params = {'location': location, 'key': key}

# 字段名
fieldnames = ['obsTime', 'temp', 'icon', 'text', 'wind360', 'windDir', 'windScale', 'windSpeed', 'humidity', 'precip', 'pressure', 'cloud', 'dew']

# csv文件名
filename = 'weather_data.csv'

# 打开文件并写入字段名
with open(filename, mode='a', newline='') as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()

# 获取天气数据
while True:
    # 按下Esc键退出
    if keyboard.is_pressed('Esc'):
        print('程序已退出')
        break
    
    # 获取当前时间
    current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
    
    # 发送API请求并获取返回结果
    response = requests.get(url, params=params)
    result = response.json()
    
    # 提取关键数据并写入csv文件
    now_data = result['now']
    with open(filename, mode='a', newline='') as file:
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        writer.writerow(now_data)
    
    # 记录日志
    with open('log.txt', mode='a') as log:
        log.write(f'{current_time}:获取天气数据成功\n')
    
    # 程序等待30分钟后再次执行
    time.sleep(1800)

这段代码和之前的代码相似,只是将 time.sleep(3600) 修改为 time.sleep(1800),即程序等待30分钟后再次执行。同时,日志记录的内容也有所修改,加上了获取天气数据成功的记录。

我:
非常棒了,我遗漏了,再补充上整点和半点取数。

chatGPT:
代码详见下文,略。
这个版本的代码会在每个整点和半点取一次数据,并将数据保存到CSV文件中。同时也会记录每次取数据的日志,保存在文本文件weather_log.txt中。

3.3. 运行程序

保存csv数据文件内容截取如下:
在这里插入图片描述

注意:时间与北京时间时差8小时,请在后续数据使用时注意、处理。

中间出现了被强制断开的情况,原因未知。

requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054,
 '远程主机强迫关闭了一个现有的连接。', None, 10054, None))

4. 总结

格点天气数据服务内容很全面、功能很好用。

使用chatGPT开发,对于具体、通用性强的功能,其写代码能力还是比较厉害的,特别是能持续沟通、完善过程,更是值得称赞的。

你用chatGPT写代码吗?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信息化发展

信息系统是:管理模型、信息处理模型和系统实现条件结合的 信息系统生命周期: 可行性分析与项目开发计划 需求分析 概要设计 详细设计 编码 测试 可以简化为: 系统规划:现行情况的分析,可行性研究报告 -> 设计任务…

Docker安装运行Nginx容器(纯步骤)

Docker安装Nginx容器并运行 本文章只有步骤,没有原理解释,只做平时学习提示。提前说明:由于nginx里的配置文件比较多,所以本文章不对此配置文件解释而且会有一些小问题,这个你酌情操作,但不影响你nginx容器…

数据库课设--基于Python+MySQL的餐厅点餐系统

文章目录 一、系统需求分析二、系统设计1. 功能结构设计2、概念设计2.2.1 bill_food表E-R图2.2.2 bills表E-R图2.2.3 categories E-R图2.2.4 discounts表 E-R图2.2.5 emp表E-R图2.2.6 food 表E-R图2.2.7 member表E-R图2.2.8 member_point_bill表E-R图2.2.9 servers表E-R图2.2.1…

最常用的从A到Z的Linux命令,真的很好记,三分钟刷完!

Linux的命令行是一个非常强大的工具。如果你知道如何利用Linux命令,你可以轻松地在Linux系统中执行各种任务。在这篇文章中,我们将介绍从A到Z的Linux命令。 alias alias命令允许你为常用的命令设置一个短的别名,以节省时间和减少敲击。例如&…

力扣,合并石头最低成本算法题

1:这个题有题解,自己可以去看力扣,合并石头 2:网上也有视频自己去看视频讲解 3:下面我自己的一些理解 4:原需求: 5:代码:使用贪心算法和最小堆来求解: im…

第九章 子查询

文章目录 前言一、.需求分析与问题解决1 、实际问题2 、子查询的基本使用3 、子查询的分类 二、单行子查询1、单行比较操作符2、代码示例3、 HAVING 中的子查询4、CASE中的子查询5、 子查询中的空值问题6、非法使用子查询 三、多行子查询1、 多行比较操作符2、代码示例3 、空值…

这可能是你看过最详细的Java集合篇【二】—— LinkedList

文章目录 LinkedList继承关系数据结构变量构造方法添加元素相关方法查找元素相关方法删除元素相关方法清空方法遍历方法其它方法常见面试题 LinkedList LinkedList底层数据结构是双向链表。链表数据结构的特点是每个元素分配的空间不必连续、插入和删除元素时速度非常快、但访…

python@可变对象和不可变对象@按值传递和引用传递@python运行可视化工具

文章目录 可变对象和不可变对象🎈可视化工具🎈可变对象和idegeg变量名和内存地址🎈函数调用对参数的修改😂Note 按值传递vs引用传递note🎈如何借助函数修改外部变量的值?Note 可变对象和不可变对象🎈 在Py…

数据库的概念?怎么在linux内安装数据库?怎么使用?

目录 一、概念 二、mysql安装及设置 1.安装mysql 2.数据库服务启动停止 三、数据库基本操作 1、数据库的登录及退出 2、数据表的操作 3、mysql查询操作 一、概念 数据库:是存放数据的仓库,它是一个按数据结构来存储和管理数据的计算机软件系统。数据库管理…

SQLServer的内存管理架构

内存管理架构说明 一、Windows的虚拟内存管理器二、SQL Server 内存体系结构2.1、传统(虚拟)内存2.2、地址窗口扩展 (AWE) 内存 三、从 SQL Server 2012 (11.x) 开始发生的改变3.1、对内存管理的更改3.2、对…

安装多个NodeJS windows上安装多个Nodejs版本 解决vue2/vue3同时运行

第一步下载nvm-windowsnvm-windows 下载地址:Github最新下载地址 进入之后直接下载 第二步 安装NVM 注意路径一定不要包含空格 中文否则会报错 点击安装之后 如果之前安装了nodejs的话会提示 希望nvm管理已安装node 版本吗 点击 是 即可 安装完成后 打开 cmd 输入 n…

Bito:一款 iead/webstorm 神级插件,由 ChatGPT 团队开发,堪称辅助神器

前言: idea(后端),webstorm(前端)中可以用的一款辅助插件:Bito 个人尝试体验效果: 优点是:可以自动完成一些场景代码。 缺点:太慢了,大部分时间一直转圈 摘取文档: 什么是Bito&…

TDA4VM/VH 芯片硬件 mailbox

请从官网下载 TD4VM 技术参考手册,地址如下: TDA4VM 技术参考手册地址 概述 (Mailbox 的介绍在 TRM 的第7.1章节) Mailbox 使用邮箱中断机制实现了 VM 芯片的核间通信。 Mailbox 是集成在 NAVSS0 域下的一个外设(NAVSS0 的说明可以查看&a…

flink on k8s提交任务

目录 相关文档前置准备构建镜像提交任务 相关文档 https://nightlies.apache.org/flink/flink-docs-release-1.13/docs/deployment/resource-providers/native_kubernetes/ 前置准备 flink的lib目录下放入两个依赖 bcpkix-jdk15on-1.68.jar bcprov-jdk15on-1.69.jar 创建用户…

CRM客户关系管理系统主要有哪些功能?

一、CRM客户管理系统是什么 客户关系管理(Customer Relationship Management,简称CRM),是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售、营销和服务上的交互,从而提升…

关于HTML5画布canvas的功能

一、画布的使用 1、首先创建一个画布&#xff08;canvas&#xff09; <canvas id”myCanvas” width”200” height”100” style”border:1px solid #000000”></canvas> 2、使用JavaScript来绘制图像 <script> Var cdocument.getElementByID(“myCanv…

AlgoC++第八课:手写BP

目录 手写BP前言1. 数据加载2. 前向传播3. 反向传播总结 手写BP 前言 手写AI推出的全新面向AI算法的C课程 Algo C&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考。 本次课程主要是手写 BP 代码 课程大纲可看下面的思维导图 1. 数据加载 我们首先来实现下MNIST…

【别再困扰于LeetCode接雨水问题了 | 从暴力法=>动态规划=>单调栈】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

用 ChatGPT 进行阅读理解题目的问答

阅读理解出题 阅读理解题是语言学习过程中一种重要的练习方式。无论语文还是英语考试中&#xff0c;阅读理解题都占有相当大的分值。ChatGPT 作为一种大语言模型&#xff0c;在处理自然语言理解任务中具有很大的优势。广大教师和学生家长们&#xff0c;都可以尝试用 ChatGPT 进…

springboot使用mybatis

扫描mapper接口的位置&#xff0c;生成代理对象 在application.properties配置数据源 测试: 在application.properties配置mybaits&#xff0c;支持驼峰命名&#xff0c;下划线 结果映射: Insert语句例子 在application.properties配置日志 更新 总结: 结果复用 ResultMap第二种…