昨天在网上发现了一个非常方便的天气API,就用Python试着用了一下。参数是挺少的,用起来也方便,但是那个城市代码确实是搞了我好长时间。

一、介绍

我们先来看一下实现的程序有什么功能:

功能也是非常简单的,输入城市,显示当前城市、当前日期时间、温度和天气。

API使用的是国家气象局的接口,完全免费的:

这个是以北京为例的接口,其中最后的数字101010100就是北京的城市代码。查询其它城市只需要把城市代码修改成其它城市的就可以了。

因为这个API的访问只能通过城市代码,在这方面还是有点麻烦的,不过我把城市代码整理出了一个json文件,稍后会为大家讲解这个过程。

二、返回数据

这里以南昌为例,因为返回的数据比较多,就不完整的列举了。请求成功时,大致数据如下:

里面还有很多没有拉开的地方,然后我们尝试访问一个错误的城市代码:

其中1是非法的城市代码,我们看一下数据:

{

"message": "Request resource not found.",

"status": 404

}

两者都有一个status,也就是状态码。当状态码为200时,说明请求正常完成。404就是我们经常看见的,意思就是没找到。

三、代码讲解

代码是非常简单的,主要就是使用了两个模块:requests、json。一个网络请求,一个json解析。

import requests, json

#api地址

url = 'http://t.weather.sojson.com/api/weather/city/'

#输入城市中文

city = input("请输入你要查询的城市:")

#读取json文件

f = open('city.json', 'rb')

#使用json模块的load方法加载json数据,返回一个字典

cities = json.load(f)

#通过城市的中文获取城市代码

city = cities.get(city)

#网络请求,传入请求api+城市代码

response = requests.get(url + city)

#将数据以json形式返回,这个d就是返回的json数据

d = response.json()

#当返回状态码为200,输出天气状况

if(d['status'] == 200):

print("城市:", d["cityInfo"]["parent"], d["cityInfo"]["city"])

print("时间:", d["time"], d["data"]["forecast"][0]["week"])

print("温度:", d["data"]["forecast"][0]["high"], d["data"]["forecast"][0]["low"])

print("天气:", d["data"]["forecast"][0]["type"])

四、将城市代码转为json数据(Excel技巧)

接下来讲讲我是如下和城市代码斗争的,下面这段大家可以不用看。代码中使用到的city.json文件我会在文末上传。

因为我没有找到获取城市代码的接口,只找到了下面这段文字:

