你要知道做一个有大量文本的功能是多么麻烦——所以与其从本地获取,不如从网上拿下来。同样,从网络上我们还能够获取很多有趣的东西——这些东西是我们通过本地方法永远实现不了的。
编辑于 2020.2.11 转载请注明作者
从网页获取信息可以做什么
你访问的所有东西其实都是网页,你说能干什么?
从网页获取抽卡模拟数据,并且在本地进行抽卡。
获取视频信息,让你不用点进去就知道视频讲的是啥。
获取网上的统计信息,让你能够了解当前形势如何。
抓到网络新闻重点,让你省着打开新闻软件了。(或者说省着看广告了)
不管怎么样,从网上获取信息可以算得上是一个极大的拓展——它能做到的远远超出我们本地理论所能达到的。
利用现成的api接口——天气实例
我迈出的第一步就是制作一个天气查询
首先,我们要明白,我们调取调取网页信息的方法有两种,一种是直接访问网页获取网页源代码,或者——通过接口来获取人家提供的信息。
而对于天气的获取,我们则采用后者——通过接口来获取对应的信息。
申请和风天气api key
我们百度搜索和风天气。在该页面注册账号并且登陆。
然后根据人家说明文档创建和管理API应用,在应用管理下添加key并且创建应用。
值得注意的是,我们要选择web api类型。
获取常规天气数据
然后,我们访问说明文档的常规天气数据,了解如何发送请求URL。
由于是免费版,因此有:
1 2 3 |
https://free-api.heweather.net/s6/weather/{weather-type}?{parameters} #例如:https://free-api.heweather.net/s6/weather/now?location=beijing&key=xxx #key=xxx,其中xxx为你上文申请的key |
我们访问一下,看看这个网站到底返回了什么。

面对这种一行的json源码,我们最好利用Json格式校验工具进行格式化处理,方便我们阅读。

设计读取该形式的铃心方案
对于这种JSON格式的文件,铃心提供了两种解决方案。
在早期,铃心并没有提供直接的Json解析功能,因此我采用的最初方案是利用正则对每个属性进行匹配。(后来也就懒得改了,现在还是这个方案)
但是就目前来说,我推荐大家通过JSON解析的方式来直接读取JSON格式的内容。
好,那我们开始设计代码吧!首先,我们要访问这个网页获取网络源码。
1 2 3 |
#https://free-api.heweather.net/s6/weather/now?location=北京&key=xxx #这个是可以直接通过网页访问的 【访问https://free-api.heweather.net/s6/weather/now?location=北京&key=【变量key】】 |
然后我们测试一下——诶?怎么返回了一个错误值呢?
1 |
{"HeWeather6":[{"status":"unknown location"}]} |
重要概念,编码
首先,我们要知道,之所以我们能在浏览器正常访问,是因为浏览器自动对我们输入的中文进行编码了——而铃心访问的时候并不会那么智能的自动编码,我们需要手动的进行一次编码之后才能正常访问。
1 |
【访问https://free-api.heweather.net/s6/weather/now?location=【编码北京】&key=【变量key】】 |
这下子返回的就是正常的JSON内容了。
紧接着,我们稍微修改一下,让其不光能够获得北京的信息
1 2 |
【访问https://free-api.heweather.net/s6/weather/now?location=【编码【内容】】&key=【变量key】】 #参数的输入可以采用前缀或者正则匹配的方式 |
JSON格式解析的两种方案
对于获取下来的JSON,我们先采用正则匹配的方式进行数据获取。
1 2 3 |
【赋值变量源码>=<【访问https://free-api.heweather.net/s6/weather/now?location=【编码【内容】】&key=【变量key】】】 城市:【子正则"location":"([^"]+)">=<【变量源码】>=<1】【换行】 纬度:【子正则"lat":"([^"]+)">=<【变量源码】>=<1】【换行】 |
正则匹配可以是一种很有效的匹配方式,但是有很多的缺点——比如说我在JSON里随便的插几个空格,很有可能出现JSON结构没有破坏,但是正则表达式却无法匹配的情况。为了规避这种情况,对于这种稳定的JSON结构,我推荐使用JSON解析的方式来获取数据。
1 2 3 4 |
【赋值变量源码>=<【访问https://free-api.heweather.net/s6/weather/now?location=【编码【内容】】&key=【变量key】】】 城市:【Json解析【变量源码】>=<HeWeather6[0].basic.location】【换行】 纬度:【Json解析【变量源码】>=<HeWeather6[0].basic.lat】【换行】 天气状态:【Json解析【变量源码】>=<HeWeather6[0].now.cond_txt】【换行】 |
关于JSON的属性路径表达式,如果真的要细讲,可能会涉及到很多东西。在此我就简单叙述一下。
JSON中分为两种类型,一种叫做对象,一种叫做数组;具体的关系可以在百科搜索到,这里我就不多谈了。
简单说,以[]括起来的就是数组,其余的都是对象(即以{}括起来的内容)。
对于数组,需要在属性后添加[位置]来确定你所需要的内容。
比如说该例子中,HeWeather就对应着一个数组,但是这个数组只有第一项(也就是0),因此定位向[0],然后从这个项里面拿取basic,再从basic下面拿取location获得属性。
好了,至此你已经学会了如何从一个接口获得自己想要的信息了
关于实现的效果,可以有很多种,比如说我做的是结合了一个制图——

做出来的效果还是可以的——字体是我自己选择安装的。
关于制图,在后面我也会稍微提到一些——不过实在是太简单了,我也不会细讲的。
说实话,这玩意我也不是专业的——全都是自己摸索来的加上自学来的一些经验。如果有错,还请多多包涵。
叹气
Comments | NOTHING