爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6354|回复: 7

[混合编程] IDL之获取网页数据与json解析

[复制链接]

新浪微博达人勋

发表于 2020-3-26 10:38:57 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
万能的IDL啊!
最近在研究高德地图的web服务开发,因为学会了这个,很多工作量就解放了,躺着领工资,爽!
通过研究python的web功能,发现主要是使用requests.get()函数,就能获取网页内容,返回值格式可以是XML或json,
虽然以前我对XML比较熟悉,但网上都说json好,我试了下,果然,json的结构就是结构体(python称之为字典),且高德地图开发文档都给了json结构说明了,使用起来比XML好多了。
在使用python爽过一遍后,我想着IDL是否也有这个功能呢?
我回忆到,在IDL的help的《Image with a Map Projection》这一篇中,IDL有下载静态地图的功能,于是我凭着经验试了一下,居然成功了,下载静态地图与下载网页如出一辙,使用netObject.Get()函数即可。


神清气爽啊!


IDL中json与其他数据结构转换有2个函数:
JSON_SERIALIZE()把数组、结构体等转为json
JSON_PARSE()把json转为数组、结构体等


-------应用案例-------



;高德地图给出的周边搜索功能API:
url='https://restapi.amap.com/v3/place/around?key='+$
'*****************************'+$;这个是高德地图web服务开发key码,自己申请,免费的,我就不亮出来了
'&location=116.473168,39.993015&radius=200&types=011100'


;将网页数据按json格式下载到本地
netObject = IDLnetURL()
jsonfile='C:\Users\Administrator\Desktop\888.json'
!null = netObject.Get(URL=url,FILENAME=jsonfile)
netObject = 0


;按字符串读取该json文件
openr,lun,jsonfile,/get_lun
x=''
readf,lun,x
free_lun,lun


;json字符串转结构体(/TOSTRUCT表示转为结构体)
json=JSON_PARSE(x,/TOSTRUCT)
;以下就按高德地图提供的json格式进行打印了
;高德地图说json下有若干个pois,每个pois是个地点,包括了名称、地址、类型等等
n=n_elements(json.pois)
for i=0,n-1 do begin
  y=json.pois
  print,y.name+'  '+y.address
endfor



输出结果:
依威能源汽车充电站(东亚·望京中心A座)  望京园401号东亚·望京中心A座
宝马充电站(东亚望京中心)  广顺南大街望京园401号
普天新能源汽车充电站(东亚望京中心)  广顺南大街望京园401号(地面)进大门左侧




密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2020-3-26 11:13:15 | 显示全部楼层
学习经验总结------双手互搏术真香!


对于我们气象学子,软件功底是薄弱的,
我们使用的专业性软件,大多属于小众,参考资料不像Java、python、C这种主流计算机语言,有浩如烟海的中文书籍、帖子,
很多资料都是英文的,虽然有不少精英的英文水平是很高的,但文化差别终究限制了学习速度。
英文读起来不仅慢,大量的专有名词也经常令人摸不着头脑。
所以,很早的时候我就考虑用主流语言的功能往IDL对照,通常会起到事半功倍的效果。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-4-13 18:56:32 | 显示全部楼层
心得:万万不要瞎探索!

在掌握地图API使用方法前,我设想了十分复杂宏大的解决方案,我认为需要做个网站才能操作高德地图,要转十八道弯,要用到python、jQuery、Node.js一大堆东西混编......万万没想到,只用两句代码就搞定了!


这就是学习的力量,学习一点新知识,比自己探索强百倍,强万倍!
这也警醒我千万不要在自己不熟悉的东西上瞎探索,会浪费巨大的时间、精力成本!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-8-4 17:05:36 | 显示全部楼层
跟您的代码一样,可是报错了 TIM截图20200804170447.png 问题出在哪里啊
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-8-4 22:16:30 | 显示全部楼层
SonGoku 发表于 2020-8-4 17:05
跟您的代码一样,可是报错了问题出在哪里啊

循环里应该是json.pois【i】,不知为何中括号会自动删除?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-8-5 20:57:02 | 显示全部楼层
15195775117 发表于 2020-8-4 22:16
循环里应该是json.pois【i】,不知为何中括号会自动删除?

原来如此,感谢!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-11-3 15:46:57 | 显示全部楼层
楼主我有下载8.8版本的资源,嘻嘻
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-11-3 15:54:00 | 显示全部楼层
15195775117 发表于 2020-3-26 11:13
学习经验总结------双手互搏术真香!

对于我们气象学子,软件功底是薄弱的,

加个微信,好不好。我也主要用IDL
美国地学,特别是老一代科学家和工程师,都用IDL,有很多丰富的资源。 但现在年轻的一代以及欧洲那边,都开始用Python了。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表