北京:101010100朝阳:101010300顺义:101010400怀柔:101010500通州:101010600昌平:101010700延庆:101010800丰台:101010900石景山:101011000大兴:101011100房山:101011200密云:101011300门头沟:101011400平谷:101011500八达岭:101011600佛爷顶:101011700汤河口:101011800密云上甸子:101011900斋堂:101012000霞云岭:101012100北京城区:101012200海淀:101010200天津:101030100宝坻:101030300东丽:101030400西青:101030500北辰:101030600蓟县:101031400汉沽:101030800静海:101030900津南:101031000塘沽:101031100大港:101031200武清:101030200宁河:101030700上海:101020100宝山:101020300嘉定:101020500南汇:101020600浦东:101021300青浦:101020800松江:101020900奉贤:101021000崇明:101021100徐家汇:101021200闵行:101020200金山:101020700石家庄:101090101张家口:101090301承德:101090402唐山:101090501秦皇岛:101091101沧州:101090701衡水:101090801邢台:101090901邯郸:101091001保定:101090201廊坊:101090601郑州:101180101新乡:101180301许昌:101180401平顶山:101180501信阳:101180601南阳:101180701开封:101180801洛阳:101180901商丘:101181001焦作:101181101鹤壁:101181201濮阳:101181301周口:101181401漯河:101181501驻马店:101181601三门峡:101181701济源:101181801安阳:101180201合肥:101220101芜湖:101220301淮南:101220401马鞍山:101220501安庆:101220601宿州:101220701阜阳:101220801亳州:101220901黄山:101221001滁州:101221101淮北:101221201铜陵:101221301宣城:101221401六安:101221501巢湖:101221601池州:101221701蚌埠:101220201杭州:101210101舟山:101211101湖州:101210201嘉兴:101210301金华:101210901绍兴:101210501台州:101210601温州:101210701丽水:101210801衢州:101211001宁波:101210401重庆:101040100合川:101040300南川:101040400江津:101040500万盛:101040600渝北:101040700北碚:101040800巴南:101040900长寿:101041000黔江:101041100万州天城:101041200万州龙宝:101041300涪陵:101041400开县:101041500城口:101041600云阳:101041700巫溪:101041800奉节:101041900巫山:101042000潼南:101042100垫江:101042200梁平:101042300忠县:101042400石柱:101042500大足:101042600荣昌:101042700铜梁:101042800璧山:101042900丰都:101043000武隆:101043100彭水:101043200綦江:101043300酉阳:101043400秀山:101043600沙坪坝:101043700永川:101040200福州:101230101泉州:101230501漳州:101230601龙岩:101230701晋江:101230509南平:101230901厦门:101230201宁德:101230301莆田:101230401三明:101230801兰州:101160101平凉:101160301庆阳:101160401武威:101160501金昌:101160601嘉峪关:101161401酒泉:101160801天水:101160901武都:101161001临夏:101161101合作:101161201白银:101161301定西:101160201张掖:101160701广州:101280101惠州:101280301梅州:101280401汕头:101280501深圳:101280601珠海:101280701佛山:101280800肇庆:101280901湛江:101281001江门:101281101河源:101281201清远:101281301云浮:101281401潮州:101281501东莞:101281601中山:101281701阳江:101281801揭阳:101281901茂名:101282001汕尾:101282101韶关:101280201南宁:101300101柳州:101300301来宾:101300401桂林:101300501梧州:101300601防城港:101301401贵港:101300801玉林:101300901百色:101301001钦州:101301101河池:101301201北海:101301301崇左:101300201贺州:101300701贵阳:101260101安顺:101260301都匀:101260401兴义:101260906铜仁:101260601毕节:101260701六盘水:101260801遵义:101260201凯里:101260501昆明:101290101红河:101290301文山:101290601玉溪:101290701楚雄:101290801普洱:101290901昭通:101291001临沧:101291101怒江:101291201香格里拉:101291301丽江:101291401德宏:101291501景洪:101291601大理:101290201曲靖:101290401保山:101290501呼和浩特:101080101乌海:101080301集宁:101080401通辽:101080501阿拉善左旗:101081201鄂尔多斯:101080701临河:101080801锡林浩特:101080901呼伦贝尔:101081000乌兰浩特:101081101包头:101080201赤峰:101080601南昌:101240101上饶:101240301抚州:101240401宜春:101240501鹰潭:101241101赣州:101240701景德镇:101240801萍乡:101240901新余:101241001九江:101240201吉安:101240601武汉:101200101黄冈:101200501荆州:101200801宜昌:101200901恩施:101201001十堰:101201101神农架:101201201随州:101201301荆门:101201401天门:101201501仙桃:101201601潜江:101201701襄樊:101200201鄂州:101200301孝感:101200401黄石:101200601咸宁:101200701成都:101270101自贡:101270301绵阳:101270401南充:101270501达州:101270601遂宁:101270701广安:101270801巴中:101270901泸州:101271001宜宾:101271101内江:101271201资阳:101271301乐山:101271401眉山:101271501凉山:101271601雅安:101271701甘孜:101271801阿坝:101271901德阳:101272001广元:101272101攀枝花:101270201银川:101170101中卫:101170501固原:101170401石嘴山:101170201吴忠:101170301西宁:101150101黄南:101150301海北:101150801果洛:101150501玉树:101150601海西:101150701海东:101150201海南:101150401济南:101120101潍坊:101120601临沂:101120901菏泽:101121001滨州:101121101东营:101121201威海:101121301枣庄:101121401日照:101121501莱芜:101121601聊城:101121701青岛:101120201淄博:101120301德州:101120401烟台:101120501济宁:101120701泰安:101120801西安:101110101延安:101110300榆林:101110401铜川:101111001商洛:101110601安康:101110701汉中:101110801宝鸡:101110901咸阳:101110200渭南:101110501太原:101100101临汾:101100701运城:101100801朔州:101100901忻州:101101001长治:101100501大同:101100201阳泉:101100301晋中:101100401晋城:101100601吕梁:101101100乌鲁木齐:101130101石河子:101130301昌吉:101130401吐鲁番:101130501库尔勒:101130601阿拉尔:101130701阿克苏:101130801喀什:101130901伊宁:101131001塔城:101131101哈密:101131201和田:101131301阿勒泰:101131401阿图什:101131501博乐:101131601克拉玛依:101130201拉萨:101140101山南:101140301阿里:101140701昌都:101140501那曲:101140601日喀则:101140201林芝:101140401台北县:101340101高雄:101340201台中:101340401海口:101310101三亚:101310201东方:101310202临高:101310203澄迈:101310204儋州:101310205昌江:101310206白沙:101310207琼中:101310208定安:101310209屯昌:101310210琼海:101310211文昌:101310212保亭:101310214万宁:101310215陵水:101310216西沙:101310217南沙岛:101310220乐东:101310221五指山:101310222琼山:101310102长沙:101250101株洲:101250301衡阳:101250401郴州:101250501常德:101250601益阳:101250700娄底:101250801邵阳:101250901岳阳:101251001张家界:101251101怀化:101251201黔阳:101251301永州:101251401吉首:101251501湘潭:101250201南京:101190101镇江:101190301苏州:101190401南通:101190501扬州:101190601宿迁:101191301徐州:101190801淮安:101190901连云港:101191001常州:101191101泰州:101191201无锡:101190201盐城:101190701哈尔滨:101050101牡丹江:101050301佳木斯:101050401绥化:101050501黑河:101050601双鸭山:101051301伊春:101050801大庆:101050901七台河:101051002鸡西:101051101鹤岗:101051201齐齐哈尔:101050201大兴安岭:101050701长春:101060101延吉:101060301四平:101060401白山:101060901白城:101060601辽源:101060701松原:101060801吉林:101060201通化:101060501沈阳:101070101鞍山:101070301抚顺:101070401本溪:101070501丹东:101070601葫芦岛:101071401营口:101070801阜新:101070901辽阳:101071001铁岭:101071101朝阳:101071201盘锦:101071301大连:101070201锦州:101070701

