首页 > 其他分享 >Swift Practice # 172 Swift 取得网页资料并制作台湾乡镇气象连结JSON

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

时间:2022-09-02 00:44:14浏览次数:95  
标签:Town 中央气象局 乡镇 Practice JSON Swift ID

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

标签:Town,中央气象局,乡镇,Practice,JSON,Swift,ID
From: https://www.cnblogs.com/amboke/p/16648339.html

相关文章

  • envi5.3打开失败JSON_PARSE: Invalid string, no closing '"'
    发现破解好的ENVI5.3崩溃了,错误如下: ---------------------------Warning---------------------------JSON_PARSE:Invalidstring,noclosing'"'---------------......
  • Flask 学习-31.flask_jwt_extended 验证token四种方headers/cookies/json/query_stri
    前言用户携带授权token访问时,其jwt的所处位置列表,默认是在请求头部headers中验证。可以通过JWT_TOKEN_LOCATION进行全局配置,设置token是在请求头部,还是cookies,还是json,......
  • fastjson版本替换升级脚本
    fastjson漏洞修复脚本脚本说明fastjson_update.sh:对指定目录下的fastjsonjar包进行备份、升级、还原。使用帮助上传到项目外任意目录下并解压并赋予执行权限(如/......
  • JSON.parse()、JSON.stringify()、JSON.parse(JSON.stringify())
    本文已参与[新人创作礼]活动,一起开启掘金创作之路。JSON对象:JSON对象在大括号{}中书写,对象可包含多个key/value(键/值)对,key必须是字符串,value可以是合法的JSON数据类型(字......
  • 深入解析JSON.stringify和JSON.parse
    日常转化JSON的时候,我们都会用到JSON.stringify,但你真的了解JSON.stringify吗?关于JSON.stringify,我们最多的应用场景无非就是将它转化为JSON字符串,但其实使用过程中也会碰......
  • 用Vue框架实现 - JSON数据渲染页面
     <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="referrer"content="no-referrer"/><metahttp-equiv="X-UA-Compatibl......
  • 慎用JSON.stringify
    前言项目中遇到一个bug,一个组件为了保留一份JSON对象,使用JSON.stringify将其转换成字符串,这样做当然是为了避免对象是引用类型造成数据源的污染。但发现后面使用JS......
  • JSON.stringify() 的妙用
    描述JSON.stringify()的作用就是把JavaScript对象或数组或其他简单值转换为字符串。它还可以用于对象的深拷贝;对JSON字符串进行格式化(缩进);在转换之前对值进行替换操作......
  • Java从json串中获取某个值
    Java从json串中获取某个值java对象是不能直接传输,只有json对象转成字符串可以进行传输故传输中都是json进行的接收到json数据之后java在进行解析转换成为字符串。......
  • Flask 学习-26.JWT(JSON Web Token)生成Token
    前言JSONWebToken(JWT)是一个非常轻巧的规范。jwt广泛应用在系统的用户认证方面,特别是现在前后端分离项目。python中pyjwt是一个独立的包,flask的插件集成了该功能可......