Swift Practice # 172 Swift 取得网页资料并制作台湾乡镇气象连结JSON

Swift Practice # 172 Swift 取得网页资料并制作台湾乡镇气象连结JSON

上一篇解决了使用Google Admob套件所产生的Link问题,让广告可以顺利显示。

[

Swift Practice # 171 Google Admod 闪退之-ObjC Linker 与SPM

上一篇简单的练习改变SwiftUI Map的显示比例,达到所有显示资料都能够显示在Map的比例尺中

dogpa0130.medium.com

](https://dogpa0130.medium.com/swift-practice-171-google-admod-閃退之-objc-linker-與spm-c1396a404bdb)

这篇则是side project的延伸功能,原本不在计画内,但思考如果多这个功能使用者应该会比较快掌握到所需要的资讯。

主要的目标是要让使用者在点选指定地点后,能有一个按钮可以快速连结到中央气象局的网页查看当地的天气。

这篇则会分成两个部分

取得中央气象局的乡镇市区ID

透过上述取得的ID建立自己的JSON

取得中央气象局的乡镇市区ID

首先可以先看下列连结,点选进入会直接进到台北市中正区的天气资料内。

[

乡镇预报- 中央气象局全球资讯网

乡镇预报

- 中央气象局全球资讯网乡镇预报www.cwb.gov.tw

](https://www.cwb.gov.tw/V8/C/W/Town/Town.html?TID=6300500)

[ https://www.cwb.gov.tw/V8/C/W/Town/Town.html?TID=6300500](https://www.cwb.gov.tw/V8/C/W/Town/Town.html?TID=6300500)

接着可以看看中央气象局台北市北投区天气资讯的网址

[ https://www.cwb.gov.tw/V8/C/W/Town/Town.html?TID=6301200](https://www.cwb.gov.tw/V8/C/W/Town/Town.html?TID=6301200)

可以看到网址前面都一样,差别只在于TID=后面的数字不一样,所以我查看其他县市,观察到每一个乡镇市区都会有对应的ID,如果要透过所在的地点确认当地天气,TID=后面的值应该就会对应各自的乡镇市区。

其实可以一个一个查看乡镇市区ID就好,但台湾有368个乡镇市区,这样一个个查估计查到9月底,所以想到的方法是透过爬虫把368个ID取下来,但尝试过爬虫发现输入不同的网址回传都是台北市中正区,可能是遇到了动态网站,所以透过Chrome的开发者选项(fn+F12)进入开发者选项后输入command+R来确认网站的其他资料并搜寻关键字看到了一个充满曙光的东西。

从上图搜寻完查看到右侧的程式码,发现到一个类似JSON结构的Info_Town资料格式,尝试把这个资料丢到下列网站解析

[

JSON Editor Online:JSON 编辑器、JSON 格式化程序、查询 JSON

在 JSON 编辑器中复制并粘贴您的 JSON 文件,或通过菜单或拖放从磁盘加载它。那么你也能…

jsoneditoronline.org

](https://jsoneditoronline.org)

解析过程发现有些许的问题,但研究了JSON格式后发现将原本的[']改成[”]就可以了,于此我们拿到了中央气象局帮我们建立好乡镇市区ID的JSON档案(可至文末Github连结下载),大大省下一个一个输入ID更改的时间。

建立自己的JSON

基本上如果是单纯的对应乡镇市区ID,上述的JSON应该已经可以让许多人练习,但因我自己已经有建立一个JSON档案,加上中央气象局单一县市的乡镇市区排序并不像一般人习惯依照邮递区号排序的状态,所以我尝试将上面的ID整合到自己的JSON内。而这引发了下一个问题,我要如何快速的将每一个ID放到自己的JSON,如果还是一个一个处理,基本上耗时又有可能输入错误,所以我尝试透过自己原本有的台湾乡镇市区的JSON档案与上面建立好的中央气象局JSON这两个JSON档,透过程式码的帮忙产出单一县市类似JSON的字串结构再贴到JSON中修改成最后使用的JSON档案。又加上两边的JSON档案的乡镇市区排序因为不一致,所以再处理上会再多一个判断。

简单而言就是透过自己目前的JSON进去中央气象局有乡镇市区ID的JSON中找到对应的乡镇市区ID写成String,最后再贴到JSON档案内即可。文字无法理解的话尝试看程式码来理解吧。

首先先加入两个JSON档案到档案中

 taiwanDistrictsZip AndName.json //台湾行政区的JSON  
 ConvertCWBInfoFromChrome.json. //中央气象局带有乡镇市区ID的JSON

模型:

视图模型:

接着在View加入ViewModel跟在onappear执行Function即可开始列印。

接着就可以将列印到的字串转贴到JSON上完成改写JSON,透过这个方法不用一天就完成了原本预计手动约十天的工作。完成的档案

 台湾CampingDistrictsWithCWBID.json

一样放在专案内可从下方Github连结下载取得,这三个JSON可以依照使用情境自己使用,希望这些东西可以在开发路上帮助大家。

参考连结

[

用Swift 取得网页资料

有时候需要取得一些网站上的资料, 但网站偏偏又没有开API 出来让你使用,这个时候该怎么办呢?今天想跟大家分享一下简单的获取网页上资讯的方式, 内容可能包含一点点code ,主要是让大家有个基本的观念。

媒体网

](/@kuanhuachen/%E7%94%A8-swift-%E5%8F%96%E5%BE%97%E7%B6%B2%E9%A0%81%E8%B3%87%E6%96%99-c022335e4b05)

[

您目前无法执行该操作。您使用另一个选项卡或窗口登录。您在另一个选项卡中退出或...

github.com

](https://github.com/dogpa/Swift-Practice-172-CWB-Link-JSON)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/9608/34280200

posted @ 2022-09-02 00:35  哈哈哈来了啊啊啊  阅读(89)  评论(0编辑  收藏  举报