先将这段文字复制下来,然后打开Excel,选中一个单元,粘贴。就会有如下效果:

然后我们点击北京,拖动横向滚动条,按住shift,点击最后一个数据:

这样就把整个数据全选了。然后复制,点击北京下面一个单元格。右击->选择性复制->勾选转置:

转置后效果如下,

但是这样有一个明显的问题,北京对应的是101010100。而上面是朝阳和101010100在一起,而且在同一单元格。我们先把数据拆成两单元格。在“101010100朝阳”单元格,选中“101010100”。复制到右边(注意要先将格式设置为文本):单元格1,再选择“朝阳”,复制到下一个单元格:单元格2,然后分别点击单元格1、单元格2,按ctrl+E,就有如下效果:

数据都被分开了,然后我们把多余数据删除。我们选中左边列的数据(点开头,按shift,点结尾),剪切,然后点击上一个单元格,复制:

然后就对齐了,现在我们再转置回去。点击左上角、按住shift、点击右下角(有数据的区域),然后复制->点击一个空白单元格->选择性粘贴->转置:

我把两行对换位置,然后转置的。转置之后,我们将有效数据(横向的数据)复制。然后打开浏览器:

使用这个网址,将内容复制进去,点转换就好了。效果如下,我们只需要将json文本保存一个文件就好了。

虽然API的请求确实是非常方便,但是把这个城市代码确实麻烦

代码和文件还用HiJson我都上传了百度云:

提取码:o5ay

前段时间,有位朋友在评论中提供了一个城市代码的接口。在使用过程中还是遇到了一些问题,然后我又找了一下,发现了另一个接口:

这个接口不需要传城市代码,直接传入城市名称就可以了。然后代码就可以改成:

import requests, json

weatherUrl = "http://wthrcdn.etouch.cn/WeatherApi?city=" #返回xml数据

weatherUrl = "http://wthrcdn.etouch.cn/weather_mini?city=" #返回json数据

cityName = input("请输入你要查询的城市:")

weatherResp = requests.get(weatherUrl + cityName)

d = weatherResp.json()

if(d['status'] >= 1000):

print("城市:", d["data"]["city"])

print("时间:", d["data"]["forecast"][0]["date"])

print("温度:", d["data"]["forecast"][0]["high"], d["data"]["forecast"][0]["low"])

print("天气:", d["data"]["forecast"][0]["type"])

因为这个结构返回数据正常是1000,所以判断改成了==1000。一下就方便多了~

