Python weather app tutorial

import datetime as dt
import requests
"""
处理HTTP请求是在Web开发和许多网络应用中常见的任务
尤其是当需要与外部服务或API进行交互时。
python通过多个库提供了处理HTTP请求的功能
最著名且友好的是‘requests’库,以下是‘requests’库处理HTTP请求的一些基础知识1.安装‘requests’库
通过运行以下命令
pip install requests2.发送请求
‘requests’库支持多种HTTP请求方法,如GET,POST,PUT,DELETE等
最常用的是GET和POST
发送GET请求
GET请求通常用于请求数据。以下是一个发送GET请求的例子
import requsets
url = 'https://...'
response = requests.get(url)
#检查请求是否成功
if response.status_code == 200:#处理响应内容data = response.jsonprint(data)
else:print('Failed to retrive data:',response.status_code)发送POST请求
POST请求通常用于提交数据
import requests
url = 'https:...'
my_data = {'key':'value'}response = requests.post(url,data = my_data)if(response.status_code == 200:print('Data submitted successfully.')
else:print('Failed to submit data::'response.status_code)3.响应处理
当发送一个请求后,‘requests’库会返回一个‘response’对象,其中包含了请求的结果
主要属性和方法包括:
'status_code':HTTP状态码,如200表示成功,404表示未找到等
'text':响应内容的字符串形式
'json()':如果响应是JSON格式,可以通过这个方法将其解析为python字典
'headers':一个字典,包含响应头4.处理异常
在网络请求中,很多事情可能出错,如网络问题、错误的URL、服务不可用等。
requests库提供了一系列异常来帮助处理这些问题:
import requests
from requests.exceptions import HTTPErrorurl = 'https...'
try:response = requests.get(url)# 如果响应不是200,将引发异常response.raise_for_status()
except HTTPError as http_err:print(f'HTTP error occurred: {http_err}')
except Exception as err:print(f'Other error occurred: {err}')
else:print('Success!')"""BASE_URL = "http://API.openweathermap.org/data/2.5/weather?"
#API_KEY = open('api_key','r').read()
#API_KEY = "..."
# 打开文件,读取API密钥,然后立即关闭文件
with open('E:\\Python\\pycode\\PythonLearn\\api_key.txt', 'r') as file:API_KEY = file.read().strip()CITY = "New York"def kelvin_to_celsius_fahrenheit(kelvin):celsius = kelvin - 273.15fahrenheit = celsius * (9/5) + 32return celsius,fahrenheiturl = BASE_URL + "appid=" + API_KEY + "&q=" + CITYresponse = requests.get(url).json()"""
JSON是Web API 常用的数据格式。python的‘json’模块提供了简单的方法来解析JSON字符串
让它们编程python的数据结果(比如字典和列表)
1.使用json.loads()
json.loads()函数用于将JSON格式的字符串转换为Python的数据结构。
"loads"是"load string"的缩写,意为从字符串加载JSON数据。假设从Web API获取了以下JSON格式的字符串:
{"name": "Jane Doe","age": 25,"isEmployed": true,"skills": ["Python", "Data Analysis", "Machine Learning"],"address": {"street": "456 Elm St","city": "Springfield","zipCode": "12345"}
}
这个JSON对象包含了不同类型的数据:字符串、数字、布尔值、数组和嵌套的对象。2.解析JSON字符串
要在Python中解析这个JSON字符串,
可以使用json.loads()方法:
import json# 假设json_string变量包含了上面的JSON数据
json_string = '''
{"name": "Jane Doe","age": 25,"isEmployed": true,"skills": ["Python", "Data Analysis", "Machine Learning"],"address": {"street": "456 Elm St","city": "Springfield","zipCode": "12345"}
}
'''# 解析JSON字符串
data = json.loads(json_string)# 现在data是一个Python字典
print(data['name'])  # 输出: Jane Doe
print(data['skills'])  # 输出: ['Python', 'Data Analysis', 'Machine Learning']
print(data['address']['city'])  # 输出: Springfield
在这个例子中,json.loads()将JSON字符串转换成了一个Python字典。
这使得可以使用标准的字典访问方法来获取数据。
例如,data['name']会获取name键对应的值。3.处理不同的数据类型
JSON中的数据会被转换成Python的列表,
所以可以使用列表的索引和遍历方法来访问它们
同样,JSON对象中的嵌套对象也会被转换成字典,我们可以通过键来访问嵌套的数据
""""""
API(应用程序编程接口)是一种软件间交互的方式
允许不同的程序通过明确定义的方法相互通信。
API定义了请求的构造方式,可用的功能,数据格式以及如何访问这些功能。
在Web开发中,API通常指的是Web API,它允许应用程序通过互联网使用HTTP协议请求数据或功能。1.使用API密钥进行认证
很多API为了控制访问权限,限制请求次数,或收集使用统计信息,需要使用API密钥进行认证
API密钥是一个唯一的标识符,我们需要在发起请求时提供这个密钥,以验证身份或访问权限。
通常,需要在API提供者的网站上注册,然后创建一个应用或项目来获取API密钥。
获取API密钥后,通常会在HTTP请求的头部(Header)中加入这个密钥,或者作为URL的一部分。
具体方法取决于API的设计。
示例:使用API发送请求
假设有一个天气API,其文档指出:基础URL为https://api.weatherapi.com/v1/
使用API密钥进行认证,密钥应在查询参数中以key提供
获取当前天气的路径为current.json
必须的查询参数有key(API密钥)和q(查询位置,如城市名或邮编)
基于以上信息,一个请求当前天气的URL可能如下:https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=London使用requests库发送这个请求的Python代码示例:
import requestsurl = "https://api.weatherapi.com/v1/current.json"
params = {"key": "YOUR_API_KEY","q": "London"
}response = requests.get(url, params=params)
weather_data = response.json()print(weather_data)
"""

 

import datetime as dt
import requests
BASE_URL = "http://API.openweathermap.org/data/2.5/weather?"
#API_KEY = open('api_key','r').read()
#API_KEY = "..."
# 打开文件,读取API密钥,然后立即关闭文件
with open('E:\\Python\\pycode\\PythonLearn\\api_key.txt', 'r') as file:API_KEY = file.read().strip()CITY = "New York"def kelvin_to_celsius_fahrenheit(kelvin):celsius = kelvin - 273.15fahrenheit = celsius * (9/5) + 32return celsius,fahrenheiturl = BASE_URL + "appid=" + API_KEY + "&q=" + CITYresponse = requests.get(url).json()
temp_kelvin = response['main']['temp']
temp_celsius, temp_fahrenheit = kelvin_to_celsius_fahrenheit(temp_kelvin)
feels_like_kelvin = response['main']['feels_like']
feels_like_celsius, feels_like_fahrenheit = kelvin_to_celsius_fahrenheit(feels_like_kelvin)
wind_speed = response['wind']['speed']
humidity = response['main']['humidity']
description = response['weather'][0]['description']
sunrise_time = dt.datetime.utcfromtimestamp(response['sys']['sunrise'] + response['timezone'])
sunset_time = dt.datetime.utcfromtimestamp(response['sys']['sunset'] + response['timezone'])#摄氏度符号 按住alt键,输入度符号0176
print(f"Temperature in {CITY}: {temp_celsius:.2f}°C or {temp_fahrenheit:.2f}°F")
print(f"Temperature in {CITY} feels like: {feels_like_celsius:.2f}°C or {feels_like_fahrenheit:.2f}°F")
print(f"Humidity in {CITY}: {humidity}%")
print(f"Wind Speed in {CITY}: {wind_speed}m/s")
print(f"General Weather in {CITY}: {description}")
print(f"Sun rises in {CITY} at {sunrise_time} local time.")
print(f"Sun sets in {CITY} at {sunset_time} local time.")

知识点:

URL(Uniform Resource Locator,统一资源定位符)是互联网上用于标识资源位置的一种引用或地址。它是Web上标准的资源定位方式,使得用户可以通过指定的地址访问互联网上的文档、图片、视频以及其他资源。URL具有标准格式,通常包含以下几个部分:

协议(Scheme):指明了用于访问资源的协议类型。常见的协议包括http(超文本传输协议)、https(安全的http)、ftp(文件传输协议)等。

主机名(Host):资源所在的服务器的域名或IP地址。

端口号(Port):可选部分,指明了服务器上特定的端口号,用于访问资源。如果未指定,将使用协议的默认端口(例如,HTTP的默认端口是80,HTTPS的默认端口是443)。

路径(Path):指向服务器上资源的具体位置。例如,在一个Web服务器上,路径可能指向一个特定的网页或图片。

查询字符串(Query):可选部分,以?开头,后面跟一系列的参数,这些参数通常用于向服务器发送额外的信息或请求。参数以key=value的形式出现,多个参数之间用&分隔。

片段(Fragment):可选部分,以#开头,用于指向资源内部的一个锚点(例如,网页中的特定位置)。

URL示例:

https:协议(Scheme)
www.example.com:主机名(Host)
443:端口号(Port),这里是HTTPS的默认端口,通常可以省略
/path/to/page.html:路径(Path),指向服务器上的一个资源
?query=value:查询字符串(Query),用于发送额外的信息给服务器
#section:片段(Fragment),指向网页内部的一个锚点
URL使得访问网络资源变得简单直接,通过在浏览器地址栏输入URL,用户可以直接访问到互联网上的各种资源。
 

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

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

相关文章

小游戏和GUI编程(7) | SimpleNN 界面源码解析

小游戏和GUI编程(7) | SimpleNN 界面源码解析 0. 简介 SimpleNN 是 AdamYuan 在高中一年级时用 1 天时间写出来的简易 CNN, 使用 SFML 做 UI, 用于交互式输入手写数字,这个数字被训练好的 CNN 网络执行推理得到识别结果, 它的运行效果如下: 这一篇我们…

Leetcode 1143 最长公共子序列

题意理解: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字…

专业140+总分420+浙江大学842信号系统与数字电路考研经验电子信息与通信,真题,大纲,参考书。

今年考研已经结束,初试专业课842信号系统与数字电路140,总分420,很幸运实现了自己的目标,被浙大录取,这在高考是想都不敢想的学校,在考研时实现了,所以大家也要有信心,通过自己努力实…

【FPGA】VHDL:八段码到8421BCD码转换电路

目录 EDA设计基础练习题 : 实验要求如下: 代码 八段码到8421BCD码转换电路 8421BCD码到八段码转换电路 八段码到8421BCD~运行结果展示 8421BCD转八段码~运行结果展示 特别注意 软件:Quartus II 13.0 (64-bit) 语言:VHDL E…

勒索病毒最新变种.target勒索病毒来袭,如何恢复受感染的数据?

导言: 在当今数字化时代,数据被视为企业和个人最重要的资产之一。然而,随着技术的进步,网络安全威胁也在不断演变。其中,勒索病毒是一种极具破坏性的威胁,而".target"勒索病毒是近期备受关注的一…

Spark编程实验六:Spark机器学习库MLlib编程

目录 一、目的与要求 二、实验内容 三、实验步骤 1、数据导入 2、进行主成分分析(PCA) 3、训练分类模型并预测居民收入 4、超参数调优 四、结果分析与实验体会 一、目的与要求 1、通过实验掌握基本的MLLib编程方法; 2、掌握用MLLib…

前端JavaScript篇之对async/await 的理解、async/await的优势、async/await对比Promise的优势

目录 对async/await 的理解async/await的优势async/await对比Promise的优势 对async/await 的理解 async/await 是 ES2017 中引入的新特性,它是一种基于 Promise 的异步编程模式,可以让我们更方便地处理异步操作,避免回调地狱,使…

利用Cloudfare worker反代github