用python数据分析excel多地天气_Python实现天气查询功能(外加Excel技巧)相关推荐

  1. python数据分析最基本的库_Python数据分析库pandas基本操作方法_python

    下面就为大家分享一篇Python数据分析库pandas基本操作方法,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 pandas是什么? 是它吗? ....很显然pandas没有这个家伙那么可 ...

  2. python 数据比对 函数_1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源...

    原标题:1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源

  3. python微信公众号翻译功能_自学Python笔记:给微信公众号搭建“成绩查询”功能...

    原标题:自学Python笔记:给微信公众号搭建"成绩查询"功能 期末考试 临近年末,全国各地都在上演一场大戏<期末考试>,考完试无论什么样的结果总想尽快看到自己一个学期 ...

  4. azw3 python数据分析 活用pandas库_Python数据分析 活用Pandas库 数据科学教程数据分析入门图书 Python编程入门数据处理...

    内容介绍 本书是Python数据分析入门书,每个概念都通过简单实例来阐述,便于读者理解与上手.具体内容包括:Python及Pandas基础知识,加载和查看数据集,Pandas的DataFrame对象和 ...

  5. python数据分析基础试题及答案_Python数据分析与数据可视化题库免费期末考试2020答案...

    Python数据分析与数据可视化题库免费期末考试2020答案 更多相关问题 风险管理是一个不断发展变化的演变过程.在风险管理演变过程中,大多数现代风险管理形式是从()中 以下哪项是虚证闭经的主要病机A ...

  6. python创建excel、并保存_python新建并写入内容到excel文件

    整理了一下python对文件的一些常见操作方法 暂时先写一下对excel文件的基本操作,例如新建,写入内容,保存. 先贴代码,注释很详细的. #coding=utf-8 import xlwt imp ...

  7. python数据分析兼职网上接单_python数据分析兼职网上接单

    python数据分析兼职网上接单<python数据分析兼职网上接单>在近日里进行了一次大的版本更新,全新职业迦楼闪亮登场.伴随着新职业的登场,龙腾也开启了新服幽冥现世.新服的人气持续高涨, ...

  8. python发送文件给微信好友_python获取天气接口给指定微信好友发天气预报

    先看下效果图: 用到的模块: PyMySQL requests threading wxpy 要实现上面的示例,首先是有两大块地方 获取天气信息 通过微信将天气信息发送出去 而获取天气信息又包括几个小 ...

  9. 1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 萧箫 发自 凹非寺 转自 | 量子位 你是否也在朋友圈看过这样的小广告: 「你要悄悄学Pyth ...

  10. python数据分析图表展示_1行代码实现Python数据分析:图表美观清晰,自带对比功能丨开源...

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 萧箫 发自 凹非寺 转自 | 量子位 你是否也在朋友圈看过这样的小广告: 「你要悄悄学Pyth ...

最新文章

  1. LeetCode-2 Add Two Numbers
  2. 专访 | 神策数据CEO桑文锋:谁说大数据不需要「小而美」
  3. Spring Cloud Feign设计原理
  4. [翻译]Telnet简单介绍及在windows 7中开启Telnet客户端
  5. 前端服务器获取js文件偶尔慢_我所认识的前端性能优化
  6. 格式化linux grub,linux grub 引导启动过程详解
  7. CUBRID学习笔记 22 插入数据
  8. mysql 5乱码_MySQL 5.x乱码问题解决
  9. Android 系统开发系列四
  10. 【渝粤教育】国家开放大学2018年秋季 1018t国际公法 参考试题
  11. 处女座的砝码-数学推论
  12. 多图详解WBS任务分解法
  13. 常用Java静态代码分析工具的分析与比较
  14. sublime html代码自动排版,sublime Text3 如何自动排版代码
  15. android 格式化sd咔_在Android手机上怎么对SD卡进行格式化
  16. 使用AutoHotKey将多行内容转成单行并翻译或获取中文拼音
  17. lol网通区服务器的位置,LOL英雄联盟转区系统地址在哪?
  18. php 运行c语言,echo c语言运行
  19. Java 基础语法知识 - 万丈高楼平地起
  20. ECL电平特点及其应用

热门文章

  1. C/C++只做经典编程语言
  2. jmeter 计数器_JMeter函数
  3. 推荐一本学习生信的好书,新手友好,实战性强
  4. 李兰娟院士等新冠病毒鸡尾酒疗法研究取得新进展
  5. 这个R包自动注释单细胞数据的平均准确率为83%,使用后我的结果出现了点问题|附全代码...
  6. 安装lxml,抓取、解析网页
  7. linux x64 ffmpeg,ffmpeg编译arm64动态包
  8. laravel mongodb如何声明数据类型_什么是MongoDB?简介,架构,功能和示例
  9. python可变参数和关键字参数位置_python笔记——函数的参数(位置参数、默认参数、可变参数、关键字参数、命名关键字参数、参数组合)...
  10. webdrive不更新_关于selenium 用Webdrive打开Firefox不含有插件的问题(python)