绑定你的域名到 cloudflare 创建一个 worker,并写入如下代码: // 反代目标网站. const upstream github.com;// 反代目标网站的移动版. const upstream_mobile github.com;// 访问区域黑名单(按需设置). const blocked_region …

react 【二】 setState/react性能优化/dom操作

文章目录 1、setState1.1 setState的三种用法1.2 setState为什么是异步 2、React性能优化2.1 react的更新机制2.2 如何优化性能2.2.1 shouldComponentUpdate2.2.2 PureComponent2.2.3 memo 3、不可变数据的力量4、dom操作4.1 通过ref获取dom的三种方式4.2 执行子组件的方法&…

大模型提示学习、Prompting微调知识

为什么需要提示学习? 提示学习是一种在自然语言处理任务中引入人类编写的提示或示例来辅助模型生成更准确和有意义的输出的技术。以下是一些使用提示学习的原因: 解决模糊性:在某些任务中,输入可能存在歧义或模糊性,通…

【ES】--Elasticsearch的分词器详解

目录 一、前言二、分词器原理1、常用分词器2、ik分词器模式3、指定索引的某个字段进行分词测试3.1、采用ts_match_analyzer进行分词3.2、采用standard_analyzer进行分词三、如何调整分词器1、已存在的索引调整分词器2、特别的词语不能被拆开一、前言 最近项目需求,针对客户提…

Java多线程 继承Thread类

目录 程序 进程 线程多线程实例创建线程测试线程 程序 进程 线程 程序,进程和线程是操作系统中的基本概念,它们在多线程编程中起着重要的作用。 程序:程序是一组指令的集合,用于实现特定的功能。程序通常是静态的,在程…

【开源】基于JAVA+Vue+SpringBoot的班级考勤管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统基础支持模块2.2 班级学生教师支持模块2.3 考勤签到管理2.4 学生请假管理 三、系统设计3.1 功能设计3.1.1 系统基础支持模块3.1.2 班级学生教师档案模块3.1.3 考勤签到管理模块3.1.4 学生请假管理模块 3.2 数据库设…

Java学习笔记------ArrayList(二)

基本数据类型对应的包装类 byte------Byte、short------Short char------Character、int------Intege long------Long、float------Float double------Double、boolean------Boolean 例如: import java.util.ArrayList; public class test01{public static vo…

Arduino 开发环境

Arduino 刚开始挺简单的,买一块 UNO 或者 Nano,官网下载 IDE (在线的就算了,太慢),立即就可以开始编程了,至少让板载 LED 亮起来没问题。这也是 Arduino 亲儿子的优势,省心。 不过你…

云服务器操作系统Windows和Linux镜像有什么区别?

阿里云服务器镜像Windows和Linux操作系统有什么区别?性能有差异吗?有,同配置下Linux性能要优于Windows,但这与阿里云无关,仅仅是linux和windows之间的区别。另外,阿里云提供的windows和linux操作系统均为正…

Java中 HashSet如何判断两个对象是否相等

HashSet如何判断两个对象是否相等 HashSet 是 Java 中的一个类,它实现了 Set 接口。HashSet 中的元素是无序且唯一的,它不保证元素的顺序,也不允许出现重复元素。为了确定两个对象是否相等,HashSet 使用了以下两个方法&#xff1…

LeetCode、338. 比特位计数【简单,位运算】

文章目录 前言LeetCode、338. 比特位计数【中等,位运算】题目链接与分类思路位运算移位处理前缀思想实现 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java…

Vue3快速上手(三)Composition组合式API及setup用法

一、Vue2的API风格 Vue2的API风格是Options API,也叫配置式API。一个功能的数据&#xff0c;交互&#xff0c;计算&#xff0c;监听等都是分别配置在data, methods&#xff0c;computed, watch等模块里的。如下&#xff1a; <template><div class"person"…

Leetcode 606.根据二叉树创建字符串

给你二叉树的根节点root&#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对"root"表示&#xff0c;转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射…