├── COVID-19_Tracking
├── app.py
├── spider.py
├── static
│ ├── css
│ │ └── main.css
│ └── js
│ │ ├── china.js
│ │ ├── controller.js
│ │ ├── ec_center.js
│ │ ├── ec_left1.js
│ │ ├── ec_left2.js
│ │ ├── ec_right1.js
│ │ ├── ec_right2.js
│ │ ├── echarts-wordcloud.min.js
│ │ ├── echarts.min.js
│ │ └── jquery-1.11.1.min.js
├── templates
│ ├── index.html
│ ├── main.html
│ └── test.html
└── utils.py
├── README.md
├── 开发过程中的版本
├── COVID-19_Tracking1
│ ├── .idea
│ │ ├── inspectionProfiles
│ │ │ └── profiles_settings.xml
│ │ ├── lian.iml
│ │ ├── misc.xml
│ │ ├── modules.xml
│ │ └── workspace.xml
│ ├── .vscode
│ │ └── settings.json
│ ├── README.md
│ ├── __pycache__
│ │ ├── app.cpython-37.pyc
│ │ └── utils.cpython-37.pyc
│ ├── app.py
│ ├── static
│ │ ├── css
│ │ │ └── main.css
│ │ └── js
│ │ │ ├── china.js
│ │ │ ├── controller.js
│ │ │ ├── ec_center.js
│ │ │ ├── echarts-wordcloud.min.js
│ │ │ ├── echarts.min.js
│ │ │ └── jquery-1.11.1.min.js
│ ├── templates
│ │ ├── index.html
│ │ ├── main.html
│ │ └── test.html
│ ├── utils.py
│ ├── zong.py
│ ├── 爬取并处理腾讯疫情数据.py
│ └── 爬取百度热搜.py
├── COVID-19_Tracking2
│ ├── .idea
│ │ ├── inspectionProfiles
│ │ │ └── profiles_settings.xml
│ │ ├── lian.iml
│ │ ├── misc.xml
│ │ ├── modules.xml
│ │ └── workspace.xml
│ ├── .vscode
│ │ └── settings.json
│ ├── README.md
│ ├── __pycache__
│ │ ├── app.cpython-37.pyc
│ │ └── utils.cpython-37.pyc
│ ├── app.py
│ ├── static
│ │ ├── css
│ │ │ └── main.css
│ │ └── js
│ │ │ ├── china.js
│ │ │ ├── controller.js
│ │ │ ├── ec_center.js
│ │ │ ├── ec_left1.js
│ │ │ ├── ec_left2.js
│ │ │ ├── echarts-wordcloud.min.js
│ │ │ ├── echarts.min.js
│ │ │ └── jquery-1.11.1.min.js
│ ├── templates
│ │ ├── index.html
│ │ ├── main.html
│ │ └── test.html
│ ├── utils.py
│ ├── zong.py
│ ├── 爬取并处理腾讯疫情数据.py
│ └── 爬取百度热搜.py
└── COVID-19_Tracking_本机
│ ├── .idea
│ ├── inspectionProfiles
│ │ └── profiles_settings.xml
│ ├── lian.iml
│ ├── misc.xml
│ ├── modules.xml
│ └── workspace.xml
│ ├── .vscode
│ └── settings.json
│ ├── README.md
│ ├── __pycache__
│ ├── app.cpython-37.pyc
│ └── utils.cpython-37.pyc
│ ├── app.py
│ ├── cov_1.sql
│ ├── spider.py
│ ├── static
│ ├── css
│ │ └── main.css
│ └── js
│ │ ├── china.js
│ │ ├── controller.js
│ │ ├── ec_center.js
│ │ ├── ec_left1.js
│ │ ├── ec_left2.js
│ │ ├── ec_right1.js
│ │ ├── ec_right2.js
│ │ ├── echarts-wordcloud.min.js
│ │ ├── echarts.min.js
│ │ └── jquery-1.11.1.min.js
│ ├── templates
│ ├── index.html
│ ├── main.html
│ └── test.html
│ ├── utils.py
│ ├── 爬取并处理腾讯疫情数据.py
│ └── 爬取百度热搜.py
└── 疫情数据网站.txt
/COVID-19_Tracking/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from flask import render_template
3 | from flask import jsonify
4 | from jieba.analyse import extract_tags
5 | import utils
6 | import string
7 |
8 |
9 |
10 | app = Flask(__name__)
11 |
12 |
13 | @app.route('/')
14 | def hello_world():
15 | return render_template('main.html')
16 |
17 | @app.route('/c1')
18 | def get_c1_data():
19 | data = utils.get_c1_data()
20 | return jsonify({"confirm":data[0],"suspect":data[1],"heal":data[2],"dead":data[3]})
21 |
22 | @app.route('/c2')
23 | def get_c2_data():
24 | res = []
25 | for tup in utils.get_c2_data():
26 | res.append({"name":tup[0],"value":int(tup[1])})
27 | return jsonify({"data":res})
28 |
29 |
30 | @app.route("/l1")
31 | def get_l1_data():
32 | data = utils.get_l1_data()
33 | day,confirm,suspect,heal,dead = [],[],[],[],[]
34 | for a,b,c,d,e in data[7:]: #很多卫健委网站前7天都是没有数据的,所以把前7天砍掉了
35 | day.append(a.strftime("%m-%d")) #a是datatime类型
36 | confirm.append(b)
37 | suspect.append(c)
38 | heal.append(d)
39 | dead.append(e)
40 | return jsonify({"day":day,"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead})
41 |
42 | @app.route("/l2")
43 | def get_l2_data():
44 | data = utils.get_l2_data()
45 | day, confirm_add, suspect_add = [], [], []
46 | for a, b, c in data[7:]:
47 | day.append(a.strftime("%m-%d")) # a是datatime类型
48 | confirm_add.append(b)
49 | suspect_add.append(c)
50 | return jsonify({"day": day, "confirm_add": confirm_add, "suspect_add": suspect_add})
51 |
52 |
53 | @app.route("/r1")
54 | def get_r1_data():
55 | data = utils.get_r1_data()
56 | city = []
57 | confirm = []
58 | for k,v in data:
59 | city.append(k)
60 | confirm.append(int(v))
61 | return jsonify({"city": city, "confirm": confirm})
62 |
63 |
64 | @app.route("/r2")
65 | def get_r2_data():
66 | data = utils.get_r2_data() #格式 (('民警抗疫一线奋战16天牺牲1037364',), ('四川再派两批医疗队1537382',)
67 | d = []
68 | for i in data:
69 | k = i[0].rstrip(string.digits) # 移除热搜数字
70 | v = i[0][len(k):] # 获取热搜数字
71 | ks = extract_tags(k) # 使用jieba 提取关键字
72 | for j in ks:
73 | if not j.isdigit():
74 | d.append({"name": j, "value": v})
75 | return jsonify({"kws": d})
76 |
77 |
78 |
79 |
80 |
81 | @app.route('/time')
82 | def gettime():
83 | return utils.get_time()
84 |
85 |
86 | @app.route('/tem')
87 | def hello_world3():
88 | return render_template("index.html")
89 |
90 | @app.route('/ajax', methods=["get","post"])
91 | def hello_world4():
92 | return '10000'
93 |
94 | if __name__ == '__main__':
95 | app.run()
96 |
--------------------------------------------------------------------------------
/COVID-19_Tracking/spider.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import json
3 | import time
4 | import pymysql
5 | from selenium.webdriver import Chrome,ChromeOptions
6 | import traceback
7 | import sys
8 |
9 | #返回历史数据和当日详细数据
10 | def get_tencent_data():
11 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
12 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other"
13 | headers = {
14 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
15 | }
16 | r1 = requests.get(url1, headers)
17 | r2 = requests.get(url2, headers)
18 |
19 | #json字符串转字典
20 | res1 = json.loads(r1.text)
21 | res2 = json.loads(r2.text)
22 |
23 | data_all1 = json.loads(res1["data"])
24 | data_all2 = json.loads(res2["data"])
25 |
26 | #历史数据
27 | history = {}
28 | for i in data_all2["chinaDayList"]:
29 | ds = "2020." + i["date"]
30 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
31 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
32 | confirm = i["confirm"]
33 | suspect = i["suspect"]
34 | heal = i["heal"]
35 | dead = i["dead"]
36 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead}
37 | for i in data_all2["chinaDayAddList"]:
38 | ds = "2020." + i["date"]
39 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
40 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
41 | confirm = i["confirm"]
42 | suspect = i["suspect"]
43 | heal = i["heal"]
44 | dead = i["dead"]
45 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead})
46 |
47 | #当日详细数据
48 | details = []
49 | update_time = data_all1["lastUpdateTime"]
50 | data_country = data_all1["areaTree"] #list 25个国家
51 | data_province = data_country[0]["children"] #中国各省
52 | for pro_infos in data_province:
53 | province = pro_infos["name"] #省名
54 | for city_infos in pro_infos["children"]:
55 | city = city_infos["name"]
56 | confirm = city_infos["total"]["confirm"]
57 | confirm_add = city_infos["today"]["confirm"]
58 | heal = city_infos["total"]["heal"]
59 | dead = city_infos["total"]["dead"]
60 | details.append([update_time, province, city, confirm, confirm_add, heal, dead])
61 | return history, details
62 |
63 |
64 | def get_conn():
65 | #建立连接
66 | conn = pymysql.connect(host="127.0.0.1", user="root", password="root", db="cov", charset="utf8")
67 | #创建游标
68 | cursor = conn.cursor()
69 | return conn,cursor
70 |
71 | def close_conn(conn,cursor):
72 | if cursor:
73 | cursor.close()
74 | if conn:
75 | conn.close()
76 |
77 | #插入details数据
78 | def update_details():
79 | cursor = None
80 | conn = None
81 | try:
82 | li = get_tencent_data()[1] #0是历史数据,1是当日详细数据
83 | conn,cursor = get_conn()
84 | sql = "insert into details(update_time,province,city,confirm,confirm_add,heal,dead) values(%s,%s,%s,%s,%s,%s,%s)"
85 | sql_query = "select %s=(select update_time from details order by id desc limit 1)" #对比当前最大时间戳
86 | #对比当前最大时间戳
87 | cursor.execute(sql_query,li[0][0])
88 | if not cursor.fetchone()[0]:
89 | print(f"{time.asctime()}开始更新数据")
90 | for item in li:
91 | cursor.execute(sql,item)
92 | conn.commit()
93 | print(f"{time.asctime()}更新到最新数据")
94 | else:
95 | print(f"{time.asctime()}已是最新数据!")
96 | except:
97 | traceback.print_exc()
98 | finally:
99 | close_conn(conn,cursor)
100 |
101 |
102 | #插入history数据
103 | def insert_history():
104 | cursor = None
105 | conn = None
106 | try:
107 | dic = get_tencent_data()[0]#0代表历史数据字典
108 | print(f"{time.asctime()}开始插入历史数据")
109 | conn,cursor = get_conn()
110 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)"
111 | for k,v in dic.items():
112 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"),
113 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"),
114 | v.get("dead"),v.get("dead_add")])
115 | conn.commit()
116 | print(f"{time.asctime()}插入历史数据完毕")
117 | except:
118 | traceback.print_exc()
119 | finally:
120 | close_conn(conn,cursor)
121 |
122 |
123 | #更新历史数据
124 | def update_history():
125 | cursor = None
126 | conn = None
127 | try:
128 | dic = get_tencent_data()[0]#0代表历史数据字典
129 | print(f"{time.asctime()}开始更新历史数据")
130 | conn,cursor = get_conn()
131 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)"
132 | sql_query = "select confirm from history where ds=%s"
133 | for k,v in dic.items():
134 | if not cursor.execute(sql_query,k):
135 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"),
136 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"),
137 | v.get("dead"),v.get("dead_add")])
138 | conn.commit()
139 | print(f"{time.asctime()}历史数据更新完毕")
140 | except:
141 | traceback.print_exc()
142 | finally:
143 | close_conn(conn,cursor)
144 |
145 |
146 | #返回百度疫情热搜
147 | def get_baidu_hot():
148 | option = ChromeOptions() #创建谷歌浏览器实例
149 | option.add_argument("--headless")#隐藏浏览器
150 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样
151 |
152 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1'
153 | brower = Chrome(options = option)
154 | brower.get(url)
155 | #找到展开按钮
156 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮
157 | but.click() #点击展开
158 |
159 | time.sleep(1)#爬虫与反爬,模拟人等待1秒
160 |
161 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]')
162 | context = [i.text for i in c] #获取标签内容
163 | print(context)
164 | return context
165 |
166 |
167 | #将疫情热搜插入数据库
168 | def update_hotsearch():
169 | cursor = None
170 | conn = None
171 | try:
172 | context = get_baidu_hot()
173 | print(f"{time.asctime()}开始更新热搜数据")
174 | conn, cursor = get_conn()
175 | sql = "insert into hotsearch(dt,content) values(%s,%s)"
176 | ts = time.strftime("%Y-%m-%d %X")
177 | for i in context:
178 | cursor.execute(sql,(ts,i)) #插入数据
179 | conn.commit() #提交事务保存数据
180 | print(f"{time.asctime()}数据更新完毕")
181 | except:
182 | traceback.print_exc()
183 | finally:
184 | close_conn(conn,cursor)
185 |
186 |
187 |
188 | # his,de = get_tencent_data()
189 | # print(his)
190 | # print(de)
191 | if __name__ == "__main__":
192 | l = len(sys.argv)
193 | if l == 1:
194 | s = """
195 | 请输入参数
196 | 参数说明,
197 | up_his 更新历史记录表
198 | up_hot 更新实时热搜
199 | up_det 更新详细表
200 | """
201 | print(s)
202 | else:
203 | order = sys.argv[1]
204 | if order == "up_his":
205 | update_history()
206 | elif order == "up_det":
207 | update_details()
208 | elif order == "up_hot":
209 | update_hotsearch()
--------------------------------------------------------------------------------
/COVID-19_Tracking/static/css/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | background: #333;
4 | }
5 |
6 | #title {
7 | position: absolute;
8 | width: 40%;
9 | height: 10%;
10 | top: 0;
11 | left: 30%;
12 | color: white;
13 | font-size: 40px;
14 |
15 | display: flex;
16 | align-items: center;
17 | justify-content: center;
18 | }
19 |
20 | #tim {
21 | position: absolute;
22 | /* width: 30%; */
23 | height: 10%;
24 | top: 5%;
25 | right: 2%;
26 | color: #FFFFFF;
27 | font-size: 20px;
28 | }
29 |
30 | #c1 {
31 | position: absolute;
32 | width: 40%;
33 | height: 30%;
34 | top: 10%;
35 | left: 30%;
36 | /* background: #777777; */
37 | }
38 |
39 | .num {
40 | width: 25%;
41 | float: left;
42 | display: flex;
43 | align-items: center;
44 | justify-content: center;
45 | color: gold;
46 | font-size: 20px;
47 | }
48 | .txt {
49 | width: 25%;
50 | float: left;
51 | font-family: "幼圆";
52 | display: flex;
53 | align-items: center;
54 | justify-content: center;
55 | font-size: 20px;
56 | color: white;
57 | }
58 |
59 | #c2 {
60 | position: absolute;
61 | width: 40%;
62 | height: 60%;
63 | top: 40%;
64 | left: 30%;
65 | background: #888888;
66 | }
67 |
68 | #l1 {
69 | position: absolute;
70 | width: 30%;
71 | height: 45%;
72 | top: 10%;
73 | left: 0%;
74 | background: #666666;
75 | }
76 |
77 | #l2 {
78 | position: absolute;
79 | width: 30%;
80 | height: 45%;
81 | top: 55%;
82 | left: 0%;
83 | background: #777777;
84 | }
85 |
86 | #r1 {
87 | position: absolute;
88 | width: 30%;
89 | height: 45%;
90 | top: 10%;
91 | right: 0%;
92 | background: #666666;
93 | }
94 |
95 | #r2 {
96 | position: absolute;
97 | width: 30%;
98 | height: 45%;
99 | top: 55%;
100 | right: 0%;
101 | background: #777777;
102 | }
103 |
--------------------------------------------------------------------------------
/COVID-19_Tracking/static/js/china.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Licensed to the Apache Software Foundation (ASF) under one
3 | * or more contributor license agreements. See the NOTICE file
4 | * distributed with this work for additional information
5 | * regarding copyright ownership. The ASF licenses this file
6 | * to you under the Apache License, Version 2.0 (the
7 | * "License"); you may not use this file except in compliance
8 | * with the License. You may obtain a copy of the License at
9 | *
10 | * http://www.apache.org/licenses/LICENSE-2.0
11 | *
12 | * Unless required by applicable law or agreed to in writing,
13 | * software distributed under the License is distributed on an
14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | * KIND, either express or implied. See the License for the
16 | * specific language governing permissions and limitations
17 | * under the License.
18 | */
19 |
20 | (function (root, factory) {
21 | if (typeof define === 'function' && define.amd) {
22 | // AMD. Register as an anonymous module.
23 | define(['exports', 'echarts'], factory);
24 | } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
25 | // CommonJS
26 | factory(exports, require('echarts'));
27 | } else {
28 | // Browser globals
29 | factory({}, root.echarts);
30 | }
31 | }(this, function (exports, echarts) {
32 | var log = function (msg) {
33 | if (typeof console !== 'undefined') {
34 | console && console.error && console.error(msg);
35 | }
36 | }
37 | if (!echarts) {
38 | log('ECharts is not Loaded');
39 | return;
40 | }
41 | if (!echarts.registerMap) {
42 | log('ECharts Map is not loaded')
43 | return;
44 | }
45 | echarts.registerMap('china', {"type":"FeatureCollection","features":[{"type":"Feature","id":"710000","properties":{"id":"710000","cp":[121.509062,24.044332],"name":"台湾","childNum":6},"geometry":{"type":"MultiPolygon","coordinates":[["@@°Ü¯Û"],["@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚänÜƤɊĂǀĆĴĤNJŨxĚĮǂƺòƌâÔ®ĮXŦţƸZûÐƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ¿@ăƑ¥ĘWǬÏĶŁâ"],["@@\\p|WoYG¿¥Ij@¢"],["@@
¡@V^RqBbAnTXeRz¤L«³I"],["@@ÆEEkWqë @"],["@@fced"],["@@¯ɜÄèaì¯ØǓIġĽ"],["@@çûĖëĄhòř "]],"encodeOffsets":[[[122886,24033]],[[123335,22980]],[[122375,24193]],[[122518,24117]],[[124427,22618]],[[124862,26043]],[[126259,26318]],[[127671,26683]]]}},{"type":"Feature","id":"130000","properties":{"id":"130000","cp":[114.502461,38.045474],"name":"河北","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@o~Z]ªrºc_ħ²G¼s`jΟnüsÂłNX_M`ǽÓnUK
Ĝēs¤©yrý§uģcJe"],["@@U`Ts¿mÂ"],["@@oºƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiñÖ`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒQgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäìë|³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧˏf°ÐTªqs{S¯r æÝlNd®²Ğ džiGĘJ¼lr}~K¨ŸƐÌWöÆzR¤lêmĞLÎ@¡|q]SvKÑcwpÏÏĿćènĪWlĄkT}J¤~ÈTdpddʾĬBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|ǰ
N«úmH¯âDùyŜŲIÄuШD¸dɂFOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu
{Z}Ö@U´
ʚLg®¯Oı°Ãw ^VbÉsmA
ê]]w§RRl£ȭµu¯b{ÍDěïÿȧuT£ġěŗƃĝQ¨fVƋƅna@³@ďyýIĹÊKŭfċŰóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏlTíb ØoÅbbx³^zÃͶSj®AyÂhðk`«P˵EFÛ¬Y¨Ļrõqi¼Wi°§Ð±´°^[À|ĠO@ÆxO\\ta\\tĕtû{ġȧXýĪÓjùÎRb^ÎfK[ÝděYfíÙTyuUSyŌŏů@Oi½éŅaVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MðoťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@c̬¢aĦtRıÒ¾ùƀ^juųœKUFyƝ
īÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥ÍpDž¡KąÅkĝęěhq}HyÃ]¹ǧ£
Í÷¿qáµ§g¤o^á¾ZE¤i`ij{nOl»WÝĔįhgF[¿¡ßkOüš_ūiDZàUtėGyl}ÓM}jpEC~¡FtoQiHkk{Ãmï"]],"encodeOffsets":[[[119712,40641]],[[121616,39981]],[[116462,37237]]]}},{"type":"Feature","id":"140000","properties":{"id":"140000","cp":[111.849248,36.857014],"name":"山西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ÞĩÒSra}ÁyWix±Üe´lèßÓǏokćiµVZģ¡coTS˹ĪmnÕńehZg{gtwªpXaĚThȑp{¶Eh®RćƑP¿£Pmc¸mQÝWďȥoÅîɡųAďä³aÏJ½¥PGąSM
EÅruµéYÓŌ_dĒCoȵ]¯_²ÕjāK~©ÅØ^ÔkïçămÏk]±cݯÑÃmQÍ~_apm
~ç¡qu{JÅŧ·Ls}EyÁÆcI{¤IiCfUcƌÃp§]ě«vD@¡SÀµMÅwuYY¡DbÑc¡h×]nkoQdaMç~eDÛtT©±@¥ù@É¡ZcW|WqOJmĩl«ħşvOÓ«IqăV¥D[mI~Ó¢cehiÍ]Ɠ~ĥqX·eƷn±}v[ěďŕ]_œ`¹§ÕōIo©bs^}Ét±ū«³p£ÿ·Wµ|¡¥ăFÏs×¥ŅxÊdÒ{ºvĴÎêÌɊ²¶ü¨|ÞƸµȲLLúÉƎ¤ϊęĔV`_bªS^|dzY|dz¥pZbÆ£¶ÒK}tĦÔņƠPYznÍvX¶Ěn ĠÔzý¦ª÷ÑĸÙUȌ¸dòÜJð´ìúNM¬XZ´¤ŊǸ_tldI{¦ƀðĠȤ¥NehXnYGR° ƬDj¬¸|CĞKqºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBÊTŸʂōĖĴŞȀÆÿȄlŤĒötνî¼ĨXh|ªM¤Ðz"],"encodeOffsets":[[116874,41716]]}},{"type":"Feature","id":"150000","properties":{"id":"150000","cp":[111.670801,41.818311],"name":"内蒙古","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@¯PqFB
|S³C|kñHdiÄ¥sʼnÅ
PóÑÑE^ÅPpy_YtShQ·aHwsOnʼnÃs©iqjUSiº]ïW«gW¡ARë¥_sgÁnUI«m
]jvV¼euhwqAaW_µj
»çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáGOUÛOB±XkŹ£k|e]olkVͼÕqtaÏõjgÁ£§U^RLËnX°ÇBz^~wfvypV ¯ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyxþp]ÉvïèvƀnÂĴÖ@V~Ĉv¦wĖtējyÄDXÄxGQuv_i¦aBçw˛wD©{tāmQ{EJ§KPśƘƿ¥@sCTÉ}ɃwƇy±gÑ}T[÷kÐ禫
SÒ¥¸ëBX½HáŵÀğtSÝÂa[ƣ°¯¦Pï¡]£ġÒk®G²èQ°óMq}EóƐÇ\\@áügQÍu¥FTÕ¿Jû]|mvāÎYua^WoÀa·ząÒot×¶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶¿A[¡{d×uQAMxVvMOmăl«ct[wº_ÇÊjb£ĦS_éQZ_lwgOiýe`YYLq§IÁdz£ÙË[ÕªuƏ³ÍTs·bÁĽäė[b[ŗfãcn¥îC¿÷µ[ŏÀQōĉm¿Á^£mJVmL[{Ï_£F¥Ö{ŹA}
×Wu©ÅaųijƳhB{·TQqÙIķËZđ©Yc|M¡
LeVUóK_QWk_ĥ¿ãZ»X\\ĴuUèlG®ěłTĠğDŃOrÍdÆÍz]±
ŭ©Å]ÅÐ}UË¥©TċïxgckfWgi\\ÏĒ¥HkµEë{»ÏetcG±ahUiñiWsɁ·cCÕk]wȑ|ća}w
VaĚá G°ùnM¬¯{ÈÐÆA¥ÄêJxÙ¢hP¢ÛºµwWOóFÁz^ÀŗÎú´§¢T¤ǻƺSėǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇqZñiñC³ª
»E`¨åXēÕqÉû[l}ç@čƘóO¿¡FUsAʽīccocÇS}£IS~ălkĩXçmĈ
ŀÐoÐdxÒuL^T{r@¢ÍĝKén£kQyÅõËXŷƏL§~}kq»IHėDžjĝ»ÑÞoå°qTt|r©ÏS¯·eŨĕx«È[eM¿yupN~¹ÏyN£{©għWí»Í¾səšDž_ÃĀɗ±ąijĉʍŌŷSÉA±åǥɋ@ë£R©ąP©}ĹªƏj¹erLDĝ·{i«ƫC£µsKC
GS|úþXgp{ÁX¿ć{ƱȏñZáĔyoÁhA}ŅĆfdʼn_¹Y°ėǩÑ¡H¯¶oMQqð¡Ë|Ñ`ƭŁX½·óÛxğįÅcQs«tȋDžFù^it«Č¯[hAi©á¥ÇĚ×l|¹y¯YȵƓñǙµïċĻ|Düȭ¶¡oŽäÕG\\ÄT¿Òõr¯LguÏYęRƩɷŌO\\İТæ^Ŋ IJȶȆbÜGĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľ]ėl¥ËĭûÁėéV©±ćn©ȇÍq¯½YÃÔʼnÉNÑÅÝy¹NqáʅDǡËñƁYÅy̱os§ȋµʽǘǏƬɱàưN¢ƔÊuľýľώȪƺɂļxZĈ}ÌʼnŪĺœĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~ǼȳÐUfdIxÿ\\G zâɏÙOº·pqy£@qþ@Ǟ˽IBäƣzsÂZÁàĻdñ°ŕzéØűzșCìDȐĴĺf®Àľưø@ɜÖÞKĊŇƄ§͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘNJ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKdzͲOðÏȆƘ¼CϚǚ࢚˼ФÔ¤ƌĞ̪Qʤ´¼mȠJˀƲÀɠmǐnǔĎȆÞǠN~ʢĜ¶ƌĆĘźʆȬ˪ĚǏĞGȖƴƀj`ĢçĶāàŃºēĢĖćYÀŎüôQÐÂŎŞdžŞêƖoˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^ªƂ`ªt¾äƚêĦ¼ÐĔǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDÄ|ø˂˜ƮЬɚwɲFjĔ²Äw°dždÀÉ_ĸdîàŎjÊêTЪŌŜWÈ|tqĢUB~´°ÎFCU¼pĀēƄN¦¾O¶łKĊOjĚj´ĜYp{¦SĚÍ\\TתV÷Ší¨ÅDK°ßtŇĔK¨ǵÂcḷ̌ĚǣȄĽFlġUĵŇȣFʉɁMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFxúQEr´Wrh¤Ɛ \\talĈDJÜ|[Pll̚¸ƎGú´P¬W¦^¦H]prRn|or¾wLVnÇIujkmon£cX^Bh`¥V¦U¤¸}xRj[^xN[~ªxQ[`ªHÆÂExx^wN¶Ê|¨ìMrdYpoRzNyÀDs~bcfÌ`L¾n|¾T°c¨È¢ar¤`[|òDŞĔöxElÖdHÀI`Ď\\Àì~ÆR¼tf¦^¢ķ¶eÐÚMptgjɡČÅyġLûŇV®ÄÈƀϰP|ªVVªj¬ĚÒêp¬E|ŬÂc|ÀtƐK f{ĘFĒƌXƲąo½Ę\\¥o}Ûu£çkX{uĩ«āíÓUŅßŢqŤ¥lyň[oi{¦LńðFȪȖĒL¿Ìf£K£ʺoqNwğc`uetOj×°KJ±qÆġmĚŗos¬
qehqsuH{¸kH¡
ÊRǪÇƌbȆ¢´äÜ¢NìÉʖ¦â©Ġu¦öČ^â£ĂhĖMÈÄw\\fŦ°W ¢¾luŸDw\\̀ʉÌÛM
Ā[bÓEn}¶Vc
ês"]],"encodeOffsets":[[[129102,52189]]]}},{"type":"Feature","id":"210000","properties":{"id":"210000","cp":[123.429096,41.796767],"name":"辽宁","childNum":16},"geometry":{"type":"MultiPolygon","coordinates":[["@@L@@sa"],["@@MnNm"],["@@dc"],["@@eÀC@b"],["@@f
XwkbrÄ`qg"],["@@^jtWQ"],["@@~ Y]c"],["@@G`ĔN^_¿ZÃM"],["@@iX¶BY"],["@@YZ"],["@@L_{Epf"],["@@^WqCT\\"],["@@\\[§t|¤_"],["@@m`n_"],["@@Ïxnj{q_×^Giip"],["@@@é^BntaÊU]x ¯ÄPIJ°hʙK³VÕ@Y~|EvĹsǦL^pòŸÒG Ël]xxÄ_fT¤Ď¤cPC¨¸TVjbgH²sdÎdHt`B²¬GJję¶[ÐhjeXdlwhðSȦªVÊÏÆZÆŶ®²^ÎyÅÎcPqńĚDMħĜŁHkçvV[ij¼WYÀäĦ`XlR`ôLUVfK¢{NZdĒªYĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~źB|¦ÕE¤Ð`\\|KUnnI]¤ÀÂĊnŎR®Ő¿¶\\ÀøíDm¦ÎbŨabaĘ\\ľã¸atÎSƐ´©v\\ÖÚÌǴ¤Â¨JKrZ_ZfjþhPkx`YRIjJcVf~sCN¤ EhæmsHy¨SðÑÌ\\\\ĐRZk°IS§fqŒßýáĞÙÉÖ[^¯ǤŲê´\\¦¬ĆPM¯£»uïpùzExanµyoluqe¦W^£ÊL}ñrkqWňûPUP¡ôJoo·U}£[·¨@XĸDXmÛݺGUCÁª½{íĂ^cjk¶Ã[q¤LÉö³cux«zZf²BWÇ®Yß½ve±ÃCý£W{Ú^q^sÑ·¨ÍOt¹·C¥GDrí@wÕKţëV·i}xËÍ÷i©ĝɝǡ]{c±OW³Ya±_ç©HĕoƫŇqr³Lys[ñ³¯OSďOMisZ±ÅFC¥Pq{Ã[Pg}\\¿ghćO
k^ģÁFıĉĥMoEqqZûěʼn³F¦oĵhÕP{¯~TÍlªNßYÐ{Ps{ÃVUeĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀffdF~ĀeĖd`sx² ®EżĀdQÂd^~ăÔH¦\\LKpĄVez¤NP ǹÓRÆąJSha[¦´ÂghwmBШźhI|VV|p] ¼èNä¶ÜBÖ¼L`¼bØæKVpoúNZÞÒKxpw|ÊEMnzEQIZZNBčÚFÜçmĩWĪñtÞĵÇñZ«uD±|Əlij¥ãn·±PmÍada CLǑkùó¡³Ï«QaċÏOÃ¥ÕđQȥċƭy³ÃA"]],"encodeOffsets":[[[123686,41445]],[[126019,40435]],[[124393,40128]],[[126117,39963]],[[125322,40140]],[[126686,40700]],[[126041,40374]],[[125584,40168]],[[125453,40165]],[[125362,40214]],[[125280,40291]],[[125774,39997]],[[125976,40496]],[[125822,39993]],[[125509,40217]],[[122731,40949]]]}},{"type":"Feature","id":"220000","properties":{"id":"220000","cp":[125.3245,43.886841],"name":"吉林","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@pä³PClFbbÍzwBGĭZÅi»lYċ²SgkÇ£^Sqd¯R
©é£¯S\\cZ¹iűƏCuƍÓXoR}M^o£
R}oªUF
uuXHlEÅÏ©¤ÛmTþ¤D²ÄufàÀXXȱAeyYw¬dvõ´KÊ£\\rµÄlidā]|DÂVH¹Þ®ÜWnCķ W§@\\¸~¤Vp¸póIO¢VOŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúv𼤠N°ąO¥«³[éǡű_°Õ\\ÚÊĝþâőàerR¨JYlďQ[ ÏYëЧTGztnß¡gFkMāGÁ¤ia Éȹ`\\xs¬dĆkNnuNUuP@vRY¾\\¢
GªóĄ~RãÖÎĢùđŴÕhQxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp]vbÍZuĂ{n^IüÀSÖ¦EvRÎûh@â[ƏÈô~FNr¯ôçR±HÑlĢ^¤¢OðævxsŒ]ÞÁTĠs¶¿âÆGW¾ìA¦·TѬè¥ÏÐJ¨¼ÒÖ¼ƦɄxÊ~StD@Ă¼Ŵ¡jlºWvÐzƦZвCH AxiukdGgetqmcÛ£Ozy¥cE}|
¾cZ
k¿uŐã[oxGikfeäT@
SUwpiÚFM©£è^Ú`@v¶eňf heP¶täOlÃUgÞzŸU`l}ÔÆUvØ_Ō¬Öi^ĉi§²ÃB~¡ĈÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYxƘDVÇĺĿg¿cwÅ\\¹¥Yĭl¤OvLjM_a W`zļMž·\\swqÝSAqŚij¯°kRē°wx^ĐkǂÒ\\]nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°G³¼XÀ¤¹i´o¤ŃÈ`ÌDzÄUĞd\\iÖmÈBĤÜɲDEh LG¾ƀľ{WaYÍÈĢĘÔRîĐj}ÇccjoUb½{h§Ǿ{KƖµÎ÷GĀÖŠåưÎslyiē«`å§H¥Ae^§GK}iã\\c]v©ģZmÃ|[M}ģTɟĵÂÂ`ÀçmFK¥ÚíÁbX³ÌQÒHof{]ept·GŋĜYünĎųVY^ydõkÅZW«WUa~U·SbwGçǑiW^qFuNĝ·EwUtW·Ýďæ©PuqEzwAVXRãQ`©GMehccďÏd©ÑW_ÏYƅ»
é\\ɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ýL¡ýqT^rme\\PpZZbyuybQefµ]UhĿDCmûvaÙNSkCwncćfv~
YÇG"],"encodeOffsets":[[130196,42528]]}},{"type":"Feature","id":"230000","properties":{"id":"230000","cp":[128.642464,46.756967],"name":"黑龙江","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@UµNÿ¥īèçHÍøƕ¶Lǽ|g¨|a¾pVidd~ÈiíďÓQġėÇZÎXb½|ſÃH½KFgɱCģÛÇAnjÕc[VĝDZÃËÇ_ £ń³pj£º¿»WH´¯U¸đĢmtĜyzzNN|g¸÷äűѱĉā~mq^[ǁÑďlw]¯xQĔ¯l°řĴrBÞTxr[tޏĻN_yX`biNKu
P£kZĮ¦[ºxÆÀdhĹŀUÈƗCwáZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFć}¢A±Äj¨]ĊÕjŋ«×`VuÓÅ~_kŷVÝyhVkÄãPsOµfgeŇ
µf@u_Ù ÙcªNªÙEojVxT@ãSefjlwH\\pŏäÀvlY½d{F~¦dyz¤PÜndsrhfHcvlwjF£G±DÏƥYyÏu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|C˜zxAè¥bfudTrFWÁ¹Am|ĔĕsķÆF´N}ć
UÕ@Áijſmuçuð^ÊýowFzØÎĕNőǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°Uzouxe]}
AyÈW¯ÌmKQ]Īºif¸ÄX|sZt|½ÚUÎ lk^p{f¤lºlÆW A²PVÜPHÊâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi`¶bXrBgxfv»uUi^v~J¬mVp´£´VWrnP½ì¢BX¬hðX¹^TjVriªjtŊÄmtPGx¸bgRsT`ZozÆO]ÒFôÒOÆŊvÅpcGêsx´DR{AEOr°x|íb³Wm~DVjºéNNËܲɶGxŷCSt}]ûōSmtuÇÃĕNāg»íT«u}ç½BĵÞʣ¥ëÊ¡MÛ³ãȅ¡ƋaǩÈÉQG¢·lG|tvgrrf«ptęŘnÅĢrI²¯LiØsPf_vĠdxM prʹL¤¤eËÀđKïÙVY§]Ióáĥ]ķK¥j|pŇ\\kzţ¦šnņäÔVĂîά|vW®l¤èØrxm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄĄ»ƢjȦOǺ¨ìSŖÆƬyQv`cwZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨSfm ĊƀP̎ēz©ĊÄÕÊmgÇsJ¥ƔŊśæÎÑqv¿íUOµªÂnĦÁ_½ä@êí
£P}Ġ[@gġ}gɊ×ûÏWXá¢užƻÌsNͽƎÁ§čŐAēeL³àydl¦ĘVçŁpśdžĽĺſÊQíÜçÛġÔsĕ¬Ǹ¯YßċġHµ ¡eå`ļrĉŘóƢFìĎWøxÊkƈdƬv|I|·©NqńRŀ¤éeŊŀàŀU²ŕƀBQ£Ď}L¹Îk@©ĈuǰųǨÚ§ƈnTËÇéƟÊcfčŤ^XmHĊĕË«W·ċëx³ǔķÐċJāwİ_ĸȀ^ôWr°oú¬Ħ
ŨK~ȰCĐ´Ƕ£fNÎèâw¢XnŮeÂÆĶ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®ØCÔ ŬGƠƦYĜĘÜƬDJg_ͥœ@čŅĻA¶¯@wÎqC½Ĉ»NăëKďÍQÙƫ[«ÃígßÔÇOÝáWñuZ¯ĥŕā¡ÑķJu¤E 寰WKɱ_d_}}vyõu¬ï¹ÓU±½@gÏ¿rýDg
Cdµ°MFYxw¿CG£Rƛ½Õ{]L§{qqą¿BÇƻğëܭNJË|c²}Fµ}ÙRsÓpg±QNqǫŋRwŕnéÑÉK«SeYR
ŋ@{¤SJ}D Ûǖ֍]gr¡µŷjqWÛham³~S«Þ]"]],"encodeOffsets":[[[134456,44547]]]}},{"type":"Feature","id":"320000","properties":{"id":"320000","cp":[119.767413,33.041544],"name":"江苏","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@cþÅPi`ZRu¥É\\]~°Y`µÓ^phÁbnÀşúòaĬºTÖŒbe¦¦{¸ZâćNp©Hr|^mjhSEb\\afv`sz^lkljÄtg¤D¾X¿À|ĐiZȀåB·î}GL¢õcßjayBFµÏC^ĭcÙt¿sğH]j{s©HM¢QnDÀ©DaÜÞ·jgàiDbPufjDk`dPOîhw¡ĥ¥GP²ĐobºrYî¶aHŢ´ ]´rılw³r_{£DB_Ûdåuk|Ũ¯F Cºyr{XFye³Þċ¿ÂkĭB¿MvÛpm`rÚã@ƹhågËÖƿxnlč¶Åì½Ot¾dJlVJĂǀŞqvnO^JZż·Q}êÍÅmµÒ]ƍ¦Dq}¬R^èĂ´ŀĻĊIÔtIJyQŐĠMNtR®òLhĚs©»}OÓGZz¶A\\jĨFäOĤHYJvÞHNiÜaĎÉnFQlNM¤B´ĄNöɂtpŬdfå
qm¿QûùŞÚb¤uŃJŴu»¹ĄlȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Yxcitğ®jű¢KOķCoy`å®VTa_Ā]ŐÝɞï²ʯÊ^]afYǸÃĆēĪȣJđ͍ôƋÄÄÍīçÛɈǥ£ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ¡RLčiXyÅNïă¡¸iĔÏNÌŕoēdōîåŤûHcs}~Ûwbù¹£¦ÓCtOPrE^ÒogĉIµÛÅʹK
¤½phMü`oæŀ"],"encodeOffsets":[[121740,32276]]}},{"type":"Feature","id":"330000","properties":{"id":"330000","cp":[120.153576,29.287459],"name":"浙江","childNum":45},"geometry":{"type":"MultiPolygon","coordinates":[["@@E^dQ]K"],["@@jX^j"],["@@sfbU"],["@@qP\\xz[ck"],["@@R¢FX}°[s_"],["@@Cb\\}"],["@@e|v\\la{u"],["@@v~u}"],["@@QxÂF¯}"],["@@¹nvÞs¯o"],["@@rSkUEj"],["@@biZP"],["@@p[}INf"],["@@À¿"],["@@¹dnb
"],["@@rSBnR"],["@@g~h}"],["@@FlEk"],["@@OdPc"],["@@v[u\\"],["@@FjâL~wyoo~sµL\\"],["@@¬e¹aN"],["@@\\nÔ¡q]L³ë\\ÿ®QÖ"],["@@ÊA©[¬"],["@@Kxv"],["@@@hlIk]"],["@@pW{o||j"],["@@Md|_mC"],["@@¢
X£ÏylD¼XtH"],["@@hlÜ[LykAvyfw^E¤"],["@@fp¤MusR"],["@@®_ma~LÁ¬Z"],["@@iMxZ"],["@@ZcYd"],["@@Z~dOSo|A¿qZv"],["@@@`EN¡v"],["@@|TY{"],["@@@n@m"],["@@XWkCT\\"],["@@ºwZRkĕWO¢"],["@@X®±Grƪ\\ÔáXq{"],["@@ůTG°ĄLHm°UC"],["@@¤aÜx~}dtüGæţŎíĔcŖpMËÐj碷ðĄÆMzjWKĎ¢Q¶À_ê_Bıi«pZgf¤Nrq]§ĂN®«H±yƳí¾×ŸīàLłčŴǝĂíÀBŖÕªÁŖHŗʼnåqûõi¨hÜ·ñt»¹ýv_[«¸mYL¯Qª
mĉÅdMgÇjcº«ę¬K´B«Âącoċ\\xKd¡gěŧ«®á[~ıxu·ÅKsËÉc¢Ù\\ĭƛëbf¹ģSĜkáƉÔĈZB{aMµfzʼnfåÂŧįƋǝÊĕġć£g³neą»@¦S®\\ßðChiqªĭiAuAµ_W¥ƣO\\lċĢttC¨£t`PZäuXßBsĻyekOđġĵHuXBµ]×\\°®¬F¢¾pµ¼kŘó¬Wät¸|@L¨¸µrºù³Ù~§WIZW®±Ð¨ÒÉx`²pĜrOògtÁZ}þÙ]¡FKwsPlU[}¦Rvn`hq¬\\nQ´ĘRWb_ rtČFIÖkĦPJ¶ÖÀÖJĈĄTĚòC ²@Pú
Øz©PCÈÚDZhŖl¬â~nm¨f©iļ«mntuÖZÜÄjL®EÌFª²iÊxبIÈhhst"],["@@o\\VzRZ}y"],["@@@°¡mÛGĕ¨§Ianá[ýƤjfæØLäGr"]],"encodeOffsets":[[[125592,31553]],[[125785,31436]],[[125729,31431]],[[125513,31380]],[[125223,30438]],[[125115,30114]],[[124815,29155]],[[124419,28746]],[[124095,28635]],[[124005,28609]],[[125000,30713]],[[125111,30698]],[[125078,30682]],[[125150,30684]],[[124014,28103]],[[125008,31331]],[[125411,31468]],[[125329,31479]],[[125626,30916]],[[125417,30956]],[[125254,30976]],[[125199,30997]],[[125095,31058]],[[125083,30915]],[[124885,31015]],[[125218,30798]],[[124867,30838]],[[124755,30788]],[[124802,30809]],[[125267,30657]],[[125218,30578]],[[125200,30562]],[[124968,30474]],[[125167,30396]],[[124955,29879]],[[124714,29781]],[[124762,29462]],[[124325,28754]],[[123990,28459]],[[125366,31477]],[[125115,30363]],[[125369,31139]],[[122495,31878]],[[125329,30690]],[[125192,30787]]]}},{"type":"Feature","id":"340000","properties":{"id":"340000","cp":[117.283042,31.26119],"name":"安徽","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@^iuLX^"],["@@e©Ehl"],["@@°ZÆëϵmkǀwÌÕæhºgBĝâqÙĊzÖgņtÀÁĂÆáhEz|WzqD¹°Eŧl{ævÜcA`¤C`|´qxIJkq^³³GšµbíZ
¹qpa±ď OH¦Ħx¢gPícOl_iCveaOjCh߸iÝbÛªCC¿mRV§¢A|t^iĠGÀtÚsd]ĮÐDE¶zAb àiödK¡~H¸íæAǿYj{ď¿À½W®£ChÃsikkly]_teu[bFaTign{]GqªoĈMYá|·¥f¥őaSÕėNµñĞ«Im_m¿Âa]uĜp
Z_§{Cäg¤°r[_YjÆOdý[I[á·¥Q_nùgL¾mvˊBÜÆ¶ĊJhpc¹O]iŠ]¥ jtsggJǧw×jÉ©±EFËKiÛÃÕYv
sm¬njĻª§emná}k«ŕgđ²ÙDÇ¤í¡ªOy×Où±@DñSęćăÕIÕ¿IµĥOjNÕËT¡¿tNæŇàåyķrĕq§ÄĩsWÆßF¶X®¿mw
RIÞfßoG³¾©uyHį{Ɓħ¯AFnuP
ÍÔzVdàôº^Ðæd´oG¤{S¬ćxã}ŧ×Kǥĩ«ÕOEзÖdÖsƘѨ[Û^Xr¢¼§xvÄÆµ`K§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē
ßúLÃÃ_ÈÏ|]ÂÏFlg`ben¾¢pUh~ƴ˶_r sĄ~cƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³
]u}f
ïQl{skloNdjäËzDvčoQďHI¦rbtHĔ~BmlRV_ħTLnñH±DL¼Lªl§Ťa¸ĚlK²\\RòvDcÎJbt[¤D@®hh~kt°ǾzÖ@¾ªdbYhüóZ ň¶vHrľ\\ÊJuxAT|dmÀO[ÃÔG·ĚąĐlŪÚpSJ¨ĸLvÞcPæķŨ®mÐálwKhïgA¢ųƩޤOÈm°K´"]],"encodeOffsets":[[[121722,32278]],[[119475,30423]],[[119168,35472]]]}},{"type":"Feature","id":"350000","properties":{"id":"350000","cp":[118.306239,26.075302],"name":"福建","childNum":18},"geometry":{"type":"MultiPolygon","coordinates":[["@@zht´]"],["@@aj^~ĆG©O"],["@@ed¨C}}i"],["@@@vPGsQ"],["@@sBzddW]Q"],["@@S¨Q{"],["@@NVucW"],["@@qptBAq"],["@@¸[mu"],["@@Q\\pD]_"],["@@jSwUadpF"],["@@eXª~"],["@@AjvFso"],["@@fT_Çí\\v|ba¦jZÆy°"],["@@IjJi"],["@@wJIx«¼AoNe{M"],["@@K±¡ÓČäeZ"],["@@k¡¹Eh~c®wBkUplÀ¡I~Māe£bN¨gZý¡a±Öcp©PhI¢Qq
ÇGj|¥U g[Ky¬ŏv@OptÉEF\\@ åA¬V{XģĐBy
cpě
¼³Ăp·¤¥ohqqÚ¡ŅLs^á§qlÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ßėuĕeûÒiÁŧSW¥Qûŗ½ùěcݧSùĩąSWó«íęACµeRåǃRCÒÇZÍ¢ź±^dlstjD¸ZpuÔâÃH¾oLUêÃÔjjēò´ĄWƛ
^Ñ¥Ħ@ÇòmOw¡õyJyD}¢ďÑÈġfZda©º²z£NjD°Ötj¶¬ZSÎ~¾c°¶ÐmxO¸¢Pl´SL|¥AȪĖMņIJg®áIJČĒü` QF¬h|ĂJ@zµ |ê³È ¸UÖŬŬÀEttĸr]ðM¤ĶIJHtÏ AĬkvsq^aÎbvdfÊòSD´Z^xPsĂrvƞŀjJd×ŘÉ ®AΦĤdxĆqAZRÀMźnĊ»İÐZ YXæJyĊ²·¶q§·K@·{sXãô«lŗ¶»o½E¡«¢±¨Y®Ø¶^AvWĶGĒĢPlzfļtàAvWYãO_¤sD§ssČġ[kƤPX¦`¶®BBvĪjv©jx[L¥àï[F
¼ÍË»ğV`«Ip}ccÅĥZEãoP
´B@D¸m±z«Ƴ¿å³BRضWlâþäą`]Z£Tc ĹGµ¶Hm@_©k¾xĨôȉðX«½đCIbćqK³ÁÄš¬OAwã»aLʼnËĥW[ÂGIÂNxij¤D¢îĎÎB§°_JGs¥E@
¤uć
PåcuMuw¢BI¿]zG¹guĮck\\_"]],"encodeOffsets":[[[123250,27563]],[[122541,27268]],[[123020,27189]],[[122916,27125]],[[122887,26845]],[[122808,26762]],[[122568,25912]],[[122778,26197]],[[122515,26757]],[[122816,26587]],[[123388,27005]],[[122450,26243]],[[122578,25962]],[[121255,25103]],[[120987,24903]],[[122339,25802]],[[121042,25093]],[[122439,26024]]]}},{"type":"Feature","id":"360000","properties":{"id":"360000","cp":[115.592151,27.676493],"name":"江西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ĢĨƐgļ¼ÂMD~ņªe^\\^§ý©j×cZبzdÒa¶lÒJìõ`oz÷@¤u޸´ôęöY¼HČƶajlÞƩ¥éZ[|h}^U ¥pĄžƦO lt¸Æ Q\\aÆ|CnÂOjtĚĤdÈF`¶@Ðë ¦ōÒ¨SêvHĢûXD®
QgÄWiØPÞìºr¤džNĠ¢lĄtZoCƞÔºCxrpĠV®Ê{f_Y`_eq®Aot`@oDXfkp¨|s¬\\DÄSfè©Hn¬
^DhÆyøJhØxĢĀLÊƠPżċĄwȠ̦G®ǒĤäTŠÆ~Ħw«|TF¡nc³Ïå¹]ĉđxe{ÎÓvOEm°BƂĨİ|Gvz½ª´HàpeJÝQxnÀWEµàXÅĪt¨ÃĖrÄwÀFÎ|ňÓMå¼ibµ¯»åDT±m[r«_gmQu~¥V\\OkxtL E¢Ú^~ýêPóqoě±_Êw§ÑªåƗā¼mĉŹ¿NQ
YBąrwģcÍ¥BŗÊcØiIƝĿuqtāwO]³YCñTeÉcaubÍ]trluī
BÐGsĵıN£ï^ķqss¿FūūVÕ·´Ç{éĈýÿOER_đûIċâJhŅıNȩĕB
¦K{Tk³¡OP·wnµÏd¯}½TÍ«YiµÕsC¯iM¤¦¯P|ÿUHvhe¥oFTuõ\\OSsMòđƇiaºćXĊĵà·çhƃ÷Ç{ígu^đgm[×zkKN¶Õ»lčÓ{XSÆv©_ÈëJbVkĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B±ÌKyáV¼Ã~
`gsÙfIƋlę¹e|~udjuTlXµf`¿Jd[\\L²"],"encodeOffsets":[[116689,26234]]}},{"type":"Feature","id":"370000","properties":{"id":"370000","cp":[118.000923,36.275807],"name":"山东","childNum":13},"geometry":{"type":"MultiPolygon","coordinates":[["@@Xjd]{K"],["@@itbFHy"],["@@HlGk"],["@@TGy"],["@@K¬U"],["@@WdXc"],["@@PtOs"],["@@LnXhc"],["@@ppVu]Or"],["@@cdzAUa"],["@@udRhnCI"],["@@oIpR"],["@@Ľč{fzƤîKÎMĮ]ZF½Y]â£ph¶¨râøÀÎǨ¤^ºÄGz~grĚĜlĞÆLĆdž¢Îo¦cvKbgr°WhmZp L]LºcUÆnżĤÌĒbAnrOA´ȊcÀbƦUØrĆUÜøĬƞEzVL®öØBkŖÝĐ˹ŧ̄±ÀbÎÉnb²ĦhņBĖįĦåXćì@L¯´ywƕCéõė ƿ¸lµ¾Z|ZWyFY¨Mf~C¿`à_RÇzwƌfQnny´INoƬèôº|sTJULîVjǎ¾ĒØDz²XPn±ŴPè¸ŔLƔÜƺ_TüÃĤBBċÈöA´faM¨{«M`¶d¡ôÖ°mȰBÔjj´PM|c^d¤u¤Û´ä«ƢfPk¶Môl]Lb}su^ke{lC
MrDÇ]NÑFsmoõľHyGă{{çrnÓEƕZGª¹Fj¢ïW
uøCǷë¡ąuhÛ¡^KxC`C\\bÅxì²ĝÝ¿_NīCȽĿåB¥¢·IŖÕy\\¹kxãČ×GDyäÁçFQ¡KtŵƋ]CgÏAùSedcÚźuYfyMmhUWpSyGwMPqŀÁ¼zK¶GY§Ë@´śÇµƕBm@IogZ¯uTMx}CVKï{éƵP_K«pÛÙqċtkkù]gTğwoɁsMõ³ăAN£MRkmEÊčÛbMjÝGu
IZGPģãħE[iµBEuDPÔ~ª¼ęt]ûG§¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~ݏYI] PumŝrƿIā[xedzL¯v¯s¬ÁY
~}
ťuŁgƋpÝĄ_ņī¶ÏSR´ÁP~¿Cyċßdwk´SsX|t`Ä ÈðAªìÎT°¦Dda^lĎDĶÚY°`ĪŴǒàŠv\\ebZHŖR¬ŢƱùęOÑM³FÛWp["]],"encodeOffsets":[[[123806,39303]],[[123821,39266]],[[123742,39256]],[[123702,39203]],[[123649,39066]],[[123847,38933]],[[123580,38839]],[[123894,37288]],[[123043,36624]],[[123344,38676]],[[123522,38857]],[[123628,38858]],[[118260,36742]]]}},{"type":"Feature","id":"410000","properties":{"id":"410000","cp":[113.665412,33.757975],"name":"河南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ýLùµP³swIÓxcŢĞð´E®ÚPtĴXØx¶@«ŕŕQGYfa[şußǩđš_X³ijÕčC]kbc¥CS¯ëÍB©÷³Si_}mYTt³xlàcČzÀD}ÂOQ³ÐTĨ¯ƗòËŖ[hłŦv~}ÂZ«¤lPÇ£ªÝŴÅR§ØnhctâknÏľŹUÓÝdKuķI§oTũÙďkęĆH¸Ó\\Ä¿PcnS{wBIvÉĽ[GqµuŇôYgûZca©@½Õǽys¯}lgg@C\\£asIdÍuCQñ[L±ęk·ţb¨©kK»KC²òGKmĨS`UQnk}AGēsqaJ¥ĐGRĎpCuÌy ã iMcplk|tRkðev~^´¦ÜSí¿_iyjI|ȑ|¿_»d}q^{Ƈdă}tqµ`Ƴĕg}V¡om½faÇo³TTj¥tĠRyK{ùÓjuµ{t}uËRivGçJFjµÍyqÎàQÂFewixGw½Yŷpµú³XU½ġyłåkÚwZX·l¢Á¢KzOÎÎjc¼htoDHr
|J½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ
Ť]MÛfaQpě±ǽ¾]uFu÷nčįADp}AjmcEÇaª³o³ÆÍSƇĈÙDIzËčľ^KLiÞñ[aA²zzÌ÷D|[íijgfÕÞd®|`Ć~oĠƑô³ŊD×°¯CsøÀ«ìUMhTº¨¸ǡîSÔDruÂÇZÖEvPZW~ØÐtĄE¢¦Ðy¸bô´oŬ¬²Ês~]®tªapŎJ¨Öº_Ŕ`Ŗ^Đ\\Ĝu~m²Ƹ¸fWĦrƔ}Î^gjdfÔ¡J}\\n C¦þWxªJRÔŠu¬ĨĨmFdM{\\d\\YÊ¢ú@@¦ª²SÜsC}fNècbpRmlØ^gd¢aÒ¢CZZxvƶN¿¢T@uC¬^ĊðÄn|lGlRjsp¢ED}Fio~ÔN~zkĘHVsDzßjŬŢ`Pûàl¢\\ÀEhİgÞē X¼Pk|m"],"encodeOffsets":[[118256,37017]]}},{"type":"Feature","id":"420000","properties":{"id":"420000","cp":[113.298572,30.684355],"name":"湖北","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@AB"],["@@lskt"],["@@¾«}{ra®pîÃ\\{øCËyyB±b\\òÝjKL ]ĎĽÌJyÚCƈćÎT´Å´pb©ÈdFin~BCo°BĎÃømv®E^vǾ½Ĝ²RobÜeN^ĺ£R¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I¾®I{GqpCgyl{£ÍÍyPL¡¡¸kWxYlÙæŁĢz¾V´W¶ùŸo¾ZHxjwfxGNÁ³Xéæl¶EièIH ujÌQ~v|sv¶Ôi|ú¢FhQsğ¦SiŠBgÐE^ÁÐ{čnOÂÈUÎóĔÊēIJ}Z³½Mŧïeyp·uk³DsѨL¶_Åuèw»¡WqÜ]\\Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟOKÉġÿ×wg÷IÅzCg]m«ªGeçÃTC«[t§{loWeC@ps_Bprf_``Z|ei¡oċMqow¹DƝÓDYpûsYkıǃ}s¥ç³[§cY§HK«Qy]¢wwö¸ïx¼ņ¾Xv®ÇÀµRĠÐHM±cÏdƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy
¿³x¯No|¹HÏÛmjúË~TuęjCöAwě¬Rđl¯ ÑbŇTĿ_[IčĄʿnM¦ğ\\É[T·k¹©oĕ@A¾wya¥Y\\¥Âaz¯ãÁ¡k¥ne£ÛwE©Êō¶˓uoj_U¡cF¹[WvP©whuÕyBF`RqJUw\\i¡{jEPïÿ½fć
QÑÀQ{°fLÔ~wXgītêݾĺHd³fJd]HJ²
EoU¥HhwQsƐ»Xmg±çve]DmÍPoCc¾_hhøYrŊU¶eD°Č_N~øĹĚ·`z]Äþp¼
äÌQv\\rCé¾TnkžŐÚÜa¼ÝƆ̶Ûo
d
ĔňТJqPb ¾|J¾fXƐîĨ_Z¯À}úƲN_ĒÄ^ĈaŐyp»CÇÄKñL³ġM²wrIÒŭxjb[n«øæà ^²h¯ÚŐªÞ¸Y²ĒVø}Ā^İ´LÚm¥ÀJÞ{JVųÞŃx×sxxƈē ģMřÚðòIfĊŒ\\Ʈ±ŒdʧĘDvČ_Àæ~Dċ´A®µ¨ØLV¦êHÒ¤"]],"encodeOffsets":[[[113712,34000]],[[115612,30507]],[[113649,34054]]]}},{"type":"Feature","id":"430000","properties":{"id":"430000","cp":[111.782279,28.09409],"name":"湖南","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@nFTs"],["@@ßÅÆá½ÔXrCO
ËRïÿĩTooQyÓ[ŅBE¬ÎÓXaį§Ã¸G °ITxpúxÚij¥Ï̾edÄ©ĸG
àGhM¤Â_U}Ċ}¢pczfþg¤ÇòAVM"],["@@©KA·³CQ±Á«³BUƑ¹AtćOwD]JiØSm¯b£ylX
HËѱH«C^õľAŧ¤É¥ïyuǙuA¢^{ÌC´¦ŷJ£^[ª¿ĕ~Ƈ
N
skóā¹¿ï]ă~÷O§@Vm¡Qđ¦¢Ĥ{ºjÔª¥nf´~Õo×ÛąMąıuZmZcÒ IJβSÊDŽŶ¨ƚCÖŎªQؼrŭ«}NÏürʬmjr@ĘrTW SsdHzƓ^ÇÂyUi¯DÅYlŹu{hT}mĉ¹¥ěDÿë©ıÓ[Oº£¥ótł¹MÕƪ`P
DiÛU¾ÅâìUñBÈ£ýhedy¡oċ`pfmjP~kZa
ZsÐd°wj§@Ĵ®w~^kÀÅKvNmX\\¨aŃqvíó¿F¤¡@ũÑVw}S@j}¾«pĂrªg àÀ²NJ¶¶Dô
K|^ª°LX¾ŴäPα£EXd^¶IJÞÜ~u¸ǔMRhsR
e`ÄofIÔ\\Ø ićymnú¨cj ¢»GČìƊÿШXeĈ¾Oð Fi ¢|[jVxrIQ_EzAN¦zLU`cªxOTu RLÄ¢dVi`p˔vŎµªÉF~Ød¢ºgİàw¸Áb[¦Zb¦z½xBĖ@ªpºlS¸Ö\\Ĕ[N¥ˀmĎăJ\\ŀ`
ňSÚĖÁĐiOĜ«BxDõĚivSÌ}iùÜnкG{p°M´wÀÒzJ²ò¨ oTçüöoÛÿñőФùTz²CȆȸǎŪƑÐc°dPÎğ˶[Ƚu¯½WM¡ÉB·rínZÒ `¨GA¾\\pēXhÃRCüWGġu
Té§ŎÑ©ò³I±³}_EÃħg®ęisÁPDmÅ{b[RÅs·kPŽƥóRoOV~]{g\\êYƪ¦kÝbiċƵGZ»Ěõ
ó·³vŝ£ø@pyö_ëIkѵbcѧy
×dYتiþ¨[]f]Ņ©C}ÁN»hĻħƏĩ"]],"encodeOffsets":[[[115640,30489]],[[112543,27312]],[[116690,26230]]]}},{"type":"Feature","id":"440000","properties":{"id":"440000","cp":[113.280637,23.125178],"name":"广东","childNum":24},"geometry":{"type":"MultiPolygon","coordinates":[["@@QdAua"],["@@lxDLo"],["@@sbhNLo"],["@@Ă ā"],["@@WltO[["],["@@Kr]S"],["@@eI]y"],["@@I|Mym"],["@@Û³LS¼Y"],["@@nvºBëui©`¾"],["@@zdÛJw®"],["@@°
¯"],["@@a yAª¸ËJIxØ@ĀHAmÃV¡ofuo"],["@@sŗÃÔėAƁZÄ ~°ČPäh"],["@@¶ÝÌvmĞhıQ"],["@@HdSjĒ¢D}war
u«ZqadYM"],["@@el\\LqqU"],["@@~rMo\\"],["@@f^C"],["@@øPªoj÷ÍÝħXČx°Q¨ıXNv"],["@@gÇƳo[~tly"],["@@EÆC¿"],["@@OP"],["@@wđógĝ[³¡VÙæÅöM̳¹pÁaËýý©D©ÜJŹƕģGą¤{Ùū
ÇO²«BƱéAÒĥ¡«BhlmtÃPµyU¯ucd·w_bŝcīímGO|KPȏŹãŝIŕŭŕ@Óoo¿ē±ß}
ŭIJWÈCőâUâǙIğʼn©IijE×
Á³AówXJþ±ÌÜÓĨ£L]ĈÙƺZǾĆĖMĸĤfÎĵlŨnÈĐtFFĤêk¶^k°f¶g}®Faf`vXŲxl¦ÔÁ²¬Ð¦pqÊ̲iXØRDÎ}Ä@ZĠsx®AR~®ETtĄZƈfŠŠHâÒÐAµ\\S¸^wĖkRzalŜ|E¨ÈNĀňZTpBh£\\ĎƀuXĖtKL¶G|»ĺEļĞ~ÜĢÛĊrOÙîvd]n¬VÊĜ°RÖpMƂªFbwEÀ©\\
¤]ŸI®¥D³|Ë]CöAŤ¦
æ´¥¸Lv¼¢ĽBaôF~®²GÌÒEYzk¤°ahlVÕI^CxĈPsBƒºV¸@¾ªR²ĨN]´_eavSivc}p}Đ¼ƌkJÚe th_¸ ºx±ò_xN˲@ă¡ßH©Ùñ}wkNÕ¹ÇO½¿£ĕ]ly_WìIǪ`uTÅxYĒÖ¼kÖµMjJÚwn\\hĒv]îh|ÈƄøèg¸Ķß ĉĈWb¹ƀdéĘNTtP[öSvrCZaGubo´ŖÒÇĐ~¡zCI
özx¢PnÈñ @ĥÒ¦]ƞV}³ăĔñiiÄÓVépKG½ÄÓávYoC·sitiaÀyŧΡÈYDÑům}ý|m[węõĉZÅxUO}÷N¹³ĉo_qtăqwµŁYÙǝŕ¹tïÛUïmRCº
ĭ|µÕÊK½Rē ó]GªęAx»HO£|ām¡diď×YïYWªʼnOeÚtĐ«zđ¹T
āúEá²\\ķÍ}jYàÙÆſ¿Çdğ·ùTßÇţʄ¡XgWÀLJğ·¿ÃOj YÇ÷Qěi"]],"encodeOffsets":[[[117381,22988]],[[116552,22934]],[[116790,22617]],[[116973,22545]],[[116444,22536]],[[116931,22515]],[[116496,22490]],[[116453,22449]],[[113301,21439]],[[118726,21604]],[[118709,21486]],[[113210,20816]],[[115482,22082]],[[113171,21585]],[[113199,21590]],[[115232,22102]],[[115739,22373]],[[115134,22184]],[[113056,21175]],[[119573,21271]],[[119957,24020]],[[115859,22356]],[[116561,22649]],[[116285,22746]]]}},{"type":"Feature","id":"450000","properties":{"id":"450000","cp":[108.320004,22.82402],"name":"广西","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@H TQ§A"],["@@ĨʪLƊDÎĹĐCǦė¸zÚGn£¾rªŀÜt¬@ÖÚSx~øOŒŶÐÂæȠ\\ÈÜObĖw^oÞLf¬°bI lTØBÌF£Ć¹gñĤaYt¿¤VSñK¸¤nM¼JE±½¸ñoÜCƆæĪ^ĚQÖ¦^f´QüÜÊz¯lzUĺš@ìp¶n]sxtx¶@~ÒĂJb©gk{°~c°`Ô¬rV\\la¼¤ôá`¯¹LCÆbxEræOv[H[~|aB£ÖsºdAĐzNÂðsÞÆ
Ĥªbab`ho¡³F«èVlo¤ÔRzpp®SĪº¨ÖºN
ijd`a¦¤F³ºDÎńĀìCĜº¦Ċ~nS|gźvZkCÆj°zVÈÁƔ]LÊFZg
čPkini«qÇczÍY®¬Ů»qR×ō©DÕ§ƙǃŵTÉĩ±ıdÑnYYIJvNĆĆØÜ Öp}e³¦m©iÓ|¹ħņ|ª¦QF¢Â¬ʖovg¿em^ucà÷gÕuíÙćĝ}FϼĹ{µHKsLSđƃrč¤[AgoSŇYMÿ§Ç{FśbkylQxĕ]T·¶[B
ÑÏGáşşƇe
ăYSsFQ}BwtYğÃ@~
CÍQ ×Wj˱rÉ¥oÏ ±«ÓÂ¥kwWűmcih³K~µh¯e]lµélEģEďsmÇŧē`ãògK_ÛsUʝćğ¶höO¤Ǜn³c`¡y¦CezYwa[ďĵűMę§]XÎ_íÛ]éÛUćİÕBƣ±
dy¹T^dûÅÑŦ·PĻþÙ`K¦
¢ÍeĥR¿³£[~äu¼dltW¸oRM¢ď\\z}Æzdvň{ÎXF¶°Â_ÒÂÏL©ÖTmu¼ãlīkiqéfA·Êµ\\őDc¥ÝFyÔćcűH_hLÜêĺШc}rn`½Ì@¸¶ªVLhŒ\\Ţĺk~Ġið°|gtTĭĸ^xvKVGréAébUuMJVÃO¡
qĂXËSģãlýà_juYÛÒBG^éÖ¶§EGÅzěƯ¤EkN[kdåucé¬dnYpAyČ{`]þ¯TbÜÈk¡ĠvàhÂƄ¢Jî¶²"]],"encodeOffsets":[[[111707,21520]],[[107619,25527]]]}},{"type":"Feature","id":"460000","properties":{"id":"460000","cp":[109.83119,19.031971],"name":"海南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@¦Ŝil¢XƦƞòïè§ŞCêɕrŧůÇąĻõ·ĉ³œ̅kÇm@ċȧŧĥĽʉƅſȓÒ˦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀоjNðĀÒRZdžzÐŘΰH¨Ƣb²_Ġ "],"encodeOffsets":[[112750,20508]]}},{"type":"Feature","id":"510000","properties":{"id":"510000","cp":[104.065735,30.659462],"name":"四川","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@LqKr"],["@@[ĻéV£_ţġñpG réÏ·~ąSfy×Í·ºſƽiÍıƣıĻmHH}siaX@iǰÁÃ×t«T¤JJJyJÈ`Ohߦ¡uËhIyCjmÿw
ZG
TiSsOB²fNmsPa{M{õE^Hj}gYpaeu¯oáwHjÁ½M¡pMuåmni{fk\\oÎqCwEZ¼KĝAy{m÷LwO×SimRI¯rKõBS«sFe]fµ¢óY_ÆPRcue°Cbo×bd£ŌIHgtrnyPt¦foaXďxlBowz_{ÊéWiêEGhܸºuFĈIxf®Y½ĀǙ]¤EyF²ċw¸¿@g¢§RGv»áW`ÃĵJwi]t¥wO½a[×]`ÃiüL¦LabbTÀåc}ÍhÆh®BHî|îºÉk¤Sy£ia©taį·Ɖ`ō¥UhO
ĝLk}©Fos´JmµlŁu
ønÑJWΪYÀïAetTŅÓGË«bo{ıwodƟ½OġܵxàNÖ¾P²§HKv¾]|BÆåoZ`¡Ø`ÀmºĠ~ÌЧnÇ
¿¤]wğ@srğu~Io[é±¹ ¿ſđÓ@qg¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@áťsZÏÅĭƋěpwDóÖáŻneQËq·GCœýS]x·ýq³OÕ¶Qzßti{řáÍÇWŝŭñzÇWpç¿JXĩè½cFÂLiVjx}\\NŇĖ¥GeJA¼ÄHfÈu~¸Æ«dE³ÉMA|bÒ
ćhG¬CMõƤąAvüVéŀ_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»ÕZ³ġqDoy`L¬gdp°şp¦ėìÅĮZ°Iähzĵf²å ĚÑKpIN|Ñz]ń
·FU×é»R³MÉ»GM«kiér}Ã`¹ăÞmÈnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²Ġ
þTº·àUȞÏʦ¶I«dĽĢdĬ¿»Ĕ×h\\c¬ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvwxBèĻĒ©ĈtCĢɽŠȣ¦āæ·HĽîôNÔ~^¤Ɗu^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ®Z´ğ~Sn|ªWÚ©òzPOȸbð¢|øĞŒQìÛÐ@ĞǎRS¤Á§d
i´ezÝúØã]HqkIþËQǦÃsǤ[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwnÆƄmÀêErĒtD®ċæcQE®³^ĭ¥©l}äQtoŖÜqÆkµªÔĻĴ¡@Ċ°B²Èw^^RsºT£ڿQPJvÄz^Đ¹Æ¯fLà´GC²dtĀRt¼¤ĦOðğfÔðDŨŁĞƘïPÈ®âbMüÀXZ ¸£@Å»»QÉ]dsÖ×_Í_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|YÔZśÎs´xº±Uñt|OĩĠºNbgþJy^dÂY Į]Řz¦gC³R`Āz¢Aj¸CL¤RÆ»@Ŏk\\Ç´£YW}z@Z}öoû¶]´^NÒ}èNªPÍy¹`S°´ATeVamdUĐwʄvĮÕ\\uÆŗ¨Yp¹àZÂmWh{á}WØǍÉüwga§áCNęÎ[ĀÕĪgÖɪXøx¬½Ů¦¦[NÎLÜUÖ´òrÙŠxR^JkijnDX{U~ET{ļº¦PZcjF²Ė@pg¨B{u¨ŦyhoÚD®¯¢ WòàFΤ¨GDäz¦kŮPġqË¥À]eâÚ´ªKxīPÖ|æ[xäJÞĥsNÖ½I¬nĨY´®ÐƐmDŝuäđđEb
ee_v¡}ìęNJē}qÉåT¯µRs¡M@}ůaa¯wvƉåZw\\Z{åû^"]],"encodeOffsets":[[[108815,30935]],[[110617,31811]]]}},{"type":"Feature","id":"520000","properties":{"id":"520000","cp":[106.713478,26.578343],"name":"贵州","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@G\\lY£in"],["@@q|mc¯tÏVSÎ"],["@@hÑ£IsNgßHHªķÃh_¹¡ĝħń¦uÙùgS¯JH|sÝÅtÁïyMDč»eÕtA¤{b\\}G®u\\åPFqwÅaD
K°ºâ_£ùbµmÁÛĹM[q|hlaªāI}ѵ@swtwm^oµD鼊yVky°ÉûÛR
³e¥]RÕěħ[ƅåÛDpJiVÂF²I
»mN·£LbÒYbWsÀbpkiTZĄă¶Hq`
ĥ_J¯ae«KpÝx]aĕÛPÇȟ[ÁåŵÏő÷Pw}TÙ@Õs«ĿÛq©½m¤ÙH·yǥĘĉBµĨÕnđ]K©œáGçş§ÕßgǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊw¶øV¤w²Ĉ]ÊKx|`ź¦ÂÈdrcÈbe¸`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pĐ`oÒh¶pa^ÓĔ}D»^Xy`d[Kv
JPhèhCrĂĚÂ^Êƌ wZLĠ£ÁbrzOIlMMĪŐžËr×ÎeŦtw|¢mKjSǘňĂStÎŦEtqFT¾E쬬ôxÌO¢ K³ŀºäYPVgŎ¦Ŋm޼VZwVlz¤
£Tl®ctĽÚó{GAÇge~Îd¿æaSba¥KKûj®_Ä^\\ؾbP®¦x^sxjĶI_Ä Xâ¼Hu¨Qh¡À@Ëô}±GNìĎlT¸
`V~R°tbÕĊ`¸úÛtÏFDu[MfqGH·¥yAztMFe|R_GkChZeÚ°tov`xbDnÐ{E}ZèxNEÞREn[Pv@{~rĆAB§EO¿|UZ~ìUf¨J²ĂÝÆsªB`s¶fvö¦Õ~dÔq¨¸º»uù[[§´sb¤¢zþF¢Æ
ÀhÂW\\ıËIÝo±ĭŠ£þÊs}¡R]ěDg´VG¢j±®èºÃmpU[Á뺰rÜbNu¸}º¼`niºÔXĄ¤¼ÔdaµÁ_Ã
ftQQgR·Ǔv}Ý×ĵ]µWc¤F²OĩųãW½¯K©
]{LóµCIµ±Mß¿h©āq¬o½~@i~TUxŪÒ¢@£ÀEîôruńb[§nWuMÆLl¿]x}ij½"]],"encodeOffsets":[[[112158,27383]],[[112105,27474]],[[112095,27476]]]}},{"type":"Feature","id":"530000","properties":{"id":"530000","cp":[101.512251,24.740609],"name":"云南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@[ùx½}ÑRHYīĺûsÍniEoã½Ya²ė{c¬ĝgĂsAØÅwďõzFjw}«Dx¿}Uũlê@HÅF¨ÇoJ´Ónũuą¡Ã¢pÒÅØ TF²xa²ËXcÊlHîAßËŁkŻƑŷÉ©hWæßUËs¡¦}teèÆ¶StÇÇ}Fd£jĈZĆÆ¤Tč\\D}O÷£U§~ŃGåŃDĝ¸Tsd¶¶Bª¤u¢ŌĎo~t¾ÍŶÒtD¦ÚiôözØX²ghįh½Û±¯ÿm·zR¦Ɵ`ªŊÃh¢rOÔ´£Ym¼èêf¯ŪĽncÚbw\\zlvWªâ ¦gmĿBĹ£¢ƹřbĥkǫßeeZkÙIKueT»sVesbaĕ ¶®dNĄÄpªy¼³BE®lGŭCǶwêżĔÂepÍÀQƞpC¼ŲÈAÎô¶RäQ^Øu¬°_Èôc´¹ò¨P΢hlϦ´ĦÆ´sâÇŲPnÊD^¯°Upv}®BP̪jǬxSöwlfòªvqĸ|`HviļndĜĆhňem·FyÞqóSᝳX_ĞçêtryvL¤§z¦c¦¥jnŞklD¤øz½ĜàĂŧMÅ|áƆàÊcðÂFÜáŢ¥\\\\ºİøÒÐJĴîD¦zK²ǏÎEh~CDhMn^ÌöÄ©ČZÀaüfɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~ÄqêljN¬¼HÊNQ´ê¼VظE^ŃÒyM{JLoÒęæe±Ķygã¯JYÆĭĘëo¥Šo¯hcK«z_prC´ĢÖY¼ v¸¢RÅW³Â§fǸYi³xR´ďUË`êĿUûuĆBƣöNDH«ĈgÑaB{ÊNF´¬c·Åv}eÇÃGB»If¦HňĕM
~[iwjUÁKE¾dĪçWIèÀoÈXòyŞŮÈXâÎŚj|àsRyµÖPr´þ ¸^wþTDŔHr¸RÌmfżÕâCôoxĜƌÆĮÐYtâŦÔ@]ÈǮƒ\\μģUsȯLbîƲŚºyhr@ĒÔƀÀ²º\\êpJ}ĠvqtĠ@^xÀ£È¨mËÏğ}n¹_¿¢×Y_æpÅA^{½Lu¨GO±Õ½ßM¶wÁĢÛPƢ¼pcIJx|ap̬HÐŊSfsðBZ¿©XÏÒKk÷Eû¿S
rEFsÕūkóVǥʼniTL¡n{uxţÏhôŝ¬ğōNNJkyPaqÂğ¤K®YxÉƋÁ]āęDqçgOgILu\\_gz]W¼~CÔē]bµogpÑ_oď`´³Țkl`IªºÎȄqÔþ»E³ĎSJ»_f·adÇqÇc¥Á_Źw{L^ɱćxU£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣGË÷k°_^ý|_zċBZocmø¯hhcæ\\lMFlư£ĜÆyHF¨µêÕ]HA
àÓ^it `þßäkĤÎT~Wlÿ¨ÔPzUCNVv [jâôDôď[}z¿msSh¯{jïğl}šĹ[őgK©U·µË@¾m_~q¡f¹
ÅË^»f³ø}Q¡Ö˳gͱ^Ç
\\ëÃA_¿bWÏ[¶ƛé£F{īZgm@|kHǭƁć¦UĔť×ë}ǝeďºȡȘÏíBÉ£āĘPªij¶ʼnÿy©nď£G¹¡I±LÉĺÑdĉÜW¥}gÁ{aqÃ¥aıęÏZï`"],"encodeOffsets":[[104636,22969]]}},{"type":"Feature","id":"540000","properties":{"id":"540000","cp":[89.132212,30.860361],"name":"西藏","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ÂhľxŖxÒVºÅâAĪÝȆµę¯Ňa±r_w~uSÕňqOj]ɄQ
£Z
UDûoY»©M[L¼qãË{VÍçWVi]ë©Ä÷àyƛhÚU°adcQ~Mx¥cc¡ÙaSyFÖkuRýq¿ÔµQĽ³aG{¿FµëªéĜÿª@¬·K·àariĕĀ«V»ŶĴūgèLǴŇƶaftèBŚ£^âǐÝ®M¦ÁǞÿ¬LhJ¾óƾƺcxwf]Y
´¦|QLn°adĊ
\\¨oǀÍŎ´ĩĀd`tÊQŞŕ|¨C^©Ĉ¦¦ÎJĊ{ëĎjª²rÐl`¼Ą[t|¦Stè¾PÜK¸dƄı]s¤î_v¹ÎVòŦj£Əsc¬_Ğ´|٦Av¦w`ăaÝaa¢e¤ı²©ªSªÈMĄwÉØŔì@T¤Ę\\õª@þo´xA sÂtŎKzó´ÇĊµ¢r^nĊƬ×üG¢³ {âĊ]G~bÀgVjzlhǶfOfdªB]pjTOtĊn¤}®¦Č¥d¢¼»ddY¼t¢eȤJ¤}Ǿ¡°§¤AÐlc@ĝsªćļđAçwxUuzEÖġ~AN¹ÄÅȀݦ¿ģŁéì±H
ãd«g[ؼēÀcīľġ¬cJµ
ÐʥVȝ¸ßS¹ý±ğkƁ¼ą^ɛ¤Ûÿb[}¬ōõÃ]ËNm®g@Bg}ÍF±ǐyL¥íCIijÏ÷Ñį[¹¦[âšEÛïÁÉdƅß{âNÆāŨß¾ě÷yC£k´ÓH@¹TZ¥¢į·ÌAЧ®Zc
v½Z¹|ÅWZqgW|ieZÅYVÓqdqbc²R@c¥Rã»GeeƃīQ}J[ÒK
¬Ə|oėjġĠÑN¡ð¯EBčnwôɍėª²CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛęgſ¶ҍć`ĘąŌJÞä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷f±iMÝ@ĥ°G¬ÃM¥n£Øąğ¯ß§aëbéüÑOčk£{\\eµª×MÉfm«Ƒ{Å×Gŏǩãy³©WÑăû··Qòı}¯ãIéÕÂZ¨īès¶ZÈsæĔTŘvgÌsN@îá¾ó@ÙwU±ÉT廣TđWxq¹Zobs[ׯcĩvėŧ³BM|¹kªħ¥TzNYnÝßpęrñĠĉRS~½ěVVµõ«M££µBĉ¥áºae~³AuĐh`ܳç@BÛïĿa©|z²Ý¼D£àč²ŸIûI āóK¥}rÝ_Á´éMaň¨~ªSĈ½½KÙóĿeƃÆB·¬ën×W|Uº}LJrƳlŒµ`bÔ`QÐÓ@s¬ñIÍ@ûws¡åQÑßÁ`ŋĴ{ĪTÚÅTSijYo|Ç[ǾµMW¢ĭiÕØ¿@Mh
pÕ]jéò¿OƇĆƇpêĉâlØwěsǩĵ¸c
bU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB\\qTGªÇĜçPoÿfñòą¦óQīÈáPābß{ZŗĸIæÅhnszÁCËìñÏ·ąĚÝUm®óL·ăUÈíoù´Êj°ŁŤ_uµ^°ìÇ@tĶĒ¡ÆM³Ģ«İĨÅ®ğRāðggheÆ¢zÊ©Ô\\°ÝĎz~ź¤PnMĪÖB£kné§żćĆKǰ¼L¶èâz¨u¦¥LDĘz¬ýÎmĘd¾ßFzhg²Fy¦ĝ¤ċņbÎ@yĄæm°NĮZRÖíJ²öLĸÒ¨Y®ƌÐVàtt_ÚÂyĠz]ŢhzĎ{ÂĢXc|ÐqfO¢¤ögÌHNPKŖUú´xx[xvĐCûĀìÖT¬¸^}Ìsòd´_KgžLĴ
ÀBon|H@Êx¦BpŰŌ¿fµƌA¾zLjRx¶FkĄźRzŀ~¶[´HnªVƞuĒȨƎcƽÌm¸ÁÈM¦x͊ëÀxdžBú^´W£dkɾĬpw˂ØɦļĬIŚÊnŔa¸~J°îlɌxĤÊÈðhÌ®gT´øàCÀ^ªerrƘd¢İP|Ė ŸWªĦ^¶´ÂLaT±üWƜǀRÂŶUńĖ[QhlLüAÜ\\qRĄ©"],"encodeOffsets":[[90849,37210]]}},{"type":"Feature","id":"610000","properties":{"id":"610000","cp":[108.948024,34.263161],"name":"陕西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@p¢ȮµûGĦ}Ħðǚ¶òƄjɂz°{ºØkÈęâ¦jªBg\\ċ°s¬]jú EȌdž¬stRÆdĠİwܸôW¾ƮłÒ_{Ìû¼jº¹¢GǪÒ¯ĘZ`ºŊecņą~BÂgzpâēòYǠȰÌTΨÂW|fcă§uF@N¢XLRMº[ğȣſï|¥Jkc`sʼnǷY¹W@µ÷K
ãï³ÛIcñ·VȋÚÒķø©þ¥yÓğęmWµÎumZyOŅƟĥÓ~sÑL¤µaÅ
Y¦ocyZ{y c]{Ta©`U_Ěē£ωÊƍKùK¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑdìUYOuFÕÈYvÁCqÓTǢí§·S¹NgV¬ë÷Át°DدC´ʼnƒópģ}ċcEË
FéGU¥×K
§¶³BČ}C¿åċ`wġB·¤őcƭ²ő[Å^axwQO
ÿEËߌĤNĔwƇÄńwĪo[_KÓª³ÙnKÇěÿ]ďă_d©·©Ýŏ°Ù®g]±ßå¬÷m\\iaǑkěX{¢|ZKlçhLtŇîŵœè[É@ƉĄEtƇϳħZ«mJ
×¾MtÝĦ£IwÄå\\Õ{OwĬ©LÙ³ÙgBƕŀrÌĢŭO¥lãyC§HÍ£ßEñX¡°ÙCgpťzb`wIvA|§hoĕ@E±iYd¥OϹS|}F@¾oAO²{tfÜ¢FǂÒW²°BĤh^Wx{@¬F¸¡ķn£P|ªĴ@^ĠĈæbÔc¶lYi
^MicϰÂ[ävï¶gv@ÀĬ·lJ¸sn|¼u~a]ÆÈtŌºJpþ£KKf~¦UbyäIĺãnÔ¿^ŵMThĠܤko¼Ŏìąǜh`[tRd²IJ_XPrɲlXiL§à¹H°Ȧqº®QCbAŌJ¸ĕÚ³ĺ§ `d¨YjiZvRĺ±öVKkjGȊÄePĞZmļKÀ[`ösìhïÎoĬdtKÞ{¬èÒÒBÔpIJÇĬJŊ¦±J«Y§@·pHµàåVKepWftsAÅqC·¬ko«pHÆuK@oHĆÛķhxenS³àǍrqƶRbzy¸ËÐl¼EºpĤ¼x¼½~Ğà@ÚüdK^mÌSj"],"encodeOffsets":[[110234,38774]]}},{"type":"Feature","id":"620000","properties":{"id":"620000","cp":[103.823557,36.058039],"name":"甘肃","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@VuUv"],["@@ũEĠtt~nkh`Q¦ÅÄÜdwAb×ĠąJ¤DüègĺqBqj°lI¡ĨÒ¤úSHbjÎB°aZ¢KJO[|A£Dx}NìHUnrk kp¼Y kMJn[aGáÚÏ[½rc}aQxOgsPMnUsncZ
sKúvAtÞġ£®ĀYKdnFw¢JE°Latf`¼h¬we|Æbj}GA·~W`¢MC¤tL©IJ°qdfObÞĬ¹ttu`^ZúE`[@Æsîz®¡CƳƜG²R¢RmfwĸgÜą G@pzJM½mhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬²I¥IʼnÈīoıÓÑAçÑ|«LÝcspīðÍg
të_õ\\ĉñLYnĝgRǡÁiHLlõUĹ²uQjYi§Z_c¨´ĹĖÙ·ŋI
aBDR¹ȥr¯GºßK¨jWkɱOqWij\\aQ\\sg_ĆǛōëp»£lğÛgSŶN®À]ÓämĹãJaz¥V}Le¤Lýo¹IsŋÅÇ^bz
³tmEÁ´a¹cčecÇNĊãÁ\\č¯dNj]jZµkÓdaćå]ğij@ ©O{¤ĸm¢E·®«|@Xwg]A챝XǁÑdzªcwQÚŝñsÕ³ÛV_ý¥\\ů¥©¾÷w©WÕÊĩhÿÖÁRo¸V¬âDb¨hûxÊ×nj~Zâg|XÁnßYoº§ZÅŘv[ĭÖʃuďxcVbnUSf
B¯³_TzºÎO©çMÑ~M³]µ^püµÄY~y@X~¤Z³[Èōl@®Å¼£QK·Di¡ByÿQ_´D¥hŗy^ĭÁZ]cIzýah¹MĪğPs{ò²Vw¹t³ŜË[Ñ}X\\gsF£sPAgěp×ëfYHāďÖqēŭOÏëdLü\\it^c®Rʺ¶¢H°mrY£B¹čIoľu¶uI]vģSQ{UŻÅ}QÂ|̰ƅ¤ĩŪU ęĄÌZÒ\\v²PĔ»ƢNHĂyAmƂwVm`]ÈbH`Ì¢²ILvĜH®¤Dlt_¢JJÄämèÔDëþgºƫaʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b
ð÷®üszMzÖĖQdȨýv§Tè|ªHþa¸|Ð ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v·À|\\ƁĚN´ĜçèÁz]ġ¤²¨QÒŨTIlªťØ}¼˗ƦvÄùØE«FïËIqōTvāÜŏíÛßÛVj³âwGăÂíNOPìyV³ʼnĖýZso§HÑiYw[ß\\X¦¥c]ÔƩÜ·«jÐqvÁ¦m^ċ±R¦ƈťĚgÀ»IïĨʗƮ°ƝĻþÍAƉſ±tÍEÕÞāNUÍ¡\\ſčåÒʻĘm ƭÌŹöʥëQ¤µÇcƕªoIýIÉ_mkl³ăƓ¦j¡YzŇi}Msßõīʋ }ÁVm_[n}eıUĥ¼ªI{ΧDÓƻėojqYhĹT©oūĶ£]ďxĩǑMĝq`B´ƃ˺Чç~²ņj@¥@đ´ί}ĥtPńǾV¬ufÓÉCtÓ̻
¹£G³]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼĤŊɲĖÂKq´ï¦ºĒDzņɾªǀÞĈĂD½ĄĎÌŗĞrôñnN¼â¾ʄľԆ|DŽ֦ज़ȗlj̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿ĽĹeȏijëCȚDŲyê×Ŗyò¯ļcÂßY
tÁƤyAã˾J@ǝrý@¤
rz¸oP¹ɐÚyáHĀ[Jw
cVeȴÏ»ÈĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔĹŊũ~ËUă{ĻƹɁύȩþĽvĽƓÉ@ēĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶¨c~c¼īeXǚ\\đ¾JwÀďksãAfÕ¦L}waoZD½Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LFLzĈôe]gx}|KK}xklL]c¦£fRtív¦PĤoH{tK"]],"encodeOffsets":[[[108619,36299]],[[108589,36341]]]}},{"type":"Feature","id":"630000","properties":{"id":"630000","cp":[96.778916,35.623178],"name":"青海","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@InJm"],["@@CƽOŃĦsΰ~dz¦@@Ņi±è}ШƄ˹A³r_ĞǒNĪĐw¤^ŬĵªpĺSZgrpiƼĘÔ¨C|ÍJ©Ħ»®VIJ~f\\m `UnÂ~ʌĬàöNt~ňjy¢ZiƔ¥Ąk´nl`JÊJþ©pdƖ®È£¶ìRʦźõƮËnʼėæÑƀĎ[¢VÎĂMÖÝÎF²sƊƀÎBļýƞ¯ʘƭðħ¼Jh¿ŦęΌƇ¥²Q]Č¥nuÂÏri¸¬ƪÛ^Ó¦d¥[Wà
x\\ZjÒ¨GtpþYŊĕ´zUOëPîMĄÁxH´áiÜUàîÜŐĂÛSuŎrJð̬EFÁú×uÃÎkrĒ{V}İ«O_ÌËĬ©ÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u
ºµ[gt£¸OƤĿéYõ·kĀq]juw¥DĩƍõÇPéĽG©ã¤G
uȧþRcÕĕNyyûtøï»a½ē¿BMoį£Íj}éZËqbʍƬh¹ìÿÓAçãnIáI`ks£CGěUy×Cy
@¶ʡÊBnāzGơMē¼±O÷õJËĚăVĪũƆ£¯{ËL½ÌzżVR|ĠTbuvJvµhĻĖHAëáa
OÇðñęNw
œľ·LmI±íĠĩPÉ×®ÿscB³±JKßĊ«`
ađ»·QAmOVţéÿ¤¹SQt]]Çx±¯A@ĉij¢Óļ©l¶ÅÛrŕspãRk~¦ª]Į´FRådČsCqđéFn¿ÅƃmÉx{W©ºƝºįkÕƂƑ¸wWūЩÈF£\\tÈ¥ÄRÈýÌJ lGr^×äùyÞ³fjc¨£ÂZ|ǓMĝÏ@ëÜőRĝ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³ÞIňµç½©C¡į÷¯B»|St»]vųs»}MÓ ÿʪƟǭA¡fs»PY¼c¡»¦cċ¥£~msĉPSi^o©AecPeǵkgyUi¿h}aHĉ^|á´¡HØûÅ«ĉ®]m¡qĉ¶³ÈyôōLÁstB®wn±ă¥HSòė£Së@לÊăxÇN©©T±ª£IJ¡fb®Þbb_Ą¥xu¥B{łĝ³«`dƐt¤ťiñÍUuºí`£^tƃIJc·ÛLO½sç¥Ts{ă\\_»kϱq©čiìĉ|ÍI¥ć¥]ª§D{ŝŖÉR_sÿc³ĪōƿΧp[ĉc¯bKmR¥{³Ze^wx¹dƽŽôIg §Mĕ ƹĴ¿ǣÜÍ]Ý]snåA{eƭ`ǻŊĿ\\ijŬűYÂÿ¬jĖqßb¸L«¸©@ěĀ©ê¶ìÀEH|´bRľÓ¶rÀQþvl®ÕETzÜdb hw¤{LRdcb¯ÙVgƜßzÃôì®^jUèXÎ|UäÌ»rK\\ªN¼pZCüVY¤ɃRi^rPŇTÖ}|br°qňb̰ªiƶGQ¾²x¦PmlŜ[Ĥ¡ΞsĦÔÏâ\\ªÚŒU\\f
¢N²§x|¤§xĔsZPòʛ²SÐqF`ªVÞŜĶƨVZÌL`¢dŐIqr\\oäõF礻Ŷ×h¹]ClÙ\\¦ďÌį¬řtTӺƙgQÇÓHţĒ´ÃbEÄlbʔC|CŮkƮ[ʼ¬ň´KŮÈΰÌζƶlðļATUvdTGº̼ÔsÊDÔveOg"]],"encodeOffsets":[[[105308,37219]],[[95370,40081]]]}},{"type":"Feature","id":"640000","properties":{"id":"640000","cp":[106.278179,37.26637],"name":"宁夏","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@KëÀęĞ«Oęȿȕı]ʼn¡åįÕÔ«ǴõƪĚQÐZhv K°öqÀÑS[ÃÖHƖčËnL]ûc
Ùß@ĝ¾}w»»oģF¹»kÌÏ·{zP§B¢íyÅt@@á]Yv_ssģ¼ißĻL¾ġsKD£¡N_
X¸}B~HaiÅf{«x»ge_bsKF¯¡IxmELcÿZ¤ĢÝsuBLùtYdmVtNmtOPhRw~bd
¾qÐ\\âÙH\\bImlNZ»loqlVmGā§~QCw¤{A\\PKNY¯bFkC¥sks_Ã\\ă«¢ħkJi¯rrAhĹûç£CUĕĊ_ÔBixÅÙĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~hw^ófćKyEKzuÔ¡qQ¤xZÑ¢^ļöܾEp±âbÊÑÆ^fk¬
NC¾YpxbK~¥eÖäBlt¿Đx½I[ĒǙWf»Ĭ}d§dµùEuj¨IÆ¢¥dXªƅx¿]mtÏwßRĶX¢͎vÆzƂZò®ǢÌʆCrâºMÞzÆMÒÊÓŊZľr°Î®Ȉmª²ĈUªĚîøºĮ¦ÌĘk^FłĬhĚiĀ˾iİbjÕ"],["@@mfwěwMrŢªv@G"]],"encodeOffsets":[[[109366,40242]],[[108600,36303]]]}},{"type":"Feature","id":"650000","properties":{"id":"650000","cp":[85.617733,40.792818],"name":"新疆","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@QØĔ²X¨~ǘBºjʐߨvKƔX¨vĊO÷¢i@~cĝe_«E}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuX
êÎf`C¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥OéÈ¿ÖğǤǷÂFÒzÉx[]Ĥĝœ¦EP}ûƥé¿İƷTėƫœŕƅƱB»Đ±ēO
¦E}`cȺrĦáŖuÒª«IJπdƺÏØZƴwʄ¤ĖGĐǂZĶèH¶}ÚZצʥĪï|ÇĦMŔ»İĝLjì¥Βba¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»òmqóŘĝč˾ăC
ćāƿÝɽ©DZҹđ¥³ðLrÁ®ɱĕģʼnǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕUv£ƁQïƵkŏ½ΉÃŭdzLŇʻ«ƭ\\lŭD{ʓDkaFÃÄa³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍöůʼnT¡c_ËKYƧUśĵÝU_©rETÏʜ±OñtYwē¨{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\śnkOw¥±T»ƷFɯàĩÞáB¹Æ
ÑUwŕĽw[mG½Èå~Æ÷QyěCFmĭZīŵVÁƿQƛûXS²b½KϽĉS©ŷXĕ{ĕK·¥Ɨcqq©f¿]ßDõU³hgËÇïģÉɋwk¯í}I·œbmÉřīJɥĻˁ×xoɹīlc
¤³Xù]DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®ƝvUm©³G\\}µĿQyŹlăµEwLJQ½yƋBe¶ŋÀůo¥AÉw@{Gpm¿AijŽKLh³`ñcËtW±»ÕSëüÿďDu\\wwwù³VLŕOMËGh£õP¡erÏd{ġWÁ
č|yšg^ğyÁzÙs`s|ÉåªÇ}m¢Ń¨`x¥ù^}Ì¥H«YªƅAйn~ź¯f¤áÀzgÇDIÔ´AňĀÒ¶ûEYospõD[{ù°]uJqU|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw ÞkrťË¿XGÉbřaDü·Ē÷Aê[ÄäI®BÕĐÞ_¢āĠpÛÄȉĖġDKwbmÄNôfƫVÉvidzHQµâFùœ³¦{YGd¢ĚÜO {Ö¦ÞÍÀP^bƾl[vt×ĈÍE˨¡Đ~´î¸ùÎhuè`¸HÕŔVºwĠââWò@{ÙNÝ´ə²ȕn{¿¥{l÷eé^eďXj©î\\ªÑòÜìc\\üqÕ[Č¡xoÂċªbØø|¶ȴZdÆÂońéG\\¼C°ÌÆn´nxÊOĨŪƴĸ¢¸òTxÊǪMīĞÖŲÃɎOvʦƢ~FRěò¿ġ~åŊúN¸qĘ[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾ĄYÒ©ÊfºmÔĘcDoĬMŬS¤s²ʘÚžȂVŦ èW°ªB|IJXŔþÈJĦÆæFĚêYĂªĂ]øªŖNÞüAfɨJ¯ÎrDDĤ`mz\\§~D¬{vJ«lµĂb¤pŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMTòP÷fØĶK¢ȝ˔Sô¹òEð`Ɩ½ǒÂň×äı§ĤƝ§C~¡hlåǺŦŞkâ~}FøàIJaĞfƠ¥Ŕd®U¸źXv¢aƆúŪtŠųƠjdƺƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹\\ĜÑŚ¶ZƄ³àjĨoâȴLÊȮĐĚăÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTiƢ¾ªì°`öøu®Ê¾ãØ"],"encodeOffsets":[[88824,50096]]}},{"type":"Feature","id":"110000","properties":{"id":"110000","cp":[116.405285,39.904989],"name":"北京","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ĽOÁûtŷmiÍt_H»Ĩ±d`¹{bw
Yr³S]§§o¹qGtm_SŧoaFLgQN_dV@Zom_ć\\ßc±x¯oœRcfe
£o§ËgToÛJíĔóu
|wP¤XnO¢ÉŦ¯rNÄā¤zâŖÈRpŢZÚ{GrFt¦Òx§ø¹RóäV¤XdżâºWbwڍUd®bêņ¾jnŎGŃŶnzÚSeîĜZczî¾i]ÍQaúÍÔiþĩȨWĢü|Ėu[qb[swP@ÅğP¿{\\¥A¨ÏѨj¯X\\¯MKpA³[H
īu}}"],"encodeOffsets":[[120023,41045]]}},{"type":"Feature","id":"120000","properties":{"id":"120000","cp":[117.190182,39.125596],"name":"天津","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ŬgX§Ü«E
¶F̬O_ïlÁgz±AXeµÄĵ{¶]gitgIj·¥îakS¨ÐƎk}ĕ{gBqGf{¿aU^fIư³õ{YıëNĿk©ïËZŏR§òoY×Ógc
ĥs¡bġ«@dekąI[nlPqCnp{ō³°`{PNdƗqSÄĻNNâyj]äÒD ĬH°Æ]~¡HO¾X}ÐxgpgWrDGpù^LrzWxZ^¨´T\\|~@IzbĤjeĊªz£®ĔvěLmV¾Ô_ÈNW~zbĬvG²ZmDM~~"],"encodeOffsets":[[120237,41215]]}},{"type":"Feature","id":"310000","properties":{"id":"310000","cp":[121.472644,31.231706],"name":"上海","childNum":6},"geometry":{"type":"MultiPolygon","coordinates":[["@@ɧư¬EpƸÁxc"],["@@©ª"],["@@MA"],["@@QpİE§ÉC¾"],["@@bŝÕÕEȣÚƥêImɇǦèÜĠÚÃƌÃ͎ó"],["@@ǜûȬɋŭ×^sYɍDŋŽąñCG²«ªč@h_p¯A{oloY¬j@IJ`gQÚhr|ǀ^MIJvtbe´R¯Ô¬¨Yô¤r]ìƬį"]],"encodeOffsets":[[[124702,32062]],[[124547,32200]],[[124808,31991]],[[124726,32110]],[[124903,32376]],[[124438,32149]]]}},{"type":"Feature","id":"500000","properties":{"id":"500000","cp":[107.304962,29.533155],"name":"重庆","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@vjG~nGŘŬĶȂƀƾ¹¸ØÎezĆT¸}êÐqHðqĖä¥^CÆIj²p
\\_ æüY|[YxƊæu°xb®
Űb@~¢NQt°¶Sæ Ê~rljĔëĚ¢~uf`faĔJåĊnÖ]jƎćÊ@£¾a®£Ű{ŶĕFègLk{Y|¡ĜWƔtƬJÑxq±ĢN´òKLÈüD|s`ŋć]Ã`đMûƱ½~Y°ħ`ƏíW½eI½{aOIrÏ¡ĕŇapµÜƅġ^ÖÛbÙŽŏml½SêqDu[RãË»ÿw`»y¸_ĺę}÷`M¯ċfCVµqʼn÷Zgg`d½pDOÎCn^uf²ènh¼WtƏxRGg¦
pVFI±G^Ic´ecGĹÞ½sëĬhxW}KÓeXsbkF¦LØgTkïƵNï¶}Gyw\\oñ¡nmĈzj@Óc£»Wă¹Ój_m»¹·~MvÛaq»ê\\ÂoVnÓØÍ²«bq¿efE Ĝ^Q~ Évýş¤²ĮpEİ}zcĺL½¿gÅ¡ýE¡ya£³t\\¨\\vú»¼§·Ñr_oÒý¥u_n»_At©Þűā§IVeëY}{VPÀFA¨ąB}q@|Ou\\FmQFÝ
Mwå}]|FmÏCawu_p¯sfÙgY
DHl`{QEfNysB¦zG¸rHeN\\CvEsÐùÜ_·ÖĉsaQ¯}_UxÃđqNH¬Äd^ÝŰR¬ã°wećJE·vÝ·HgéFXjÉê`|ypxkAwWĐpb¥eOsmzwqChóUQl¥F^lafanòsrEvfQdÁUVfÎvÜ^eftET¬ôA\\¢sJnQTjPØxøK|nBzĞ»LY
FDxÓvr[ehľvN¢o¾NiÂxGpâ¬zbfZo~hGi]öF||NbtOMn eA±tPTLjpYQ|SHYĀxinzDJÌg¢và¥Pg_ÇzIIII£®S¬Øsμ£N"],["@@ifjN@s"]],"encodeOffsets":[[[109628,30765]],[[111725,31320]]]}},{"type":"Feature","id":"810000","properties":{"id":"810000","cp":[114.173355,22.320048],"name":"香港","childNum":5},"geometry":{"type":"MultiPolygon","coordinates":[["@@AlBk"],["@@mn"],["@@EpFo"],["@@ea¢pl¸Eõ¹hj[]ÔCÎ@lj¡uBX
´AI¹
[yDU]W`çwZkmc
MpÅv}IoJlcafŃK°ä¬XJmÐ đhI®æÔtSHnEÒrÈc"],["@@rMUwAS®e"]],"encodeOffsets":[[[117111,23002]],[[117072,22876]],[[117045,22887]],[[116975,23082]],[[116882,22747]]]}},{"type":"Feature","id":"820000","properties":{"id":"820000","cp":[113.54909,22.198951],"name":"澳门","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@kÊd°å§s"],"encodeOffsets":[[116279,22639]]}}],"UTF8Encoding":true});
46 | }));
47 |
--------------------------------------------------------------------------------
/COVID-19_Tracking/static/js/controller.js:
--------------------------------------------------------------------------------
1 | function gettime() {
2 | $.ajax({
3 | url: "/time",
4 | timeout: 10000, //超时时间设置为10秒;
5 | success: function(data) {
6 | $("#tim").html(data)
7 | },
8 | error: function(xhr, type, errorThrown) {
9 | }
10 | });
11 | }
12 |
13 | function get_c1_data() {
14 | $.ajax({
15 | url: "/c1",
16 | success: function(data) {
17 | $(".num h1").eq(0).text(data.confirm);
18 | $(".num h1").eq(1).text(data.suspect);
19 | $(".num h1").eq(2).text(data.heal);
20 | $(".num h1").eq(3).text(data.dead);
21 | },
22 | error: function(xhr, type, errorThrown) {
23 | }
24 | })
25 | }
26 |
27 | function get_c2_data() {
28 | $.ajax({
29 | url:"/c2",
30 | success: function(data) {
31 | ec_center_option.series[0].data=data.data
32 | ec_center.setOption(ec_center_option)
33 | },
34 | error: function(xhr, type, errorThrown) {
35 |
36 | }
37 | })
38 | }
39 |
40 | function get_l1_data() {
41 | $.ajax({
42 | url:"/l1",
43 | success: function(data) {
44 | ec_left1_Option.xAxis[0].data=data.day
45 | ec_left1_Option.series[0].data=data.confirm
46 | ec_left1_Option.series[1].data=data.suspect
47 | ec_left1_Option.series[2].data=data.heal
48 | ec_left1_Option.series[3].data=data.dead
49 | ec_left1.setOption(ec_left1_Option)
50 | },
51 | error: function(xhr, type, errorThrown) {
52 |
53 | }
54 | })
55 | }
56 |
57 | function get_l2_data() {
58 | $.ajax({
59 | url:"/l2",
60 | success: function(data) {
61 | ec_left2_Option.xAxis[0].data=data.day
62 | ec_left2_Option.series[0].data=data.confirm_add
63 | ec_left2_Option.series[1].data=data.suspect_add
64 | ec_left2.setOption(ec_left2_Option)
65 | },
66 | error: function(xhr, type, errorThrown) {
67 | }
68 | })
69 | }
70 |
71 | function get_r1_data() {
72 | $.ajax({
73 | url: "/r1",
74 | success: function (data) {
75 | ec_right1_option.xAxis.data=data.city;
76 | ec_right1_option.series[0].data=data.confirm;
77 | ec_right1.setOption(ec_right1_option);
78 | }
79 | })
80 | }
81 |
82 | function get_r2_data() {
83 | $.ajax({
84 | url: "/r2",
85 | success: function (data) {
86 | ec_right2_option.series[0].data=data.kws;
87 | ec_right2.setOption(ec_right2_option);
88 | }
89 | })
90 | }
91 |
92 |
93 | gettime()
94 | get_c1_data()
95 | get_c2_data()
96 | get_l1_data()
97 | get_l2_data()
98 | get_r1_data()
99 | get_r2_data()
100 |
101 | setInterval(gettime,1000)
102 | setInterval(get_c1_data,1000*10)
103 | setInterval(get_c2_data,10000*10)
104 | setInterval(get_l1_data,10000*10)
105 | setInterval(get_l2_data,10000*10)
106 | setInterval(get_r1_data,10000*10)
107 | setInterval(get_r2_data,10000*10)
--------------------------------------------------------------------------------
/COVID-19_Tracking/static/js/ec_center.js:
--------------------------------------------------------------------------------
1 | var ec_center = echarts.init(document.getElementById('c2'), "dark");
2 |
3 | var mydata = [{'name': '上海', 'value': 318}, {'name': '云南', 'value': 162}]
4 |
5 | var ec_center_option = {
6 | title: {
7 | text: '',
8 | subtext: '',
9 | x: 'left'
10 | },
11 | tooltip: {
12 | trigger: 'item'
13 | },
14 | //左侧小导航图标
15 | visualMap: {
16 | show: true,
17 | x: 'left',
18 | y: 'bottom',
19 | textStyle: {
20 | fontSize: 8,
21 | },
22 | splitList: [{ start: 1,end: 9 },
23 | {start: 10, end: 99 },
24 | { start: 100, end: 999 },
25 | { start: 1000, end: 9999 },
26 | { start: 10000 }],
27 | color: ['#8A3310', '#C64918', '#E55B25', '#F2AD92', '#F9DCD1']
28 | },
29 | //配置属性
30 | series: [{
31 | name: '累计确诊人数',
32 | type: 'map',
33 | mapType: 'china',
34 | roam: false, //拖动和缩放
35 | itemStyle: {
36 | normal: {
37 | borderWidth: .5, //区域边框宽度
38 | borderColor: '#009fe8', //区域边框颜色
39 | areaColor: "#ffefd5", //区域颜色
40 | },
41 | emphasis: { //鼠标滑过地图高亮的相关设置
42 | borderWidth: .5,
43 | borderColor: '#4b0082',
44 | areaColor: "#fff",
45 | }
46 | },
47 | label: {
48 | normal: {
49 | show: true, //省份名称
50 | fontSize: 8,
51 | },
52 | emphasis: {
53 | show: true,
54 | fontSize: 8,
55 | }
56 | },
57 | data:[] //mydata //数据
58 | }]
59 | };
60 | ec_center.setOption(ec_center_option)
--------------------------------------------------------------------------------
/COVID-19_Tracking/static/js/ec_left1.js:
--------------------------------------------------------------------------------
1 | var ec_left1 = echarts.init(document.getElementById('l1'), "dark");
2 |
3 | var ec_left1_Option = {
4 | //标题样式
5 | title: {
6 | text: "全国累计趋势",
7 | textStyle: {
8 | // color: 'white',
9 | },
10 | left: 'left',
11 | },
12 | tooltip: {
13 | trigger: 'axis',
14 | //指示器
15 | axisPointer: {
16 | type: 'line',
17 | lineStyle: {
18 | color: '#7171C6'
19 | }
20 | },
21 | },
22 | legend: {
23 | data: ['累计确诊', '现有疑似', "累计治愈", "累计死亡"],
24 | left: "right"
25 | },
26 |
27 | //图形位置
28 | grid: {
29 | left: '4%',
30 | right: '6%',
31 | bottom: '4%',
32 | top: 50,
33 | containLabel: true
34 | },
35 | xAxis: [{
36 | type: 'category',
37 | //x轴坐标点开始与结束点位置都不在最边缘
38 | // boundaryGap : true,
39 | data: []//
40 | // data: ['01.20', '01.21', '01.22']
41 | }],
42 | yAxis: [{
43 | type: 'value',
44 | //y轴字体设置
45 | axisLabel: {
46 | show: true,
47 | color: 'white',
48 | fontSize: 12,
49 | formatter: function(value) {
50 | if (value >= 1000) {
51 | value = value / 1000 + 'k';
52 | }
53 | return value;
54 | }
55 | },
56 | //y轴线设置显示
57 | axisLine: {
58 | show: true
59 | },
60 | //与x轴平行的线样式
61 | splitLine: {
62 | show: true,
63 | lineStyle: {
64 | color: '#17273B',
65 | width: 1,
66 | type: 'solid',
67 | }
68 | }
69 | }],
70 | series: [{
71 | name: "累计确诊",
72 | type: 'line',
73 | smooth: true,
74 | data: []//[260, 406, 529]
75 | }, {
76 | name: "现有疑似",
77 | type: 'line',
78 | smooth: true,
79 | data: []//[54, 37, 3935]
80 | },
81 | {
82 | name: "累计治愈",
83 | type: 'line',
84 | smooth: true,
85 | data: []//[25, 25, 25]
86 | }, {
87 | name: "累计死亡",
88 | type: 'line',
89 | smooth: true,
90 | data: []//[6, 9, 17]
91 | }]
92 | };
93 |
94 | ec_left1.setOption(ec_left1_Option)
95 |
--------------------------------------------------------------------------------
/COVID-19_Tracking/static/js/ec_left2.js:
--------------------------------------------------------------------------------
1 | var ec_left2 = echarts.init(document.getElementById('l2'), "dark");
2 | var ec_left2_Option = {
3 | tooltip: {
4 | trigger: 'axis',
5 | //指示器
6 | axisPointer: {
7 | type: 'line',
8 | lineStyle: {
9 | color: '#7171C6'
10 | }
11 | },
12 | },
13 | legend: {
14 | data: ['新增确诊', '新增疑似'],
15 | left: "right"
16 | },
17 | //标题样式
18 | title: {
19 | text: "全国新增趋势",
20 | textStyle: {
21 | color: 'white',
22 | },
23 | left: 'left'
24 | },
25 | //图形位置
26 | grid: {
27 | left: '4%',
28 | right: '6%',
29 | bottom: '4%',
30 | top: 50,
31 | containLabel: true
32 | },
33 | xAxis: [{
34 | type: 'category',
35 | //x轴坐标点开始与结束点位置都不在最边缘
36 | // boundaryGap : true,
37 |
38 | data: []
39 | }],
40 | yAxis: [{
41 | type: 'value',
42 | //y轴字体设置
43 |
44 | //y轴线设置显示
45 | axisLine: {
46 | show: true
47 | },
48 | axisLabel: {
49 | show: true,
50 | color: 'white',
51 | fontSize: 12,
52 | formatter: function(value) {
53 | if (value >= 1000) {
54 | value = value / 1000 + 'k';
55 | }
56 | return value;
57 | }
58 | },
59 | //与x轴平行的线样式
60 | splitLine: {
61 | show: true,
62 | lineStyle: {
63 | color: '#17273B',
64 | width: 1,
65 | type: 'solid',
66 | }
67 | }
68 | }],
69 | series: [{
70 | name: "新增确诊",
71 | type: 'line',
72 | smooth: true,
73 | data: []
74 | }, {
75 | name: "新增疑似",
76 | type: 'line',
77 | smooth: true,
78 | data: []
79 | }]
80 | };
81 |
82 | ec_left2.setOption(ec_left2_Option)
83 |
--------------------------------------------------------------------------------
/COVID-19_Tracking/static/js/ec_right1.js:
--------------------------------------------------------------------------------
1 | var ec_right1 = echarts.init(document.getElementById('r1'),"dark");
2 | var ec_right1_option = {
3 | //标题样式
4 | title : {
5 | text : "非湖北地区城市确诊TOP5",
6 | textStyle : {
7 | color : 'white',
8 | },
9 | left : 'left'
10 | },
11 | color: ['#3398DB'],
12 | tooltip: {
13 | trigger: 'axis',
14 | axisPointer: { // 坐标轴指示器,坐标轴触发有效
15 | type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
16 | }
17 | },
18 | xAxis: {
19 | type: 'category',
20 | data: []
21 | },
22 | yAxis: {
23 | type: 'value'
24 | },
25 | series: [{
26 | data: [],
27 | type: 'bar',
28 | barMaxWidth:"50%"
29 | }]
30 | };
31 | ec_right1.setOption(ec_right1_option)
--------------------------------------------------------------------------------
/COVID-19_Tracking/static/js/ec_right2.js:
--------------------------------------------------------------------------------
1 | var ec_right2 = echarts.init(document.getElementById('r2'), "dark");
2 |
3 | var ddd = [{'name': '肺炎', 'value': '12734670'}, {'name': '实时', 'value': '12734670'},
4 | {'name': '新型', 'value': '12734670'}]
5 | var ec_right2_option = {
6 | // backgroundColor: '#515151',
7 | title : {
8 | text : "今日疫情热搜",
9 | textStyle : {
10 | color : 'white',
11 | },
12 | left : 'left'
13 | },
14 | tooltip: {
15 | show: false
16 | },
17 | series: [{
18 | type: 'wordCloud',
19 | // drawOutOfBound:true,
20 | gridSize: 1,
21 | sizeRange: [12, 55],
22 | rotationRange: [-45, 0, 45, 90],
23 | // maskImage: maskImage,
24 |
25 | //这是让词云图的颜色随机
26 | textStyle: {
27 | normal: {
28 | color: function () {
29 | return 'rgb(' +
30 | Math.round(Math.random() * 255) +
31 | ', ' + Math.round(Math.random() * 255) +
32 | ', ' + Math.round(Math.random() * 255) + ')'
33 | }
34 | }
35 | },
36 | // left: 'center',
37 | // top: 'center',
38 | // // width: '96%',
39 | // // height: '100%',
40 | right: null,
41 | bottom: null,
42 | // width: 300,
43 | // height: 200,
44 | // top: 20,
45 | data: []
46 | }]
47 | }
48 |
49 | ec_right2.setOption(ec_right2_option);
50 |
--------------------------------------------------------------------------------
/COVID-19_Tracking/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | My Page
6 |
7 |
8 |
9 | 疫情追踪
10 | 实时报道
11 |
12 |
28 |
29 |
--------------------------------------------------------------------------------
/COVID-19_Tracking/templates/main.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 疫情监控
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 全国疫情实时追踪
14 |
15 | 我是左1
16 | 我是左2
17 |
18 |
19 |
20 |
21 |
22 |
累计确诊
23 |
剩余疑似
24 |
累计治愈
25 |
累计死亡
26 |
27 | 我是中2
28 | 我是右1
29 | 我是右2
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/COVID-19_Tracking/templates/test.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
27 |
28 |
--------------------------------------------------------------------------------
/COVID-19_Tracking/utils.py:
--------------------------------------------------------------------------------
1 | import time
2 | import pymysql
3 |
4 |
5 | def get_time():
6 | time_str = time.strftime("%Y{}%m{}%d{} %X")
7 | return time_str.format("年","月","日") #因为直接写不支持直接识别中文,才用format写
8 |
9 |
10 | #return: 连接,游标
11 | def get_conn():
12 |
13 | # 创建连接
14 | conn = pymysql.connect(host="127.0.0.1",
15 | user="root",
16 | password="root",
17 | db="cov",
18 | charset="utf8")
19 | # 创建游标
20 | cursor = conn.cursor()# 执行完毕返回的结果集默认以元组显示
21 | return conn, cursor
22 |
23 |
24 | def close_conn(conn, cursor):
25 | cursor.close()
26 | conn.close()
27 |
28 | def query(sql,*args):
29 | """
30 | 封装通用查询
31 | :param sql:
32 | :param args:
33 | :return: 返回查询到的结果,((),(),)的形式
34 | """
35 | conn, cursor = get_conn()
36 | cursor.execute(sql,args)
37 | res = cursor.fetchall()
38 | close_conn(conn, cursor)
39 | return res
40 |
41 |
42 | def get_c1_data():
43 | """
44 | :return: 返回大屏div id=c1 的数据
45 | """
46 | # 因为会更新多次数据,取时间戳最新的那组数据
47 | sql = "select sum(confirm)," \
48 | "(select suspect from history order by ds desc limit 1)," \
49 | "sum(heal)," \
50 | "sum(dead) " \
51 | "from details " \
52 | "where update_time=(select update_time from details order by update_time desc limit 1) "
53 | res = query(sql)
54 | return res[0]
55 |
56 | #返回各省数据
57 | def get_c2_data():
58 | # 因为会更新多次数据,取时间戳最新的那组数据
59 | sql = "select province,sum(confirm) from details " \
60 | "where update_time=(select update_time from details " \
61 | "order by update_time desc limit 1) " \
62 | "group by province"
63 | res = query(sql)
64 | return res
65 |
66 |
67 | def get_l1_data():
68 |
69 | sql = "select ds,confirm,suspect,heal,dead from history"
70 | res = query(sql)
71 | return res
72 |
73 | def get_l2_data():
74 |
75 | sql = "select ds,confirm_add,suspect_add from history"
76 | res = query(sql)
77 | return res
78 |
79 |
80 | #返回非湖北地区城市确诊人数前5名
81 | def get_r1_data():
82 |
83 | sql = 'SELECT city,confirm FROM ' \
84 | '(select city,confirm from details ' \
85 | 'where update_time=(select update_time from details order by update_time desc limit 1) ' \
86 | 'and province not in ("湖北","北京","上海","天津","重庆","香港","台湾") ' \
87 | 'union all ' \
88 | 'select province as city,sum(confirm) as confirm from details ' \
89 | 'where update_time=(select update_time from details order by update_time desc limit 1) ' \
90 | 'and province in ("北京","上海","天津","重庆","香港","台湾") group by province) as a ' \
91 | 'ORDER BY confirm DESC LIMIT 5'
92 | res = query(sql)
93 | return res
94 |
95 | #返回最近的20条热搜
96 | def get_r2_data():
97 | sql = 'select content from hotsearch order by id desc limit 20'
98 | res = query(sql) # 格式 (('民警抗疫一线奋战16天牺牲1037364',), ('四川再派两批医疗队1537382',)
99 | return res
100 |
101 |
102 | # if __name__ == "__main__":
103 | # print(get_r2_data())
104 |
105 |
106 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # COVID-19_Tracking
2 | 基于Python+Flask+Echarts的疫情爬虫&数据可视化项目
3 | ***
4 | ## 步骤
5 | >* Python网络爬虫
6 | >* 使用Python与MySQL数据库交互
7 | >* 使用Flask构建web项目
8 | >* 基于Echarts数据可视化展示
9 | >* 在Linux上部署web项目及爬虫
10 |
11 |
12 |
13 | ## 项目环境
14 | >* Python 3.7
15 | >* MySQL 8.0.17
16 | >* Flask 1.1.1
17 | >* Linux上:
18 | >>* 阿里云 CentOS 8.0 64位
19 | >>* Python3.6
20 | >>* MySQL 8.0
21 |
22 | ## IDE
23 | > Pycharm / Vscode / Sublime
24 |
25 |
26 |
27 | ## 具体介绍及项目过程
28 | > https://blog.csdn.net/hxxjxw/article/details/105336981
29 |
30 |
31 |
32 | ## 文件说明
33 | >* app.py是flask的运行程序,整体项目也是运行它
34 | >* spider.py是爬取各种数据并存入数据库的,定时爬虫就是定时运行它
35 | >* utils.py是数据库的相关操作的封装,spider.py中会调用它的函数
36 | >* templates/中
37 | >>* index.html和test.html是写项目过程中用于测试用的,和项目运行无关,可删
38 | >>* main.html是前端页面
39 |
40 | ## 运行方式:
41 | > ### **本地win10上:**
42 | 在mysql数据库中新建cov数据库,并在其中新建3张表details,history,hotsearch——具体见博客
43 | 在utils.py和spider.py中更改get_conn函数中的数据库连接,host,user,password,db
44 | 运行spider.py爬取数据写入到mysql中
45 | 运行app.py
46 | > ### **远程主机上:**
47 | 具体配置请见博客https://blog.csdn.net/hxxjxw/article/details/105336981
48 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/.idea/lian.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
18 |
19 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 | 1583913028457
79 |
80 |
81 | 1583913028457
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "python.pythonPath": "D:\\Anaconda3\\python.exe"
3 | }
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/README.md:
--------------------------------------------------------------------------------
1 | 实现到全国疫情地图的实现
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/__pycache__/app.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skyerhxx/COVID-19_Tracking/02cb4f63ec7700d86963139c7a6781c735334387/开发过程中的版本/COVID-19_Tracking1/__pycache__/app.cpython-37.pyc
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/__pycache__/utils.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skyerhxx/COVID-19_Tracking/02cb4f63ec7700d86963139c7a6781c735334387/开发过程中的版本/COVID-19_Tracking1/__pycache__/utils.cpython-37.pyc
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from flask import render_template
3 | from flask import jsonify
4 | import utils
5 |
6 |
7 | app = Flask(__name__)
8 |
9 |
10 | @app.route('/')
11 | def hello_world():
12 | return render_template('main.html')
13 |
14 | @app.route('/c1')
15 | def get_c1_data():
16 | data = utils.get_c1_data()
17 | return jsonify({"confirm":data[0],"suspect":data[1],"heal":data[2],"dead":data[3]})
18 |
19 | @app.route('/c2')
20 | def get_c2_data():
21 | res = []
22 | for tup in utils.get_c2_data():
23 | res.append({"name":tup[0],"value":int(tup[1])})
24 | return jsonify({"data":res})
25 |
26 |
27 | @app.route('/time')
28 | def gettime():
29 | return utils.get_time()
30 |
31 |
32 | @app.route('/tem')
33 | def hello_world3():
34 | return render_template("index.html")
35 |
36 | @app.route('/ajax', methods=["get","post"])
37 | def hello_world4():
38 | return '10000'
39 |
40 | if __name__ == '__main__':
41 | app.run()
42 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/static/css/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | background: #333;
4 | }
5 |
6 | #title {
7 | position: absolute;
8 | width: 40%;
9 | height: 10%;
10 | top: 0;
11 | left: 30%;
12 | color: white;
13 | font-size: 40px;
14 |
15 | display: flex;
16 | align-items: center;
17 | justify-content: center;
18 | }
19 |
20 | #tim {
21 | position: absolute;
22 | /* width: 30%; */
23 | height: 10%;
24 | top: 5%;
25 | right: 2%;
26 | color: #FFFFFF;
27 | font-size: 20px;
28 | }
29 |
30 | #c1 {
31 | position: absolute;
32 | width: 40%;
33 | height: 30%;
34 | top: 10%;
35 | left: 30%;
36 | /* background: #777777; */
37 | }
38 |
39 | .num {
40 | width: 25%;
41 | float: left;
42 | display: flex;
43 | align-items: center;
44 | justify-content: center;
45 | color: gold;
46 | font-size: 20px;
47 | }
48 | .txt {
49 | width: 25%;
50 | float: left;
51 | font-family: "幼圆";
52 | display: flex;
53 | align-items: center;
54 | justify-content: center;
55 | font-size: 20px;
56 | color: white;
57 | }
58 |
59 | #c2 {
60 | position: absolute;
61 | width: 40%;
62 | height: 60%;
63 | top: 40%;
64 | left: 30%;
65 | background: #888888;
66 | }
67 |
68 | #l1 {
69 | position: absolute;
70 | width: 30%;
71 | height: 45%;
72 | top: 10%;
73 | left: 0%;
74 | background: #666666;
75 | }
76 |
77 | #l2 {
78 | position: absolute;
79 | width: 30%;
80 | height: 45%;
81 | top: 55%;
82 | left: 0%;
83 | background: #777777;
84 | }
85 |
86 | #r1 {
87 | position: absolute;
88 | width: 30%;
89 | height: 45%;
90 | top: 10%;
91 | right: 0%;
92 | background: #666666;
93 | }
94 |
95 | #r2 {
96 | position: absolute;
97 | width: 30%;
98 | height: 45%;
99 | top: 55%;
100 | right: 0%;
101 | background: #777777;
102 | }
103 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/static/js/controller.js:
--------------------------------------------------------------------------------
1 | function gettime() {
2 | $.ajax({
3 | url: "/time",
4 | timeout: 10000, //超时时间设置为10秒;
5 | success: function(data) {
6 | $("#tim").html(data)
7 | },
8 | error: function(xhr, type, errorThrown) {
9 | }
10 | });
11 | }
12 |
13 | function get_c1_data() {
14 | $.ajax({
15 | url: "/c1",
16 | success: function(data) {
17 | $(".num h1").eq(0).text(data.confirm);
18 | $(".num h1").eq(1).text(data.suspect);
19 | $(".num h1").eq(2).text(data.heal);
20 | $(".num h1").eq(3).text(data.dead);
21 | },
22 | error: function(xhr, type, errorThrown) {
23 | }
24 | })
25 | }
26 |
27 | function get_c2_data() {
28 | $.ajax({
29 | url:"/c2",
30 | success: function(data) {
31 | ec_center_option.series[0].data=data.data
32 | ec_center.setOption(ec_center_option)
33 | },
34 | error: function(xhr, type, errorThrown) {
35 |
36 | }
37 | })
38 | }
39 |
40 | gettime()
41 | get_c1_data()
42 | get_c2_data()
43 | // setInterval(gettime,1000)
44 | // setInterval(get_c1_data,1000)
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/static/js/ec_center.js:
--------------------------------------------------------------------------------
1 | var ec_center = echarts.init(document.getElementById('c2'), "dark");
2 |
3 | var mydata = [{'name': '上海', 'value': 318}, {'name': '云南', 'value': 162}]
4 |
5 | var ec_center_option = {
6 | title: {
7 | text: '',
8 | subtext: '',
9 | x: 'left'
10 | },
11 | tooltip: {
12 | trigger: 'item'
13 | },
14 | //左侧小导航图标
15 | visualMap: {
16 | show: true,
17 | x: 'left',
18 | y: 'bottom',
19 | textStyle: {
20 | fontSize: 8,
21 | },
22 | splitList: [{ start: 1,end: 9 },
23 | {start: 10, end: 99 },
24 | { start: 100, end: 999 },
25 | { start: 1000, end: 9999 },
26 | { start: 10000 }],
27 | color: ['#8A3310', '#C64918', '#E55B25', '#F2AD92', '#F9DCD1']
28 | },
29 | //配置属性
30 | series: [{
31 | name: '累计确诊人数',
32 | type: 'map',
33 | mapType: 'china',
34 | roam: false, //拖动和缩放
35 | itemStyle: {
36 | normal: {
37 | borderWidth: .5, //区域边框宽度
38 | borderColor: '#009fe8', //区域边框颜色
39 | areaColor: "#ffefd5", //区域颜色
40 | },
41 | emphasis: { //鼠标滑过地图高亮的相关设置
42 | borderWidth: .5,
43 | borderColor: '#4b0082',
44 | areaColor: "#fff",
45 | }
46 | },
47 | label: {
48 | normal: {
49 | show: true, //省份名称
50 | fontSize: 8,
51 | },
52 | emphasis: {
53 | show: true,
54 | fontSize: 8,
55 | }
56 | },
57 | // data:[] //mydata //数据
58 | data:mydata
59 | }]
60 | };
61 | ec_center.setOption(ec_center_option)
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | My Page
6 |
7 |
8 |
9 | 疫情追踪
10 | 实时报道
11 |
12 |
28 |
29 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/templates/main.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 疫情监控
6 |
7 |
8 |
9 |
10 |
11 |
12 | 全国疫情实时追踪
13 | 我是时间
14 | 我是左1
15 | 我是左2
16 |
17 |
123
18 |
123
19 |
123
20 |
123
21 |
累计确诊
22 |
剩余疑似
23 |
累计治愈
24 |
累计死亡
25 |
26 | 我是中2
27 | 我是右1
28 | 我是右2
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/templates/test.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
27 |
28 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/utils.py:
--------------------------------------------------------------------------------
1 | import time
2 | import pymysql
3 |
4 |
5 | def get_time():
6 | time_str = time.strftime("%Y{}%m{}%d{} %X")
7 | return time_str.format("年","月","日") #因为直接写不支持直接识别中文,才用format写
8 |
9 |
10 | #return: 连接,游标
11 | def get_conn():
12 |
13 | # 创建连接
14 | conn = pymysql.connect(host="127.0.0.1",
15 | user="root",
16 | password="root",
17 | db="cov",
18 | charset="utf8")
19 | # 创建游标
20 | cursor = conn.cursor()# 执行完毕返回的结果集默认以元组显示
21 | return conn, cursor
22 |
23 |
24 | def close_conn(conn, cursor):
25 | cursor.close()
26 | conn.close()
27 |
28 | def query(sql,*args):
29 | """
30 | 封装通用查询
31 | :param sql:
32 | :param args:
33 | :return: 返回查询到的结果,((),(),)的形式
34 | """
35 | conn, cursor = get_conn()
36 | cursor.execute(sql,args)
37 | res = cursor.fetchall()
38 | close_conn(conn, cursor)
39 | return res
40 |
41 |
42 | def get_c1_data():
43 | """
44 | :return: 返回大屏div id=c1 的数据
45 | """
46 | # 因为会更新多次数据,取时间戳最新的那组数据
47 | sql = "select sum(confirm)," \
48 | "(select suspect from history order by ds desc limit 1)," \
49 | "sum(heal)," \
50 | "sum(dead) " \
51 | "from details " \
52 | "where update_time=(select update_time from details order by update_time desc limit 1) "
53 | res = query(sql)
54 | return res[0]
55 |
56 | #返回各省数据
57 | def get_c2_data():
58 | # 因为会更新多次数据,取时间戳最新的那组数据
59 | sql = "select province,sum(confirm) from details " \
60 | "where update_time=(select update_time from details " \
61 | "order by update_time desc limit 1) " \
62 | "group by province"
63 | res = query(sql)
64 | return res
65 |
66 |
67 |
68 |
69 | # if __name__ == "__main__":
70 | # print(get_c1_data())
71 |
72 |
73 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/zong.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import json
3 | import time
4 | import pymysql
5 | from selenium.webdriver import Chrome,ChromeOptions
6 |
7 |
8 | #返回历史数据和当日详细数据
9 | def get_tencent_data():
10 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
11 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other"
12 | headers = {
13 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
14 | }
15 | r1 = requests.get(url1, headers)
16 | r2 = requests.get(url2, headers)
17 |
18 | #json字符串转字典
19 | res1 = json.loads(r1.text)
20 | res2 = json.loads(r2.text)
21 |
22 | data_all1 = json.loads(res1["data"])
23 | data_all2 = json.loads(res2["data"])
24 |
25 | #历史数据
26 | history = {}
27 | for i in data_all2["chinaDayList"]:
28 | ds = "2020." + i["date"]
29 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
30 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
31 | confirm = i["confirm"]
32 | suspect = i["suspect"]
33 | heal = i["heal"]
34 | dead = i["dead"]
35 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead}
36 | for i in data_all2["chinaDayAddList"]:
37 | ds = "2020." + i["date"]
38 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
39 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
40 | confirm = i["confirm"]
41 | suspect = i["suspect"]
42 | heal = i["heal"]
43 | dead = i["dead"]
44 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead})
45 |
46 | #当日详细数据
47 | details = []
48 | update_time = data_all1["lastUpdateTime"]
49 | data_country = data_all1["areaTree"] #list 25个国家
50 | data_province = data_country[0]["children"] #中国各省
51 | for pro_infos in data_province:
52 | province = pro_infos["name"] #省名
53 | for city_infos in pro_infos["children"]:
54 | city = city_infos["name"]
55 | confirm = city_infos["total"]["confirm"]
56 | confirm_add = city_infos["today"]["confirm"]
57 | heal = city_infos["total"]["heal"]
58 | dead = city_infos["total"]["dead"]
59 | details.append([update_time, province, city, confirm, confirm_add, heal, dead])
60 | return history, details
61 |
62 |
63 | def get_conn():
64 | #建立连接
65 | conn = pymysql.connect(host="127.0.0.1", user="root", password="root", db="cov", charset="utf8")
66 | #创建游标
67 | cursor = conn.cursor()
68 | return conn,cursor
69 |
70 | def close_conn(conn,cursor):
71 | if cursor:
72 | cursor.close()
73 | if conn:
74 | conn.close()
75 |
76 | #插入details数据
77 | def update_details():
78 | cursor = None
79 | conn = None
80 | try:
81 | li = get_tencent_data()[1] #0是历史数据,1是当日详细数据
82 | conn,cursor = get_conn()
83 | sql = "insert into details(update_time,province,city,confirm,confirm_add,heal,dead) values(%s,%s,%s,%s,%s,%s,%s)"
84 | sql_query = "select %s=(select update_time from details order by id desc limit 1)" #对比当前最大时间戳
85 | #对比当前最大时间戳
86 | cursor.execute(sql_query,li[0][0])
87 | if not cursor.fetchone()[0]:
88 | print(f"{time.asctime()}开始更新数据")
89 | for item in li:
90 | cursor.execute(sql,item)
91 | conn.commit()
92 | print(f"{time.asctime()}更新到最新数据")
93 | else:
94 | print(f"{time.asctime()}已是最新数据!")
95 | except:
96 | traceback.print_exc()
97 | finally:
98 | close_conn(conn,cursor)
99 |
100 |
101 | #插入history数据
102 | def insert_history():
103 | cursor = None
104 | conn = None
105 | try:
106 | dic = get_tencent_data()[0]#0代表历史数据字典
107 | print(f"{time.asctime()}开始插入历史数据")
108 | conn,cursor = get_conn()
109 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)"
110 | for k,v in dic.items():
111 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"),
112 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"),
113 | v.get("dead"),v.get("dead_add")])
114 | conn.commit()
115 | print(f"{time.asctime()}插入历史数据完毕")
116 | except:
117 | traceback.print_exc()
118 | finally:
119 | close_conn(conn,cursor)
120 |
121 |
122 | #更新历史数据
123 | def update_history():
124 | cursor = None
125 | conn = None
126 | try:
127 | dic = get_tencent_data()[0]#0代表历史数据字典
128 | print(f"{time.asctime()}开始更新历史数据")
129 | conn,cursor = get_conn()
130 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)"
131 | sql_query = "select confirm from history where ds=%s"
132 | for k,v in dic.items():
133 | if not cursor.execute(sql_query,k):
134 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"),
135 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"),
136 | v.get("dead"),v.get("dead_add")])
137 | conn.commit()
138 | print(f"{time.asctime()}历史数据更新完毕")
139 | except:
140 | traceback.print_exc()
141 | finally:
142 | close_conn(conn,cursor)
143 |
144 |
145 | #返回百度疫情热搜
146 | def get_baidu_hot():
147 | option = ChromeOptions() #创建谷歌浏览器实例
148 | option.add_argument("--headless")#隐藏浏览器
149 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样
150 |
151 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1'
152 | brower = Chrome(options = option)
153 | brower.get(url)
154 | #找到展开按钮
155 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮
156 | but.click() #点击展开
157 |
158 | time.sleep(1)#爬虫与反爬,模拟人等待1秒
159 |
160 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]')
161 | context = [i.text for i in c] #获取标签内容
162 | print(context)
163 | return context
164 |
165 |
166 | #将疫情热搜插入数据库
167 | def update_hotsearch():
168 | cursor = None
169 | conn = None
170 | try:
171 | context = get_baidu_hot()
172 | print(f"{time.asctime()}开始更新热搜数据")
173 | conn, cursor = get_conn()
174 | sql = "insert into hotsearch(dt,content) values(%s,%s)"
175 | ts = time.strftime("%Y-%m-%d %X")
176 | for i in context:
177 | cursor.execute(sql,(ts,i)) #插入数据
178 | conn.commit() #提交事务保存数据
179 | print(f"{time.asctime()}数据更新完毕")
180 | except:
181 | traceback.print_exc()
182 | finally:
183 | close_conn(conn,cursor)
184 |
185 |
186 |
187 |
188 | # his,de = get_tencent_data()
189 | # print(his)
190 | # print(de)
191 |
192 | insert_history()
193 | update_details()
194 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/爬取并处理腾讯疫情数据.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import json
3 | import time
4 |
5 | #返回历史数据和当日详细数据
6 | def get_tencent_data():
7 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
8 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other"
9 | headers = {
10 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
11 | }
12 | r1 = requests.get(url1, headers)
13 | r2 = requests.get(url2, headers)
14 |
15 | #json字符串转字典
16 | res1 = json.loads(r1.text)
17 | res2 = json.loads(r2.text)
18 |
19 | data_all1 = json.loads(res1["data"])
20 | data_all2 = json.loads(res2["data"])
21 |
22 | #历史数据
23 | history = {}
24 | for i in data_all2["chinaDayList"]:
25 | ds = "2020." + i["date"]
26 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
27 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
28 | confirm = i["confirm"]
29 | suspect = i["suspect"]
30 | heal = i["heal"]
31 | dead = i["dead"]
32 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead}
33 | for i in data_all2["chinaDayAddList"]:
34 | ds = "2020." + i["date"]
35 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
36 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
37 | confirm = i["confirm"]
38 | suspect = i["suspect"]
39 | heal = i["heal"]
40 | dead = i["dead"]
41 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead})
42 |
43 | #当日详细数据
44 | details = []
45 | update_time = data_all1["lastUpdateTime"]
46 | data_country = data_all1["areaTree"] #list 25个国家
47 | data_province = data_country[0]["children"] #中国各省
48 | for pro_infos in data_province:
49 | province = pro_infos["name"] #省名
50 | for city_infos in pro_infos["children"]:
51 | city = city_infos["name"]
52 | confirm = city_infos["total"]["confirm"]
53 | confirm_add = city_infos["today"]["confirm"]
54 | heal = city_infos["total"]["heal"]
55 | dead = city_infos["total"]["dead"]
56 | details.append([update_time, province, city, confirm, confirm_add, heal, dead])
57 | return history, details
58 |
59 |
60 |
61 |
62 |
63 | his,de = get_tencent_data()
64 | print(his)
65 | print(de)
66 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking1/爬取百度热搜.py:
--------------------------------------------------------------------------------
1 | from selenium.webdriver import Chrome,ChromeOptions
2 | import time
3 |
4 | option = ChromeOptions()
5 | option.add_argument("--headless")#隐藏浏览器
6 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样
7 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1'
8 |
9 | brower = Chrome(options = option)
10 | #brower = Chrome()
11 | brower.get(url)
12 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮
13 | but.click() #点击展开
14 |
15 |
16 | time.sleep(1)#爬虫与反爬,模拟人等待1秒
17 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]')
18 | for i in c:
19 | print(i.text)
20 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/.idea/lian.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 | 1583913028457
79 |
80 |
81 | 1583913028457
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "python.pythonPath": "D:\\Anaconda3\\python.exe"
3 | }
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/README.md:
--------------------------------------------------------------------------------
1 | 实现到全国累计和新增趋势的实现
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/__pycache__/app.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skyerhxx/COVID-19_Tracking/02cb4f63ec7700d86963139c7a6781c735334387/开发过程中的版本/COVID-19_Tracking2/__pycache__/app.cpython-37.pyc
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/__pycache__/utils.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skyerhxx/COVID-19_Tracking/02cb4f63ec7700d86963139c7a6781c735334387/开发过程中的版本/COVID-19_Tracking2/__pycache__/utils.cpython-37.pyc
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from flask import render_template
3 | from flask import jsonify
4 | import utils
5 |
6 |
7 | app = Flask(__name__)
8 |
9 |
10 | @app.route('/')
11 | def hello_world():
12 | return render_template('main.html')
13 |
14 | @app.route('/c1')
15 | def get_c1_data():
16 | data = utils.get_c1_data()
17 | return jsonify({"confirm":data[0],"suspect":data[1],"heal":data[2],"dead":data[3]})
18 |
19 | @app.route('/c2')
20 | def get_c2_data():
21 | res = []
22 | for tup in utils.get_c2_data():
23 | res.append({"name":tup[0],"value":int(tup[1])})
24 | return jsonify({"data":res})
25 |
26 |
27 | @app.route("/l1")
28 | def get_l1_data():
29 | data = utils.get_l1_data()
30 | day,confirm,suspect,heal,dead = [],[],[],[],[]
31 | for a,b,c,d,e in data[7:]: #很多卫健委网站前7天都是没有数据的,所以把前7天砍掉了
32 | day.append(a.strftime("%m-%d")) #a是datatime类型
33 | confirm.append(b)
34 | suspect.append(c)
35 | heal.append(d)
36 | dead.append(e)
37 | return jsonify({"day":day,"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead})
38 |
39 | @app.route("/l2")
40 | def get_l2_data():
41 | data = utils.get_l2_data()
42 | day, confirm_add, suspect_add = [], [], []
43 | for a, b, c in data[7:]:
44 | day.append(a.strftime("%m-%d")) # a是datatime类型
45 | confirm_add.append(b)
46 | suspect_add.append(c)
47 | return jsonify({"day": day, "confirm_add": confirm_add, "suspect_add": suspect_add})
48 |
49 |
50 |
51 | @app.route('/time')
52 | def gettime():
53 | return utils.get_time()
54 |
55 |
56 | @app.route('/tem')
57 | def hello_world3():
58 | return render_template("index.html")
59 |
60 | @app.route('/ajax', methods=["get","post"])
61 | def hello_world4():
62 | return '10000'
63 |
64 | if __name__ == '__main__':
65 | app.run()
66 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/static/css/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | background: #333;
4 | }
5 |
6 | #title {
7 | position: absolute;
8 | width: 40%;
9 | height: 10%;
10 | top: 0;
11 | left: 30%;
12 | color: white;
13 | font-size: 40px;
14 |
15 | display: flex;
16 | align-items: center;
17 | justify-content: center;
18 | }
19 |
20 | #tim {
21 | position: absolute;
22 | /* width: 30%; */
23 | height: 10%;
24 | top: 5%;
25 | right: 2%;
26 | color: #FFFFFF;
27 | font-size: 20px;
28 | }
29 |
30 | #c1 {
31 | position: absolute;
32 | width: 40%;
33 | height: 30%;
34 | top: 10%;
35 | left: 30%;
36 | /* background: #777777; */
37 | }
38 |
39 | .num {
40 | width: 25%;
41 | float: left;
42 | display: flex;
43 | align-items: center;
44 | justify-content: center;
45 | color: gold;
46 | font-size: 20px;
47 | }
48 | .txt {
49 | width: 25%;
50 | float: left;
51 | font-family: "幼圆";
52 | display: flex;
53 | align-items: center;
54 | justify-content: center;
55 | font-size: 20px;
56 | color: white;
57 | }
58 |
59 | #c2 {
60 | position: absolute;
61 | width: 40%;
62 | height: 60%;
63 | top: 40%;
64 | left: 30%;
65 | background: #888888;
66 | }
67 |
68 | #l1 {
69 | position: absolute;
70 | width: 30%;
71 | height: 45%;
72 | top: 10%;
73 | left: 0%;
74 | background: #666666;
75 | }
76 |
77 | #l2 {
78 | position: absolute;
79 | width: 30%;
80 | height: 45%;
81 | top: 55%;
82 | left: 0%;
83 | background: #777777;
84 | }
85 |
86 | #r1 {
87 | position: absolute;
88 | width: 30%;
89 | height: 45%;
90 | top: 10%;
91 | right: 0%;
92 | background: #666666;
93 | }
94 |
95 | #r2 {
96 | position: absolute;
97 | width: 30%;
98 | height: 45%;
99 | top: 55%;
100 | right: 0%;
101 | background: #777777;
102 | }
103 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/static/js/controller.js:
--------------------------------------------------------------------------------
1 | function gettime() {
2 | $.ajax({
3 | url: "/time",
4 | timeout: 10000, //超时时间设置为10秒;
5 | success: function(data) {
6 | $("#tim").html(data)
7 | },
8 | error: function(xhr, type, errorThrown) {
9 | }
10 | });
11 | }
12 |
13 | function get_c1_data() {
14 | $.ajax({
15 | url: "/c1",
16 | success: function(data) {
17 | $(".num h1").eq(0).text(data.confirm);
18 | $(".num h1").eq(1).text(data.suspect);
19 | $(".num h1").eq(2).text(data.heal);
20 | $(".num h1").eq(3).text(data.dead);
21 | },
22 | error: function(xhr, type, errorThrown) {
23 | }
24 | })
25 | }
26 |
27 | function get_c2_data() {
28 | $.ajax({
29 | url:"/c2",
30 | success: function(data) {
31 | ec_center_option.series[0].data=data.data
32 | ec_center.setOption(ec_center_option)
33 | },
34 | error: function(xhr, type, errorThrown) {
35 |
36 | }
37 | })
38 | }
39 |
40 | function get_l1_data() {
41 | $.ajax({
42 | url:"/l1",
43 | success: function(data) {
44 | ec_left1_Option.xAxis[0].data=data.day
45 | ec_left1_Option.series[0].data=data.confirm
46 | ec_left1_Option.series[1].data=data.suspect
47 | ec_left1_Option.series[2].data=data.heal
48 | ec_left1_Option.series[3].data=data.dead
49 | ec_left1.setOption(ec_left1_Option)
50 | },
51 | error: function(xhr, type, errorThrown) {
52 |
53 | }
54 | })
55 | }
56 |
57 | function get_l2_data() {
58 | $.ajax({
59 | url:"/l2",
60 | success: function(data) {
61 | ec_left2_Option.xAxis[0].data=data.day
62 | ec_left2_Option.series[0].data=data.confirm_add
63 | ec_left2_Option.series[1].data=data.suspect_add
64 | ec_left2.setOption(ec_left2_Option)
65 | },
66 | error: function(xhr, type, errorThrown) {
67 | }
68 | })
69 | }
70 |
71 |
72 |
73 | gettime()
74 | get_c1_data()
75 | get_c2_data()
76 | get_l1_data()
77 | get_l2_data()
78 | // setInterval(gettime,1000)
79 | // setInterval(get_c1_data,1000)
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/static/js/ec_center.js:
--------------------------------------------------------------------------------
1 | var ec_center = echarts.init(document.getElementById('c2'), "dark");
2 |
3 | var mydata = [{'name': '上海', 'value': 318}, {'name': '云南', 'value': 162}]
4 |
5 | var ec_center_option = {
6 | title: {
7 | text: '',
8 | subtext: '',
9 | x: 'left'
10 | },
11 | tooltip: {
12 | trigger: 'item'
13 | },
14 | //左侧小导航图标
15 | visualMap: {
16 | show: true,
17 | x: 'left',
18 | y: 'bottom',
19 | textStyle: {
20 | fontSize: 8,
21 | },
22 | splitList: [{ start: 1,end: 9 },
23 | {start: 10, end: 99 },
24 | { start: 100, end: 999 },
25 | { start: 1000, end: 9999 },
26 | { start: 10000 }],
27 | color: ['#8A3310', '#C64918', '#E55B25', '#F2AD92', '#F9DCD1']
28 | },
29 | //配置属性
30 | series: [{
31 | name: '累计确诊人数',
32 | type: 'map',
33 | mapType: 'china',
34 | roam: false, //拖动和缩放
35 | itemStyle: {
36 | normal: {
37 | borderWidth: .5, //区域边框宽度
38 | borderColor: '#009fe8', //区域边框颜色
39 | areaColor: "#ffefd5", //区域颜色
40 | },
41 | emphasis: { //鼠标滑过地图高亮的相关设置
42 | borderWidth: .5,
43 | borderColor: '#4b0082',
44 | areaColor: "#fff",
45 | }
46 | },
47 | label: {
48 | normal: {
49 | show: true, //省份名称
50 | fontSize: 8,
51 | },
52 | emphasis: {
53 | show: true,
54 | fontSize: 8,
55 | }
56 | },
57 | // data:[] //mydata //数据
58 | data:mydata
59 | }]
60 | };
61 | ec_center.setOption(ec_center_option)
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/static/js/ec_left1.js:
--------------------------------------------------------------------------------
1 | var ec_left1 = echarts.init(document.getElementById('l1'), "dark");
2 |
3 | var ec_left1_Option = {
4 | //标题样式
5 | title: {
6 | text: "全国累计趋势",
7 | textStyle: {
8 | // color: 'white',
9 | },
10 | left: 'left',
11 | },
12 | tooltip: {
13 | trigger: 'axis',
14 | //指示器
15 | axisPointer: {
16 | type: 'line',
17 | lineStyle: {
18 | color: '#7171C6'
19 | }
20 | },
21 | },
22 | legend: {
23 | data: ['累计确诊', '现有疑似', "累计治愈", "累计死亡"],
24 | left: "right"
25 | },
26 |
27 | //图形位置
28 | grid: {
29 | left: '4%',
30 | right: '6%',
31 | bottom: '4%',
32 | top: 50,
33 | containLabel: true
34 | },
35 | xAxis: [{
36 | type: 'category',
37 | //x轴坐标点开始与结束点位置都不在最边缘
38 | // boundaryGap : true,
39 | data: []//
40 | // data: ['01.20', '01.21', '01.22']
41 | }],
42 | yAxis: [{
43 | type: 'value',
44 | //y轴字体设置
45 | axisLabel: {
46 | show: true,
47 | color: 'white',
48 | fontSize: 12,
49 | formatter: function(value) {
50 | if (value >= 1000) {
51 | value = value / 1000 + 'k';
52 | }
53 | return value;
54 | }
55 | },
56 | //y轴线设置显示
57 | axisLine: {
58 | show: true
59 | },
60 | //与x轴平行的线样式
61 | splitLine: {
62 | show: true,
63 | lineStyle: {
64 | color: '#17273B',
65 | width: 1,
66 | type: 'solid',
67 | }
68 | }
69 | }],
70 | series: [{
71 | name: "累计确诊",
72 | type: 'line',
73 | smooth: true,
74 | data: []//[260, 406, 529]
75 | }, {
76 | name: "现有疑似",
77 | type: 'line',
78 | smooth: true,
79 | data: []//[54, 37, 3935]
80 | },
81 | {
82 | name: "累计治愈",
83 | type: 'line',
84 | smooth: true,
85 | data: []//[25, 25, 25]
86 | }, {
87 | name: "累计死亡",
88 | type: 'line',
89 | smooth: true,
90 | data: []//[6, 9, 17]
91 | }]
92 | };
93 |
94 | ec_left1.setOption(ec_left1_Option)
95 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/static/js/ec_left2.js:
--------------------------------------------------------------------------------
1 | var ec_left2 = echarts.init(document.getElementById('l2'), "dark");
2 | var ec_left2_Option = {
3 | tooltip: {
4 | trigger: 'axis',
5 | //指示器
6 | axisPointer: {
7 | type: 'line',
8 | lineStyle: {
9 | color: '#7171C6'
10 | }
11 | },
12 | },
13 | legend: {
14 | data: ['新增确诊', '新增疑似'],
15 | left: "right"
16 | },
17 | //标题样式
18 | title: {
19 | text: "全国新增趋势",
20 | textStyle: {
21 | color: 'white',
22 | },
23 | left: 'left'
24 | },
25 | //图形位置
26 | grid: {
27 | left: '4%',
28 | right: '6%',
29 | bottom: '4%',
30 | top: 50,
31 | containLabel: true
32 | },
33 | xAxis: [{
34 | type: 'category',
35 | //x轴坐标点开始与结束点位置都不在最边缘
36 | // boundaryGap : true,
37 |
38 | data: []
39 | }],
40 | yAxis: [{
41 | type: 'value',
42 | //y轴字体设置
43 |
44 | //y轴线设置显示
45 | axisLine: {
46 | show: true
47 | },
48 | axisLabel: {
49 | show: true,
50 | color: 'white',
51 | fontSize: 12,
52 | formatter: function(value) {
53 | if (value >= 1000) {
54 | value = value / 1000 + 'k';
55 | }
56 | return value;
57 | }
58 | },
59 | //与x轴平行的线样式
60 | splitLine: {
61 | show: true,
62 | lineStyle: {
63 | color: '#17273B',
64 | width: 1,
65 | type: 'solid',
66 | }
67 | }
68 | }],
69 | series: [{
70 | name: "新增确诊",
71 | type: 'line',
72 | smooth: true,
73 | data: []
74 | }, {
75 | name: "新增疑似",
76 | type: 'line',
77 | smooth: true,
78 | data: []
79 | }]
80 | };
81 |
82 | ec_left2.setOption(ec_left2_Option)
83 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | My Page
6 |
7 |
8 |
9 | 疫情追踪
10 | 实时报道
11 |
12 |
28 |
29 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/templates/main.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 疫情监控
6 |
7 |
8 |
9 |
10 |
11 |
12 | 全国疫情实时追踪
13 | 我是时间
14 | 我是左1
15 | 我是左2
16 |
17 |
123
18 |
123
19 |
123
20 |
123
21 |
累计确诊
22 |
剩余疑似
23 |
累计治愈
24 |
累计死亡
25 |
26 | 我是中2
27 | 我是右1
28 | 我是右2
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/templates/test.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
27 |
28 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/utils.py:
--------------------------------------------------------------------------------
1 | import time
2 | import pymysql
3 |
4 |
5 | def get_time():
6 | time_str = time.strftime("%Y{}%m{}%d{} %X")
7 | return time_str.format("年","月","日") #因为直接写不支持直接识别中文,才用format写
8 |
9 |
10 | #return: 连接,游标
11 | def get_conn():
12 |
13 | # 创建连接
14 | conn = pymysql.connect(host="127.0.0.1",
15 | user="root",
16 | password="root",
17 | db="cov",
18 | charset="utf8")
19 | # 创建游标
20 | cursor = conn.cursor()# 执行完毕返回的结果集默认以元组显示
21 | return conn, cursor
22 |
23 |
24 | def close_conn(conn, cursor):
25 | cursor.close()
26 | conn.close()
27 |
28 | def query(sql,*args):
29 | """
30 | 封装通用查询
31 | :param sql:
32 | :param args:
33 | :return: 返回查询到的结果,((),(),)的形式
34 | """
35 | conn, cursor = get_conn()
36 | cursor.execute(sql,args)
37 | res = cursor.fetchall()
38 | close_conn(conn, cursor)
39 | return res
40 |
41 |
42 | def get_c1_data():
43 | """
44 | :return: 返回大屏div id=c1 的数据
45 | """
46 | # 因为会更新多次数据,取时间戳最新的那组数据
47 | sql = "select sum(confirm)," \
48 | "(select suspect from history order by ds desc limit 1)," \
49 | "sum(heal)," \
50 | "sum(dead) " \
51 | "from details " \
52 | "where update_time=(select update_time from details order by update_time desc limit 1) "
53 | res = query(sql)
54 | return res[0]
55 |
56 | #返回各省数据
57 | def get_c2_data():
58 | # 因为会更新多次数据,取时间戳最新的那组数据
59 | sql = "select province,sum(confirm) from details " \
60 | "where update_time=(select update_time from details " \
61 | "order by update_time desc limit 1) " \
62 | "group by province"
63 | res = query(sql)
64 | return res
65 |
66 |
67 | def get_l1_data():
68 |
69 | sql = "select ds,confirm,suspect,heal,dead from history"
70 | res = query(sql)
71 | return res
72 |
73 | def get_l2_data():
74 |
75 | sql = "select ds,confirm_add,suspect_add from history"
76 | res = query(sql)
77 | return res
78 |
79 | # if __name__ == "__main__":
80 | # print(get_l1_data())
81 |
82 |
83 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/zong.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import json
3 | import time
4 | import pymysql
5 | from selenium.webdriver import Chrome,ChromeOptions
6 |
7 |
8 | #返回历史数据和当日详细数据
9 | def get_tencent_data():
10 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
11 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other"
12 | headers = {
13 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
14 | }
15 | r1 = requests.get(url1, headers)
16 | r2 = requests.get(url2, headers)
17 |
18 | #json字符串转字典
19 | res1 = json.loads(r1.text)
20 | res2 = json.loads(r2.text)
21 |
22 | data_all1 = json.loads(res1["data"])
23 | data_all2 = json.loads(res2["data"])
24 |
25 | #历史数据
26 | history = {}
27 | for i in data_all2["chinaDayList"]:
28 | ds = "2020." + i["date"]
29 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
30 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
31 | confirm = i["confirm"]
32 | suspect = i["suspect"]
33 | heal = i["heal"]
34 | dead = i["dead"]
35 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead}
36 | for i in data_all2["chinaDayAddList"]:
37 | ds = "2020." + i["date"]
38 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
39 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
40 | confirm = i["confirm"]
41 | suspect = i["suspect"]
42 | heal = i["heal"]
43 | dead = i["dead"]
44 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead})
45 |
46 | #当日详细数据
47 | details = []
48 | update_time = data_all1["lastUpdateTime"]
49 | data_country = data_all1["areaTree"] #list 25个国家
50 | data_province = data_country[0]["children"] #中国各省
51 | for pro_infos in data_province:
52 | province = pro_infos["name"] #省名
53 | for city_infos in pro_infos["children"]:
54 | city = city_infos["name"]
55 | confirm = city_infos["total"]["confirm"]
56 | confirm_add = city_infos["today"]["confirm"]
57 | heal = city_infos["total"]["heal"]
58 | dead = city_infos["total"]["dead"]
59 | details.append([update_time, province, city, confirm, confirm_add, heal, dead])
60 | return history, details
61 |
62 |
63 | def get_conn():
64 | #建立连接
65 | conn = pymysql.connect(host="127.0.0.1", user="root", password="root", db="cov", charset="utf8")
66 | #创建游标
67 | cursor = conn.cursor()
68 | return conn,cursor
69 |
70 | def close_conn(conn,cursor):
71 | if cursor:
72 | cursor.close()
73 | if conn:
74 | conn.close()
75 |
76 | #插入details数据
77 | def update_details():
78 | cursor = None
79 | conn = None
80 | try:
81 | li = get_tencent_data()[1] #0是历史数据,1是当日详细数据
82 | conn,cursor = get_conn()
83 | sql = "insert into details(update_time,province,city,confirm,confirm_add,heal,dead) values(%s,%s,%s,%s,%s,%s,%s)"
84 | sql_query = "select %s=(select update_time from details order by id desc limit 1)" #对比当前最大时间戳
85 | #对比当前最大时间戳
86 | cursor.execute(sql_query,li[0][0])
87 | if not cursor.fetchone()[0]:
88 | print(f"{time.asctime()}开始更新数据")
89 | for item in li:
90 | cursor.execute(sql,item)
91 | conn.commit()
92 | print(f"{time.asctime()}更新到最新数据")
93 | else:
94 | print(f"{time.asctime()}已是最新数据!")
95 | except:
96 | traceback.print_exc()
97 | finally:
98 | close_conn(conn,cursor)
99 |
100 |
101 | #插入history数据
102 | def insert_history():
103 | cursor = None
104 | conn = None
105 | try:
106 | dic = get_tencent_data()[0]#0代表历史数据字典
107 | print(f"{time.asctime()}开始插入历史数据")
108 | conn,cursor = get_conn()
109 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)"
110 | for k,v in dic.items():
111 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"),
112 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"),
113 | v.get("dead"),v.get("dead_add")])
114 | conn.commit()
115 | print(f"{time.asctime()}插入历史数据完毕")
116 | except:
117 | traceback.print_exc()
118 | finally:
119 | close_conn(conn,cursor)
120 |
121 |
122 | #更新历史数据
123 | def update_history():
124 | cursor = None
125 | conn = None
126 | try:
127 | dic = get_tencent_data()[0]#0代表历史数据字典
128 | print(f"{time.asctime()}开始更新历史数据")
129 | conn,cursor = get_conn()
130 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)"
131 | sql_query = "select confirm from history where ds=%s"
132 | for k,v in dic.items():
133 | if not cursor.execute(sql_query,k):
134 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"),
135 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"),
136 | v.get("dead"),v.get("dead_add")])
137 | conn.commit()
138 | print(f"{time.asctime()}历史数据更新完毕")
139 | except:
140 | traceback.print_exc()
141 | finally:
142 | close_conn(conn,cursor)
143 |
144 |
145 | #返回百度疫情热搜
146 | def get_baidu_hot():
147 | option = ChromeOptions() #创建谷歌浏览器实例
148 | option.add_argument("--headless")#隐藏浏览器
149 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样
150 |
151 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1'
152 | brower = Chrome(options = option)
153 | brower.get(url)
154 | #找到展开按钮
155 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮
156 | but.click() #点击展开
157 |
158 | time.sleep(1)#爬虫与反爬,模拟人等待1秒
159 |
160 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]')
161 | context = [i.text for i in c] #获取标签内容
162 | print(context)
163 | return context
164 |
165 |
166 | #将疫情热搜插入数据库
167 | def update_hotsearch():
168 | cursor = None
169 | conn = None
170 | try:
171 | context = get_baidu_hot()
172 | print(f"{time.asctime()}开始更新热搜数据")
173 | conn, cursor = get_conn()
174 | sql = "insert into hotsearch(dt,content) values(%s,%s)"
175 | ts = time.strftime("%Y-%m-%d %X")
176 | for i in context:
177 | cursor.execute(sql,(ts,i)) #插入数据
178 | conn.commit() #提交事务保存数据
179 | print(f"{time.asctime()}数据更新完毕")
180 | except:
181 | traceback.print_exc()
182 | finally:
183 | close_conn(conn,cursor)
184 |
185 |
186 |
187 |
188 | # his,de = get_tencent_data()
189 | # print(his)
190 | # print(de)
191 |
192 | insert_history()
193 | update_details()
194 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/爬取并处理腾讯疫情数据.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import json
3 | import time
4 |
5 | #返回历史数据和当日详细数据
6 | def get_tencent_data():
7 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
8 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other"
9 | headers = {
10 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
11 | }
12 | r1 = requests.get(url1, headers)
13 | r2 = requests.get(url2, headers)
14 |
15 | #json字符串转字典
16 | res1 = json.loads(r1.text)
17 | res2 = json.loads(r2.text)
18 |
19 | data_all1 = json.loads(res1["data"])
20 | data_all2 = json.loads(res2["data"])
21 |
22 | #历史数据
23 | history = {}
24 | for i in data_all2["chinaDayList"]:
25 | ds = "2020." + i["date"]
26 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
27 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
28 | confirm = i["confirm"]
29 | suspect = i["suspect"]
30 | heal = i["heal"]
31 | dead = i["dead"]
32 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead}
33 | for i in data_all2["chinaDayAddList"]:
34 | ds = "2020." + i["date"]
35 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
36 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
37 | confirm = i["confirm"]
38 | suspect = i["suspect"]
39 | heal = i["heal"]
40 | dead = i["dead"]
41 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead})
42 |
43 | #当日详细数据
44 | details = []
45 | update_time = data_all1["lastUpdateTime"]
46 | data_country = data_all1["areaTree"] #list 25个国家
47 | data_province = data_country[0]["children"] #中国各省
48 | for pro_infos in data_province:
49 | province = pro_infos["name"] #省名
50 | for city_infos in pro_infos["children"]:
51 | city = city_infos["name"]
52 | confirm = city_infos["total"]["confirm"]
53 | confirm_add = city_infos["today"]["confirm"]
54 | heal = city_infos["total"]["heal"]
55 | dead = city_infos["total"]["dead"]
56 | details.append([update_time, province, city, confirm, confirm_add, heal, dead])
57 | return history, details
58 |
59 |
60 |
61 |
62 |
63 | his,de = get_tencent_data()
64 | print(his)
65 | print(de)
66 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking2/爬取百度热搜.py:
--------------------------------------------------------------------------------
1 | from selenium.webdriver import Chrome,ChromeOptions
2 | import time
3 |
4 | option = ChromeOptions()
5 | option.add_argument("--headless")#隐藏浏览器
6 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样
7 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1'
8 |
9 | brower = Chrome(options = option)
10 | #brower = Chrome()
11 | brower.get(url)
12 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮
13 | but.click() #点击展开
14 |
15 |
16 | time.sleep(1)#爬虫与反爬,模拟人等待1秒
17 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]')
18 | for i in c:
19 | print(i.text)
20 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/.idea/lian.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 | 1583913028457
126 |
127 |
128 | 1583913028457
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "python.pythonPath": "D:\\Anaconda3\\python.exe"
3 | }
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/README.md:
--------------------------------------------------------------------------------
1 | 全部操作已实现,就差部署在linux主机上了
2 | 在win10本机已经可以运行了
3 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/__pycache__/app.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skyerhxx/COVID-19_Tracking/02cb4f63ec7700d86963139c7a6781c735334387/开发过程中的版本/COVID-19_Tracking_本机/__pycache__/app.cpython-37.pyc
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/__pycache__/utils.cpython-37.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/skyerhxx/COVID-19_Tracking/02cb4f63ec7700d86963139c7a6781c735334387/开发过程中的版本/COVID-19_Tracking_本机/__pycache__/utils.cpython-37.pyc
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from flask import render_template
3 | from flask import jsonify
4 | from jieba.analyse import extract_tags
5 | import utils
6 | import string
7 |
8 |
9 |
10 | app = Flask(__name__)
11 |
12 |
13 | @app.route('/')
14 | def hello_world():
15 | return render_template('main.html')
16 |
17 | @app.route('/c1')
18 | def get_c1_data():
19 | data = utils.get_c1_data()
20 | return jsonify({"confirm":data[0],"suspect":data[1],"heal":data[2],"dead":data[3]})
21 |
22 | @app.route('/c2')
23 | def get_c2_data():
24 | res = []
25 | for tup in utils.get_c2_data():
26 | res.append({"name":tup[0],"value":int(tup[1])})
27 | return jsonify({"data":res})
28 |
29 |
30 | @app.route("/l1")
31 | def get_l1_data():
32 | data = utils.get_l1_data()
33 | day,confirm,suspect,heal,dead = [],[],[],[],[]
34 | for a,b,c,d,e in data[7:]: #很多卫健委网站前7天都是没有数据的,所以把前7天砍掉了
35 | day.append(a.strftime("%m-%d")) #a是datatime类型
36 | confirm.append(b)
37 | suspect.append(c)
38 | heal.append(d)
39 | dead.append(e)
40 | return jsonify({"day":day,"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead})
41 |
42 | @app.route("/l2")
43 | def get_l2_data():
44 | data = utils.get_l2_data()
45 | day, confirm_add, suspect_add = [], [], []
46 | for a, b, c in data[7:]:
47 | day.append(a.strftime("%m-%d")) # a是datatime类型
48 | confirm_add.append(b)
49 | suspect_add.append(c)
50 | return jsonify({"day": day, "confirm_add": confirm_add, "suspect_add": suspect_add})
51 |
52 |
53 | @app.route("/r1")
54 | def get_r1_data():
55 | data = utils.get_r1_data()
56 | city = []
57 | confirm = []
58 | for k,v in data:
59 | city.append(k)
60 | confirm.append(int(v))
61 | return jsonify({"city": city, "confirm": confirm})
62 |
63 |
64 | @app.route("/r2")
65 | def get_r2_data():
66 | data = utils.get_r2_data() #格式 (('民警抗疫一线奋战16天牺牲1037364',), ('四川再派两批医疗队1537382',)
67 | d = []
68 | for i in data:
69 | k = i[0].rstrip(string.digits) # 移除热搜数字
70 | v = i[0][len(k):] # 获取热搜数字
71 | ks = extract_tags(k) # 使用jieba 提取关键字
72 | for j in ks:
73 | if not j.isdigit():
74 | d.append({"name": j, "value": v})
75 | return jsonify({"kws": d})
76 |
77 |
78 |
79 |
80 |
81 | @app.route('/time')
82 | def gettime():
83 | return utils.get_time()
84 |
85 |
86 | @app.route('/tem')
87 | def hello_world3():
88 | return render_template("index.html")
89 |
90 | @app.route('/ajax', methods=["get","post"])
91 | def hello_world4():
92 | return '10000'
93 |
94 | if __name__ == '__main__':
95 | app.run()
96 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/cov_1.sql:
--------------------------------------------------------------------------------
1 | -- MySQL dump 10.13 Distrib 8.0.17, for Win64 (x86_64)
2 | --
3 | -- Host: localhost Database: cov
4 | -- ------------------------------------------------------
5 | -- Server version 8.0.17
6 |
7 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
8 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
9 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
10 | /*!50503 SET NAMES utf8mb4 */;
11 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
12 | /*!40103 SET TIME_ZONE='+00:00' */;
13 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
14 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
15 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
16 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
17 |
18 | --
19 | -- Table structure for table `details`
20 | --
21 |
22 | DROP TABLE IF EXISTS `details`;
23 | /*!40101 SET @saved_cs_client = @@character_set_client */;
24 | /*!50503 SET character_set_client = utf8mb4 */;
25 | CREATE TABLE `details` (
26 | `id` int(11) NOT NULL AUTO_INCREMENT,
27 | `update_time` datetime DEFAULT NULL COMMENT '数据最后更新时间',
28 | `province` varchar(50) DEFAULT NULL COMMENT '省',
29 | `city` varchar(50) DEFAULT NULL COMMENT '市',
30 | `confirm` int(11) DEFAULT NULL COMMENT '累计确诊',
31 | `confirm_add` int(11) DEFAULT NULL COMMENT '新增治愈',
32 | `heal` int(11) DEFAULT NULL COMMENT '累计治愈',
33 | `dead` int(11) DEFAULT NULL COMMENT '累计死亡',
34 | PRIMARY KEY (`id`)
35 | ) ENGINE=InnoDB AUTO_INCREMENT=454 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
36 | /*!40101 SET character_set_client = @saved_cs_client */;
37 |
38 | --
39 | -- Dumping data for table `details`
40 | --
41 |
42 | LOCK TABLES `details` WRITE;
43 | /*!40000 ALTER TABLE `details` DISABLE KEYS */;
44 | INSERT INTO `details` VALUES (1,'2020-04-07 20:36:49','香港','地区待确认',935,21,236,4),(2,'2020-04-07 20:36:49','湖北','武汉',50008,0,46922,2571),(3,'2020-04-07 20:36:49','湖北','襄阳',1175,0,1135,39),(4,'2020-04-07 20:36:49','湖北','仙桃',575,0,552,22),(5,'2020-04-07 20:36:49','湖北','宜昌',931,0,894,36),(6,'2020-04-07 20:36:49','湖北','天门',496,0,481,15),(7,'2020-04-07 20:36:49','湖北','鄂州',1394,0,1335,59),(8,'2020-04-07 20:36:49','湖北','恩施州',252,0,245,7),(9,'2020-04-07 20:36:49','湖北','十堰',672,0,664,8),(10,'2020-04-07 20:36:49','湖北','潜江',198,0,189,9),(11,'2020-04-07 20:36:49','湖北','黄石',1015,0,976,39),(12,'2020-04-07 20:36:49','湖北','荆州',1580,0,1528,52),(13,'2020-04-07 20:36:49','湖北','随州',1307,0,1262,45),(14,'2020-04-07 20:36:49','湖北','荆门',928,0,887,41),(15,'2020-04-07 20:36:49','湖北','咸宁',836,0,821,15),(16,'2020-04-07 20:36:49','湖北','孝感',3518,0,3389,129),(17,'2020-04-07 20:36:49','湖北','黄冈',2907,0,2782,125),(18,'2020-04-07 20:36:49','湖北','神农架',11,0,11,0),(19,'2020-04-07 20:36:49','台湾','地区待确认',376,13,57,5),(20,'2020-04-07 20:36:49','北京','境外输入',171,0,46,0),(21,'2020-04-07 20:36:49','北京','朝阳',72,0,0,0),(22,'2020-04-07 20:36:49','北京','海淀',64,0,0,0),(23,'2020-04-07 20:36:49','北京','西城',53,0,0,0),(24,'2020-04-07 20:36:49','北京','丰台',43,0,0,0),(25,'2020-04-07 20:36:49','北京','大兴',39,0,0,0),(26,'2020-04-07 20:36:49','北京','昌平',29,0,0,0),(27,'2020-04-07 20:36:49','北京','外地来京',25,0,0,0),(28,'2020-04-07 20:36:49','北京','通州',19,0,0,0),(29,'2020-04-07 20:36:49','北京','房山',16,0,0,0),(30,'2020-04-07 20:36:49','北京','石景山',14,0,0,0),(31,'2020-04-07 20:36:49','北京','东城',14,0,0,0),(32,'2020-04-07 20:36:49','北京','顺义',10,0,0,0),(33,'2020-04-07 20:36:49','北京','密云',7,0,0,0),(34,'2020-04-07 20:36:49','北京','怀柔',7,0,0,0),(35,'2020-04-07 20:36:49','北京','门头沟',3,0,0,0),(36,'2020-04-07 20:36:49','北京','延庆',1,0,0,0),(37,'2020-04-07 20:36:49','北京','地区待确认',0,0,402,8),(38,'2020-04-07 20:36:49','上海','境外输入',199,2,78,0),(39,'2020-04-07 20:36:49','上海','外地来沪',111,0,107,1),(40,'2020-04-07 20:36:49','上海','嘉定',9,0,7,1),(41,'2020-04-07 20:36:49','上海','宝山',22,0,20,1),(42,'2020-04-07 20:36:49','上海','青浦',6,0,6,0),(43,'2020-04-07 20:36:49','上海','静安',16,0,15,1),(44,'2020-04-07 20:36:49','上海','徐汇',18,0,17,1),(45,'2020-04-07 20:36:49','上海','黄浦',6,0,5,1),(46,'2020-04-07 20:36:49','上海','浦东',61,0,61,0),(47,'2020-04-07 20:36:49','上海','地区待确认',0,0,0,0),(48,'2020-04-07 20:36:49','上海','崇明',4,0,4,0),(49,'2020-04-07 20:36:49','上海','金山',4,0,4,0),(50,'2020-04-07 20:36:49','上海','虹口',7,0,7,0),(51,'2020-04-07 20:36:49','上海','奉贤',9,0,9,0),(52,'2020-04-07 20:36:49','上海','杨浦',9,0,9,0),(53,'2020-04-07 20:36:49','上海','普陀',11,0,11,0),(54,'2020-04-07 20:36:49','上海','长宁',13,0,13,0),(55,'2020-04-07 20:36:49','上海','松江',14,0,14,0),(56,'2020-04-07 20:36:49','上海','闵行',19,0,19,0),(57,'2020-04-07 20:36:49','广东','境外输入',173,1,62,0),(58,'2020-04-07 20:36:49','广东','广州',352,0,343,1),(59,'2020-04-07 20:36:49','广东','深圳',419,0,414,3),(60,'2020-04-07 20:36:49','广东','揭阳',10,0,8,0),(61,'2020-04-07 20:36:49','广东','佛山',85,0,84,0),(62,'2020-04-07 20:36:49','广东','汕尾',5,0,5,0),(63,'2020-04-07 20:36:49','广东','茂名',14,0,14,0),(64,'2020-04-07 20:36:49','广东','河源',4,0,4,0),(65,'2020-04-07 20:36:49','广东','惠州',62,0,62,0),(66,'2020-04-07 20:36:49','广东','阳江',14,0,14,0),(67,'2020-04-07 20:36:49','广东','东莞',99,0,98,1),(68,'2020-04-07 20:36:49','广东','地区待确认',0,0,0,0),(69,'2020-04-07 20:36:49','广东','梅州',16,0,16,0),(70,'2020-04-07 20:36:49','广东','肇庆',19,0,18,1),(71,'2020-04-07 20:36:49','广东','潮州',5,0,5,0),(72,'2020-04-07 20:36:49','广东','湛江',22,0,22,0),(73,'2020-04-07 20:36:49','广东','珠海',98,0,97,1),(74,'2020-04-07 20:36:49','广东','汕头',25,0,25,0),(75,'2020-04-07 20:36:49','广东','江门',23,0,23,0),(76,'2020-04-07 20:36:49','广东','韶关',10,0,9,1),(77,'2020-04-07 20:36:49','广东','清远',12,0,12,0),(78,'2020-04-07 20:36:49','广东','中山',66,0,66,0),(79,'2020-04-07 20:36:49','黑龙江','境外输入',62,20,0,0),(80,'2020-04-07 20:36:49','黑龙江','绥化',47,0,43,4),(81,'2020-04-07 20:36:49','黑龙江','大兴安岭',3,0,3,0),(82,'2020-04-07 20:36:49','黑龙江','黑河',14,0,14,0),(83,'2020-04-07 20:36:49','黑龙江','哈尔滨',198,0,194,4),(84,'2020-04-07 20:36:49','黑龙江','大庆',26,0,25,1),(85,'2020-04-07 20:36:49','黑龙江','双鸭山',52,0,49,3),(86,'2020-04-07 20:36:49','黑龙江','齐齐哈尔',43,0,42,1),(87,'2020-04-07 20:36:49','黑龙江','鹤岗',5,0,5,0),(88,'2020-04-07 20:36:49','黑龙江','牡丹江',15,0,15,0),(89,'2020-04-07 20:36:49','黑龙江','七台河',17,0,17,0),(90,'2020-04-07 20:36:49','黑龙江','鸡西',46,0,46,0),(91,'2020-04-07 20:36:49','黑龙江','伊春',1,0,1,0),(92,'2020-04-07 20:36:49','黑龙江','佳木斯',15,0,15,0),(93,'2020-04-07 20:36:49','内蒙古','境外输入',46,3,0,0),(94,'2020-04-07 20:36:49','内蒙古','包头',11,0,11,0),(95,'2020-04-07 20:36:49','内蒙古','呼和浩特',7,0,7,0),(96,'2020-04-07 20:36:49','内蒙古','乌兰察布',3,0,3,0),(97,'2020-04-07 20:36:49','内蒙古','锡林郭勒',9,0,9,0),(98,'2020-04-07 20:36:49','内蒙古','赤峰',9,0,9,0),(99,'2020-04-07 20:36:49','内蒙古','通辽',7,0,7,0),(100,'2020-04-07 20:36:49','内蒙古','鄂尔多斯',11,0,11,0),(101,'2020-04-07 20:36:49','内蒙古','呼伦贝尔',7,0,7,0),(102,'2020-04-07 20:36:49','内蒙古','巴彦淖尔',8,0,7,1),(103,'2020-04-07 20:36:49','内蒙古','兴安盟',1,0,1,0),(104,'2020-04-07 20:36:49','内蒙古','乌海',2,0,2,0),(105,'2020-04-07 20:36:49','福建','境外输入',55,1,10,0),(106,'2020-04-07 20:36:49','福建','莆田',56,0,56,0),(107,'2020-04-07 20:36:49','福建','漳州',20,0,20,0),(108,'2020-04-07 20:36:49','福建','地区待确认',0,0,0,0),(109,'2020-04-07 20:36:49','福建','宁德',26,0,26,0),(110,'2020-04-07 20:36:49','福建','龙岩',6,0,6,0),(111,'2020-04-07 20:36:49','福建','南平',20,0,20,0),(112,'2020-04-07 20:36:49','福建','三明',14,0,14,0),(113,'2020-04-07 20:36:49','福建','泉州',47,0,47,0),(114,'2020-04-07 20:36:49','福建','厦门',35,0,35,0),(115,'2020-04-07 20:36:49','福建','福州',72,0,71,1),(116,'2020-04-07 20:36:49','澳门','地区待确认',44,0,10,0),(117,'2020-04-07 20:36:49','浙江','境外输入',47,1,14,0),(118,'2020-04-07 20:36:49','浙江','嘉兴',46,0,45,0),(119,'2020-04-07 20:36:49','浙江','金华',55,0,55,0),(120,'2020-04-07 20:36:49','浙江','台州',146,0,146,0),(121,'2020-04-07 20:36:49','浙江','舟山',10,0,10,0),(122,'2020-04-07 20:36:49','浙江','衢州',14,0,14,0),(123,'2020-04-07 20:36:49','浙江','丽水',17,0,17,0),(124,'2020-04-07 20:36:49','浙江','绍兴',42,0,42,0),(125,'2020-04-07 20:36:49','浙江','省十里丰监狱',36,0,36,0),(126,'2020-04-07 20:36:49','浙江','湖州',10,0,10,0),(127,'2020-04-07 20:36:49','浙江','温州',504,0,503,1),(128,'2020-04-07 20:36:49','浙江','宁波',157,0,157,0),(129,'2020-04-07 20:36:49','浙江','杭州',181,0,181,0),(130,'2020-04-07 20:36:49','天津','境外输入',44,0,19,0),(131,'2020-04-07 20:36:49','天津','和平区',6,0,6,0),(132,'2020-04-07 20:36:49','天津','河北区',12,0,12,0),(133,'2020-04-07 20:36:49','天津','津南区',2,0,2,0),(134,'2020-04-07 20:36:49','天津','北辰区',6,0,6,0),(135,'2020-04-07 20:36:49','天津','南开区',6,0,6,0),(136,'2020-04-07 20:36:49','天津','河东区',15,0,14,1),(137,'2020-04-07 20:36:49','天津','宁河区',4,0,4,0),(138,'2020-04-07 20:36:49','天津','宝坻区',60,0,58,2),(139,'2020-04-07 20:36:49','天津','外地来津',6,0,6,0),(140,'2020-04-07 20:36:49','天津','滨海新区',3,0,3,0),(141,'2020-04-07 20:36:49','天津','武清区',2,0,2,0),(142,'2020-04-07 20:36:49','天津','东丽区',4,0,4,0),(143,'2020-04-07 20:36:49','天津','河西区',4,0,4,0),(144,'2020-04-07 20:36:49','天津','西青区',4,0,4,0),(145,'2020-04-07 20:36:49','天津','红桥区',2,0,2,0),(146,'2020-04-07 20:36:49','山东','境外输入',22,1,3,0),(147,'2020-04-07 20:36:49','山东','日照',16,0,16,0),(148,'2020-04-07 20:36:49','山东','济宁',260,0,260,0),(149,'2020-04-07 20:36:49','山东','济南',47,0,47,0),(150,'2020-04-07 20:36:49','山东','淄博',30,0,29,1),(151,'2020-04-07 20:36:49','山东','枣庄',24,0,24,0),(152,'2020-04-07 20:36:49','山东','烟台',47,0,47,0),(153,'2020-04-07 20:36:49','山东','威海',38,0,37,1),(154,'2020-04-07 20:36:49','山东','青岛',61,0,60,1),(155,'2020-04-07 20:36:49','山东','临沂',49,0,49,0),(156,'2020-04-07 20:36:49','山东','德州',37,0,35,2),(157,'2020-04-07 20:36:49','山东','聊城',38,0,38,0),(158,'2020-04-07 20:36:49','山东','滨州',15,0,15,0),(159,'2020-04-07 20:36:49','山东','菏泽',18,0,18,0),(160,'2020-04-07 20:36:49','山东','泰安',35,0,33,2),(161,'2020-04-07 20:36:49','山东','潍坊',44,0,44,0),(162,'2020-04-07 20:36:49','江苏','境外输入',20,0,2,0),(163,'2020-04-07 20:36:49','江苏','连云港',48,0,48,0),(164,'2020-04-07 20:36:49','江苏','南通',40,0,40,0),(165,'2020-04-07 20:36:49','江苏','苏州',87,0,87,0),(166,'2020-04-07 20:36:49','江苏','南京',93,0,93,0),(167,'2020-04-07 20:36:49','江苏','无锡',55,0,55,0),(168,'2020-04-07 20:36:49','江苏','徐州',79,0,79,0),(169,'2020-04-07 20:36:49','江苏','宿迁',13,0,13,0),(170,'2020-04-07 20:36:49','江苏','淮安',66,0,66,0),(171,'2020-04-07 20:36:49','江苏','镇江',12,0,12,0),(172,'2020-04-07 20:36:49','江苏','常州',51,0,51,0),(173,'2020-04-07 20:36:49','江苏','扬州',23,0,23,0),(174,'2020-04-07 20:36:49','江苏','盐城',27,0,27,0),(175,'2020-04-07 20:36:49','江苏','泰州',37,0,37,0),(176,'2020-04-07 20:36:49','四川','境外输入',21,1,5,0),(177,'2020-04-07 20:36:49','四川','甘孜',78,0,78,0),(178,'2020-04-07 20:36:49','四川','成都',144,0,141,3),(179,'2020-04-07 20:36:49','四川','自贡',9,0,9,0),(180,'2020-04-07 20:36:49','四川','攀枝花',16,0,16,0),(181,'2020-04-07 20:36:49','四川','内江',22,0,22,0),(182,'2020-04-07 20:36:49','四川','泸州',24,0,24,0),(183,'2020-04-07 20:36:49','四川','德阳',18,0,18,0),(184,'2020-04-07 20:36:49','四川','绵阳',22,0,22,0),(185,'2020-04-07 20:36:49','四川','广元',6,0,6,0),(186,'2020-04-07 20:36:49','四川','凉山',13,0,13,0),(187,'2020-04-07 20:36:49','四川','乐山',3,0,3,0),(188,'2020-04-07 20:36:49','四川','阿坝',1,0,1,0),(189,'2020-04-07 20:36:49','四川','资阳',4,0,4,0),(190,'2020-04-07 20:36:49','四川','眉山',8,0,8,0),(191,'2020-04-07 20:36:49','四川','雅安',7,0,7,0),(192,'2020-04-07 20:36:49','四川','巴中',24,0,24,0),(193,'2020-04-07 20:36:49','四川','达州',42,0,42,0),(194,'2020-04-07 20:36:49','四川','广安',30,0,30,0),(195,'2020-04-07 20:36:49','四川','宜宾',12,0,12,0),(196,'2020-04-07 20:36:49','四川','南充',39,0,39,0),(197,'2020-04-07 20:36:49','四川','遂宁',17,0,17,0),(198,'2020-04-07 20:36:49','辽宁','境外输入',20,2,9,0),(199,'2020-04-07 20:36:49','辽宁','大连',18,0,17,0),(200,'2020-04-07 20:36:49','辽宁','鞍山',4,0,4,0),(201,'2020-04-07 20:36:49','辽宁','朝阳市',6,0,5,1),(202,'2020-04-07 20:36:49','辽宁','丹东',11,0,11,0),(203,'2020-04-07 20:36:49','辽宁','葫芦岛',12,0,11,1),(204,'2020-04-07 20:36:49','辽宁','铁岭',7,0,7,0),(205,'2020-04-07 20:36:49','辽宁','沈阳',28,0,28,0),(206,'2020-04-07 20:36:49','辽宁','锦州',12,0,12,0),(207,'2020-04-07 20:36:49','辽宁','盘锦',11,0,11,0),(208,'2020-04-07 20:36:49','辽宁','阜新',8,0,8,0),(209,'2020-04-07 20:36:49','辽宁','本溪',3,0,3,0),(210,'2020-04-07 20:36:49','辽宁','辽阳',3,0,3,0),(211,'2020-04-07 20:36:49','辽宁','营口',1,0,1,0),(212,'2020-04-07 20:36:49','河北','境外输入',9,0,0,0),(213,'2020-04-07 20:36:49','河北','唐山',58,0,57,1),(214,'2020-04-07 20:36:49','河北','张家口',41,0,41,0),(215,'2020-04-07 20:36:49','河北','邯郸',32,0,32,0),(216,'2020-04-07 20:36:49','河北','石家庄',29,0,29,0),(217,'2020-04-07 20:36:49','河北','承德',7,0,7,0),(218,'2020-04-07 20:36:49','河北','衡水',8,0,8,0),(219,'2020-04-07 20:36:49','河北','秦皇岛',10,0,9,1),(220,'2020-04-07 20:36:49','河北','邢台',23,0,22,1),(221,'2020-04-07 20:36:49','河北','廊坊',30,0,30,0),(222,'2020-04-07 20:36:49','河北','保定',32,0,32,0),(223,'2020-04-07 20:36:49','河北','沧州',48,0,45,3),(224,'2020-04-07 20:36:49','云南','境外输入',10,0,1,0),(225,'2020-04-07 20:36:49','云南','昭通市',25,0,25,0),(226,'2020-04-07 20:36:49','云南','德宏州',5,0,5,0),(227,'2020-04-07 20:36:49','云南','昆明',53,0,53,0),(228,'2020-04-07 20:36:49','云南','保山市',9,0,9,0),(229,'2020-04-07 20:36:49','云南','玉溪',14,0,13,1),(230,'2020-04-07 20:36:49','云南','红河',9,0,9,0),(231,'2020-04-07 20:36:49','云南','曲靖',13,0,13,0),(232,'2020-04-07 20:36:49','云南','大理',13,0,13,0),(233,'2020-04-07 20:36:49','云南','西双版纳州',15,0,14,1),(234,'2020-04-07 20:36:49','云南','文山州',2,0,2,0),(235,'2020-04-07 20:36:49','云南','普洱',4,0,4,0),(236,'2020-04-07 20:36:49','云南','楚雄州',4,0,4,0),(237,'2020-04-07 20:36:49','云南','丽江市',7,0,7,0),(238,'2020-04-07 20:36:49','云南','临沧',1,0,1,0),(239,'2020-04-07 20:36:49','陕西','境外输入',11,0,4,0),(240,'2020-04-07 20:36:49','陕西','韩城',1,0,1,0),(241,'2020-04-07 20:36:49','陕西','渭南',15,0,15,0),(242,'2020-04-07 20:36:49','陕西','咸阳',17,0,17,0),(243,'2020-04-07 20:36:49','陕西','西安',120,0,117,3),(244,'2020-04-07 20:36:49','陕西','汉中',26,0,26,0),(245,'2020-04-07 20:36:49','陕西','杨凌',1,0,1,0),(246,'2020-04-07 20:36:49','陕西','地区待确认',0,0,0,0),(247,'2020-04-07 20:36:49','陕西','榆林',3,0,3,0),(248,'2020-04-07 20:36:49','陕西','商洛',7,0,7,0),(249,'2020-04-07 20:36:49','陕西','铜川',8,0,8,0),(250,'2020-04-07 20:36:49','陕西','延安',8,0,8,0),(251,'2020-04-07 20:36:49','陕西','宝鸡',13,0,13,0),(252,'2020-04-07 20:36:49','陕西','安康',26,0,26,0),(253,'2020-04-07 20:36:49','吉林','境外输入',5,0,0,0),(254,'2020-04-07 20:36:49','吉林','通化',6,0,6,0),(255,'2020-04-07 20:36:49','吉林','长春',45,0,45,0),(256,'2020-04-07 20:36:49','吉林','白城',1,0,1,0),(257,'2020-04-07 20:36:49','吉林','四平',15,0,14,1),(258,'2020-04-07 20:36:49','吉林','公主岭',6,0,6,0),(259,'2020-04-07 20:36:49','吉林','辽源',7,0,7,0),(260,'2020-04-07 20:36:49','吉林','延边',5,0,5,0),(261,'2020-04-07 20:36:49','吉林','吉林',5,0,5,0),(262,'2020-04-07 20:36:49','吉林','松原',2,0,2,0),(263,'2020-04-07 20:36:49','吉林','梅河口市',1,0,1,0),(264,'2020-04-07 20:36:49','山西','境外输入',5,0,0,0),(265,'2020-04-07 20:36:49','山西','晋中',37,0,37,0),(266,'2020-04-07 20:36:49','山西','大同',12,0,12,0),(267,'2020-04-07 20:36:49','山西','运城',19,0,19,0),(268,'2020-04-07 20:36:49','山西','忻州',7,0,7,0),(269,'2020-04-07 20:36:49','山西','晋城',10,0,10,0),(270,'2020-04-07 20:36:49','山西','长治',8,0,8,0),(271,'2020-04-07 20:36:49','山西','太原',20,0,20,0),(272,'2020-04-07 20:36:49','山西','朔州',8,0,8,0),(273,'2020-04-07 20:36:49','山西','临汾',2,0,2,0),(274,'2020-04-07 20:36:49','山西','阳泉',4,0,4,0),(275,'2020-04-07 20:36:49','山西','吕梁',6,0,6,0),(276,'2020-04-07 20:36:49','甘肃','境外输入',47,0,43,0),(277,'2020-04-07 20:36:49','甘肃','白银',4,0,4,0),(278,'2020-04-07 20:36:49','甘肃','定西',9,0,9,0),(279,'2020-04-07 20:36:49','甘肃','地区待确认',0,0,0,0),(280,'2020-04-07 20:36:49','甘肃','平凉',9,0,9,0),(281,'2020-04-07 20:36:49','甘肃','庆阳',3,0,3,0),(282,'2020-04-07 20:36:49','甘肃','兰州',37,0,35,2),(283,'2020-04-07 20:36:49','甘肃','甘南州',8,0,8,0),(284,'2020-04-07 20:36:49','甘肃','天水',12,0,12,0),(285,'2020-04-07 20:36:49','甘肃','陇南',4,0,4,0),(286,'2020-04-07 20:36:49','甘肃','临夏',3,0,3,0),(287,'2020-04-07 20:36:49','甘肃','张掖',2,0,2,0),(288,'2020-04-07 20:36:49','甘肃','金昌',1,0,1,0),(289,'2020-04-07 20:36:49','重庆','境外输入',3,0,0,0),(290,'2020-04-07 20:36:49','重庆','涪陵区',5,0,5,0),(291,'2020-04-07 20:36:49','重庆','綦江区',23,0,23,0),(292,'2020-04-07 20:36:49','重庆','大足区',14,0,14,0),(293,'2020-04-07 20:36:49','重庆','荣昌区',9,0,9,0),(294,'2020-04-07 20:36:49','重庆','江北区',28,0,28,0),(295,'2020-04-07 20:36:49','重庆','沙坪坝区',9,0,9,0),(296,'2020-04-07 20:36:49','重庆','丰都县',10,0,10,0),(297,'2020-04-07 20:36:49','重庆','潼南区',18,0,18,0),(298,'2020-04-07 20:36:49','重庆','铜梁区',10,0,10,0),(299,'2020-04-07 20:36:49','重庆','南岸区',15,0,15,0),(300,'2020-04-07 20:36:49','重庆','九龙坡区',21,0,20,1),(301,'2020-04-07 20:36:49','重庆','两江新区',17,0,17,0),(302,'2020-04-07 20:36:49','重庆','万州区',118,0,114,4),(303,'2020-04-07 20:36:49','重庆','巴南区',6,0,6,0),(304,'2020-04-07 20:36:49','重庆','渝中区',20,0,20,0),(305,'2020-04-07 20:36:49','重庆','垫江县',20,0,20,0),(306,'2020-04-07 20:36:49','重庆','云阳县',25,0,25,0),(307,'2020-04-07 20:36:49','重庆','奉节县',22,0,22,0),(308,'2020-04-07 20:36:49','重庆','石柱县',15,0,15,0),(309,'2020-04-07 20:36:49','重庆','长寿区',22,0,22,0),(310,'2020-04-07 20:36:49','重庆','渝北区',17,0,17,0),(311,'2020-04-07 20:36:49','重庆','彭水县',2,0,2,0),(312,'2020-04-07 20:36:49','重庆','忠县',21,0,21,0),(313,'2020-04-07 20:36:49','重庆','开州区',21,0,20,1),(314,'2020-04-07 20:36:49','重庆','合川区',23,0,23,0),(315,'2020-04-07 20:36:49','重庆','巫溪县',14,0,14,0),(316,'2020-04-07 20:36:49','重庆','大渡口区',7,0,7,0),(317,'2020-04-07 20:36:49','重庆','巫山县',10,0,10,0),(318,'2020-04-07 20:36:49','重庆','万盛经开区',1,0,1,0),(319,'2020-04-07 20:36:49','重庆','酉阳县',1,0,1,0),(320,'2020-04-07 20:36:49','重庆','璧山区',9,0,9,0),(321,'2020-04-07 20:36:49','重庆','高新区',4,0,4,0),(322,'2020-04-07 20:36:49','重庆','永川区',5,0,5,0),(323,'2020-04-07 20:36:49','重庆','江津区',4,0,4,0),(324,'2020-04-07 20:36:49','重庆','武隆区',1,0,1,0),(325,'2020-04-07 20:36:49','重庆','梁平区',4,0,4,0),(326,'2020-04-07 20:36:49','重庆','城口县',2,0,2,0),(327,'2020-04-07 20:36:49','重庆','黔江区',2,0,2,0),(328,'2020-04-07 20:36:49','重庆','秀山县',1,0,1,0),(329,'2020-04-07 20:36:49','河南','境外输入',3,0,2,0),(330,'2020-04-07 20:36:49','河南','漯河',36,0,35,0),(331,'2020-04-07 20:36:49','河南','许昌',39,0,38,1),(332,'2020-04-07 20:36:49','河南','周口',76,0,75,1),(333,'2020-04-07 20:36:49','河南','南阳',156,0,153,3),(334,'2020-04-07 20:36:49','河南','信阳',274,0,272,2),(335,'2020-04-07 20:36:49','河南','郑州',157,0,152,5),(336,'2020-04-07 20:36:49','河南','济源示范区',5,0,5,0),(337,'2020-04-07 20:36:49','河南','安阳',53,0,53,0),(338,'2020-04-07 20:36:49','河南','新乡',57,0,54,3),(339,'2020-04-07 20:36:49','河南','地区待确认',0,0,0,0),(340,'2020-04-07 20:36:49','河南','商丘',91,0,88,3),(341,'2020-04-07 20:36:49','河南','驻马店',139,0,139,0),(342,'2020-04-07 20:36:49','河南','焦作',32,0,31,1),(343,'2020-04-07 20:36:49','河南','开封',26,0,26,0),(344,'2020-04-07 20:36:49','河南','平顶山',58,0,57,1),(345,'2020-04-07 20:36:49','河南','洛阳',31,0,30,1),(346,'2020-04-07 20:36:49','河南','濮阳',17,0,17,0),(347,'2020-04-07 20:36:49','河南','鹤壁',19,0,19,0),(348,'2020-04-07 20:36:49','河南','三门峡',7,0,6,1),(349,'2020-04-07 20:36:49','湖南','境外输入',1,0,0,0),(350,'2020-04-07 20:36:49','湖南','张家界',5,0,5,0),(351,'2020-04-07 20:36:49','湖南','娄底',76,0,76,0),(352,'2020-04-07 20:36:49','湖南','怀化',40,0,40,0),(353,'2020-04-07 20:36:49','湖南','永州',44,0,44,0),(354,'2020-04-07 20:36:49','湖南','郴州',39,0,39,0),(355,'2020-04-07 20:36:49','湖南','益阳',60,0,60,0),(356,'2020-04-07 20:36:49','湖南','湘西自治州',8,0,8,0),(357,'2020-04-07 20:36:49','湖南','常德',82,0,82,0),(358,'2020-04-07 20:36:49','湖南','岳阳',156,0,155,1),(359,'2020-04-07 20:36:49','湖南','邵阳',102,0,101,1),(360,'2020-04-07 20:36:49','湖南','湘潭',36,0,36,0),(361,'2020-04-07 20:36:49','湖南','株洲',80,0,80,0),(362,'2020-04-07 20:36:49','湖南','衡阳',48,0,48,0),(363,'2020-04-07 20:36:49','湖南','长沙',242,0,240,2),(364,'2020-04-07 20:36:49','江西','境外输入',2,0,1,0),(365,'2020-04-07 20:36:49','江西','吉安',22,0,22,0),(366,'2020-04-07 20:36:49','江西','南昌',230,0,230,0),(367,'2020-04-07 20:36:49','江西','上饶',123,0,123,0),(368,'2020-04-07 20:36:49','江西','新余',130,0,130,0),(369,'2020-04-07 20:36:49','江西','抚州',72,0,72,0),(370,'2020-04-07 20:36:49','江西','九江',118,0,118,0),(371,'2020-04-07 20:36:49','江西','赣州',76,0,75,1),(372,'2020-04-07 20:36:49','江西','萍乡',33,0,33,0),(373,'2020-04-07 20:36:49','江西','宜春',106,0,106,0),(374,'2020-04-07 20:36:49','江西','鹰潭',18,0,18,0),(375,'2020-04-07 20:36:49','江西','景德镇',6,0,6,0),(376,'2020-04-07 20:36:49','江西','赣江新区',1,0,1,0),(377,'2020-04-07 20:36:49','贵州','境外输入',1,0,0,0),(378,'2020-04-07 20:36:49','贵州','贵阳',36,0,35,1),(379,'2020-04-07 20:36:49','贵州','遵义',32,0,32,0),(380,'2020-04-07 20:36:49','贵州','六盘水',10,0,9,1),(381,'2020-04-07 20:36:49','贵州','毕节',23,0,23,0),(382,'2020-04-07 20:36:49','贵州','黔南州',17,0,17,0),(383,'2020-04-07 20:36:49','贵州','安顺',4,0,4,0),(384,'2020-04-07 20:36:49','贵州','黔东南州',10,0,10,0),(385,'2020-04-07 20:36:49','贵州','铜仁',10,0,10,0),(386,'2020-04-07 20:36:49','贵州','黔西南州',4,0,4,0),(387,'2020-04-07 20:36:49','西藏','拉萨',1,0,1,0),(388,'2020-04-07 20:36:49','新疆','兵团第九师',4,0,3,1),(389,'2020-04-07 20:36:49','新疆','吐鲁番',3,0,3,0),(390,'2020-04-07 20:36:49','新疆','乌鲁木齐',23,0,23,0),(391,'2020-04-07 20:36:49','新疆','昌吉州',4,0,4,0),(392,'2020-04-07 20:36:49','新疆','第八师石河子',4,0,3,1),(393,'2020-04-07 20:36:49','新疆','兵团第四师',10,0,9,1),(394,'2020-04-07 20:36:49','新疆','伊犁州',18,0,18,0),(395,'2020-04-07 20:36:49','新疆','六师五家渠',2,0,2,0),(396,'2020-04-07 20:36:49','新疆','兵团第十二师',3,0,3,0),(397,'2020-04-07 20:36:49','新疆','巴州',3,0,3,0),(398,'2020-04-07 20:36:49','新疆','第七师',1,0,1,0),(399,'2020-04-07 20:36:49','新疆','阿克苏',1,0,1,0),(400,'2020-04-07 20:36:49','宁夏','境外输入',3,0,3,0),(401,'2020-04-07 20:36:49','宁夏','银川',34,0,34,0),(402,'2020-04-07 20:36:49','宁夏','吴忠',28,0,28,0),(403,'2020-04-07 20:36:49','宁夏','固原',5,0,5,0),(404,'2020-04-07 20:36:49','宁夏','中卫',3,0,3,0),(405,'2020-04-07 20:36:49','宁夏','石嘴山',1,0,1,0),(406,'2020-04-07 20:36:49','宁夏','宁东管委会',1,0,1,0),(407,'2020-04-07 20:36:49','安徽','黄山',9,0,9,0),(408,'2020-04-07 20:36:49','安徽','宣城',6,0,6,0),(409,'2020-04-07 20:36:49','安徽','池州',17,0,17,0),(410,'2020-04-07 20:36:49','安徽','亳州',108,0,108,0),(411,'2020-04-07 20:36:49','安徽','六安',69,0,69,0),(412,'2020-04-07 20:36:49','安徽','宿州',41,0,41,0),(413,'2020-04-07 20:36:49','安徽','阜阳',155,0,155,0),(414,'2020-04-07 20:36:49','安徽','滁州',13,0,13,0),(415,'2020-04-07 20:36:49','安徽','安庆',83,0,83,0),(416,'2020-04-07 20:36:49','安徽','铜陵',29,0,29,0),(417,'2020-04-07 20:36:49','安徽','淮北',27,0,27,0),(418,'2020-04-07 20:36:49','安徽','马鞍山',38,0,38,0),(419,'2020-04-07 20:36:49','安徽','淮南',27,0,27,0),(420,'2020-04-07 20:36:49','安徽','蚌埠',160,0,155,5),(421,'2020-04-07 20:36:49','安徽','芜湖',34,0,34,0),(422,'2020-04-07 20:36:49','安徽','合肥',174,0,173,1),(423,'2020-04-07 20:36:49','广西','境外输入',2,0,2,0),(424,'2020-04-07 20:36:49','广西','北海',44,0,43,1),(425,'2020-04-07 20:36:49','广西','防城港',19,0,19,0),(426,'2020-04-07 20:36:49','广西','来宾',11,0,11,0),(427,'2020-04-07 20:36:49','广西','柳州',24,0,24,0),(428,'2020-04-07 20:36:49','广西','南宁',55,0,55,0),(429,'2020-04-07 20:36:49','广西','河池',28,0,27,1),(430,'2020-04-07 20:36:49','广西','桂林',32,0,32,0),(431,'2020-04-07 20:36:49','广西','玉林',11,0,11,0),(432,'2020-04-07 20:36:49','广西','钦州',8,0,8,0),(433,'2020-04-07 20:36:49','广西','贵港',8,0,8,0),(434,'2020-04-07 20:36:49','广西','梧州',5,0,5,0),(435,'2020-04-07 20:36:49','广西','百色',3,0,3,0),(436,'2020-04-07 20:36:49','广西','贺州',4,0,4,0),(437,'2020-04-07 20:36:49','海南','海口',39,0,39,0),(438,'2020-04-07 20:36:49','海南','儋州',15,0,14,1),(439,'2020-04-07 20:36:49','海南','三亚',54,0,53,1),(440,'2020-04-07 20:36:49','海南','东方',3,0,2,1),(441,'2020-04-07 20:36:49','海南','万宁',13,0,13,0),(442,'2020-04-07 20:36:49','海南','澄迈县',9,0,8,1),(443,'2020-04-07 20:36:49','海南','昌江县',7,0,7,0),(444,'2020-04-07 20:36:49','海南','保亭',3,0,3,0),(445,'2020-04-07 20:36:49','海南','琼海',6,0,5,1),(446,'2020-04-07 20:36:49','海南','临高县',6,0,6,0),(447,'2020-04-07 20:36:49','海南','陵水县',4,0,4,0),(448,'2020-04-07 20:36:49','海南','乐东',2,0,2,0),(449,'2020-04-07 20:36:49','海南','文昌',3,0,3,0),(450,'2020-04-07 20:36:49','海南','定安县',3,0,2,1),(451,'2020-04-07 20:36:49','海南','琼中县',1,0,1,0),(452,'2020-04-07 20:36:49','青海','海北州',3,0,3,0),(453,'2020-04-07 20:36:49','青海','西宁',15,0,15,0);
45 | /*!40000 ALTER TABLE `details` ENABLE KEYS */;
46 | UNLOCK TABLES;
47 |
48 | --
49 | -- Table structure for table `history`
50 | --
51 |
52 | DROP TABLE IF EXISTS `history`;
53 | /*!40101 SET @saved_cs_client = @@character_set_client */;
54 | /*!50503 SET character_set_client = utf8mb4 */;
55 | CREATE TABLE `history` (
56 | `ds` datetime NOT NULL COMMENT '日期',
57 | `confirm` int(11) DEFAULT NULL COMMENT '累计确诊',
58 | `confirm_add` int(11) DEFAULT NULL COMMENT '当日新增确诊',
59 | `suspect` int(11) DEFAULT NULL COMMENT '剩余疑似',
60 | `suspect_add` int(11) DEFAULT NULL COMMENT '当日新增疑似',
61 | `heal` int(11) DEFAULT NULL COMMENT '累计治愈',
62 | `heal_add` int(11) DEFAULT NULL COMMENT '当日新增治愈',
63 | `dead` int(11) DEFAULT NULL COMMENT '累计死亡',
64 | `dead_add` int(11) DEFAULT NULL COMMENT '当日新增死亡',
65 | PRIMARY KEY (`ds`) USING BTREE
66 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
67 | /*!40101 SET character_set_client = @saved_cs_client */;
68 |
69 | --
70 | -- Dumping data for table `history`
71 | --
72 |
73 | LOCK TABLES `history` WRITE;
74 | /*!40000 ALTER TABLE `history` DISABLE KEYS */;
75 | INSERT INTO `history` VALUES ('2020-01-13 00:00:00',41,NULL,0,NULL,0,NULL,1,NULL),('2020-01-14 00:00:00',41,NULL,0,NULL,0,NULL,1,NULL),('2020-01-15 00:00:00',41,NULL,0,NULL,5,NULL,2,NULL),('2020-01-16 00:00:00',45,NULL,0,NULL,8,NULL,2,NULL),('2020-01-17 00:00:00',62,NULL,0,NULL,12,NULL,2,NULL),('2020-01-18 00:00:00',198,NULL,0,NULL,17,NULL,3,NULL),('2020-01-19 00:00:00',275,NULL,0,NULL,18,NULL,4,NULL),('2020-01-20 00:00:00',291,77,54,27,25,0,6,0),('2020-01-21 00:00:00',440,149,37,53,25,0,9,3),('2020-01-22 00:00:00',574,131,393,257,25,0,17,8),('2020-01-23 00:00:00',835,259,1072,680,34,6,25,8),('2020-01-24 00:00:00',1297,444,1965,1118,38,3,41,16),('2020-01-25 00:00:00',1985,688,2684,1309,49,11,56,15),('2020-01-26 00:00:00',2761,769,5794,3806,51,2,80,24),('2020-01-27 00:00:00',4535,1771,6973,2077,60,9,106,26),('2020-01-28 00:00:00',5997,1459,9239,3248,103,43,132,26),('2020-01-29 00:00:00',7736,1737,12167,4148,124,21,170,38),('2020-01-30 00:00:00',9720,1982,15238,4812,171,47,213,43),('2020-01-31 00:00:00',11821,2102,17988,5019,243,72,259,46),('2020-02-01 00:00:00',14411,2590,19544,4562,328,85,304,45),('2020-02-02 00:00:00',17238,2829,21558,5173,475,147,361,57),('2020-02-03 00:00:00',20471,3235,23214,5072,632,157,425,64),('2020-02-04 00:00:00',24363,3893,23260,3971,892,262,491,65),('2020-02-05 00:00:00',28060,3697,24702,5328,1153,261,564,73),('2020-02-06 00:00:00',31211,3143,26359,4833,1542,387,637,73),('2020-02-07 00:00:00',34598,3401,27657,4214,2052,510,723,86),('2020-02-08 00:00:00',37251,2656,28942,3916,2651,600,812,89),('2020-02-09 00:00:00',40235,3062,23589,4008,3283,632,909,97),('2020-02-10 00:00:00',42708,2484,21675,3536,3998,716,1017,108),('2020-02-11 00:00:00',44730,2022,16067,3342,4742,744,1114,97),('2020-02-12 00:00:00',59882,15153,13435,2807,5915,1173,1368,254),('2020-02-13 00:00:00',63932,5093,10109,2450,6728,1083,1381,121),('2020-02-14 00:00:00',66576,2644,8969,2277,8101,1373,1524,143),('2020-02-15 00:00:00',68584,2009,8228,1918,9425,1324,1666,142),('2020-02-16 00:00:00',70635,2051,7264,1563,10853,1425,1772,105),('2020-02-17 00:00:00',72528,1891,6242,1432,12561,1701,1870,98),('2020-02-18 00:00:00',74279,1751,5248,1185,14387,1826,2006,136),('2020-02-19 00:00:00',75002,820,4922,1277,16157,1781,2121,115),('2020-02-20 00:00:00',75993,892,5206,1614,18266,2109,2239,118),('2020-02-21 00:00:00',76392,399,5365,1361,20673,2394,2348,109),('2020-02-22 00:00:00',77041,649,4148,882,22907,2235,2445,97),('2020-02-23 00:00:00',77262,416,3434,620,24757,1850,2595,150),('2020-02-24 00:00:00',77779,517,2824,530,27353,2596,2666,71),('2020-02-25 00:00:00',78190,411,2491,439,29775,2422,2718,52),('2020-02-26 00:00:00',78630,440,2358,508,32531,2756,2747,29),('2020-02-27 00:00:00',78959,329,2308,452,36157,3626,2791,44),('2020-02-28 00:00:00',79389,430,1418,248,39049,2892,2838,47),('2020-02-29 00:00:00',79968,579,851,132,41675,2626,2873,35),('2020-03-01 00:00:00',80174,206,715,141,44518,2843,2915,42),('2020-03-02 00:00:00',80302,128,587,129,47260,2742,2946,31),('2020-03-03 00:00:00',80422,120,520,143,49914,2654,2984,38),('2020-03-04 00:00:00',80565,143,522,143,52109,2195,3015,31),('2020-03-05 00:00:00',80710,145,482,102,53793,1684,3045,30),('2020-03-06 00:00:00',80813,103,502,99,55477,1684,3073,28),('2020-03-07 00:00:00',80859,46,458,84,57143,1666,3100,27),('2020-03-08 00:00:00',80904,45,421,60,58684,1541,3123,23),('2020-03-09 00:00:00',80924,20,349,36,59982,1298,3140,17),('2020-03-10 00:00:00',80955,31,285,31,61567,1585,3162,22),('2020-03-11 00:00:00',80992,25,253,33,62887,1320,3173,11),('2020-03-12 00:00:00',81003,11,147,33,64216,1329,3180,7),('2020-03-13 00:00:00',81021,18,115,17,65649,1433,3194,14),('2020-03-14 00:00:00',81048,27,113,39,67022,1373,3204,10),('2020-03-15 00:00:00',81077,29,134,41,67863,841,3218,14),('2020-03-16 00:00:00',81116,39,128,45,68799,936,3231,13),('2020-03-17 00:00:00',81151,35,119,21,69725,926,3242,11),('2020-03-18 00:00:00',81235,84,105,23,70547,822,3250,8),('2020-03-19 00:00:00',81300,65,104,31,71284,737,3253,3),('2020-03-20 00:00:00',81416,116,106,36,71876,592,3261,8),('2020-03-21 00:00:00',81498,82,118,45,72382,506,3267,6),('2020-03-22 00:00:00',81600,102,136,47,72841,459,3276,9),('2020-03-23 00:00:00',81747,147,132,35,73299,458,3283,7),('2020-03-24 00:00:00',81846,99,134,33,73791,492,3287,4),('2020-03-25 00:00:00',81960,114,159,58,74196,405,3293,6),('2020-03-26 00:00:00',82078,118,189,49,74737,541,3298,5),('2020-03-27 00:00:00',82213,135,184,29,75122,385,3301,3),('2020-03-28 00:00:00',82341,128,174,28,75600,478,3306,5),('2020-03-29 00:00:00',82447,106,168,17,75937,337,3311,5),('2020-03-30 00:00:00',82545,98,183,44,76225,288,3314,3),('2020-03-31 00:00:00',82631,86,172,26,76415,190,3321,7),('2020-04-01 00:00:00',82724,93,153,20,76610,195,3327,6),('2020-04-02 00:00:00',82802,78,135,12,76785,175,3331,4),('2020-04-03 00:00:00',82861,73,114,11,76984,199,3335,4),('2020-04-04 00:00:00',82930,55,107,11,77210,226,3338,3),('2020-04-05 00:00:00',83005,75,88,10,77348,138,3340,1),('2020-04-06 00:00:00',83071,66,89,12,77450,102,3340,0);
76 | /*!40000 ALTER TABLE `history` ENABLE KEYS */;
77 | UNLOCK TABLES;
78 |
79 | --
80 | -- Table structure for table `hotsearch`
81 | --
82 |
83 | DROP TABLE IF EXISTS `hotsearch`;
84 | /*!40101 SET @saved_cs_client = @@character_set_client */;
85 | /*!50503 SET character_set_client = utf8mb4 */;
86 | CREATE TABLE `hotsearch` (
87 | `id` int(11) NOT NULL AUTO_INCREMENT,
88 | `dt` datetime DEFAULT NULL,
89 | `content` varchar(255) DEFAULT NULL,
90 | PRIMARY KEY (`id`)
91 | ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
92 | /*!40101 SET character_set_client = @saved_cs_client */;
93 |
94 | --
95 | -- Dumping data for table `hotsearch`
96 | --
97 |
98 | LOCK TABLES `hotsearch` WRITE;
99 | /*!40000 ALTER TABLE `hotsearch` DISABLE KEYS */;
100 | INSERT INTO `hotsearch` VALUES (1,'2020-04-08 15:38:46','新型肺炎实时动态1634584'),(2,'2020-04-08 15:38:46','女孩高喊我的武汉回来了1478546'),(3,'2020-04-08 15:38:46','英国新冠ICU病房画面756245'),(4,'2020-04-08 15:38:46','武汉解封灯光秀672165'),(5,'2020-04-08 15:38:46','全球护士缺口达590万559541'),(6,'2020-04-08 15:38:46','袁隆平称中国不会出现粮荒483645'),(7,'2020-04-08 15:38:46','英国请求美国提供200台呼吸机468751'),(8,'2020-04-08 15:38:46','绥芬河市所有小区实行封闭管理456542'),(9,'2020-04-08 15:38:46','特朗普与3M公司和解436524'),(10,'2020-04-08 15:38:46','国外病死率高于中国病死率397894'),(11,'2020-04-08 15:38:46','以色列将在全国范围内实施封城385642'),(12,'2020-04-08 15:38:46','广州已隔离六千余名外籍人员369652'),(13,'2020-04-08 15:38:46','国家卫健委回应张静静去世356410'),(14,'2020-04-08 15:38:46','武汉女子给江苏护师寄10箱鸭脖348765'),(15,'2020-04-08 15:38:46','张静静在返程飞机上的一幕333651'),(16,'2020-04-08 15:38:46','毛坦厂高三考生广场戴口罩晨读328752'),(17,'2020-04-08 15:38:46','法国医生称把非洲当疫苗试验场318425'),(18,'2020-04-08 15:38:46','以色列将在全国范围内实施封城295510'),(19,'2020-04-08 15:38:46','柏林请求德国军方保护口罩运输289648'),(20,'2020-04-08 15:38:46','无接触快递架死件越来越多257826');
101 | /*!40000 ALTER TABLE `hotsearch` ENABLE KEYS */;
102 | UNLOCK TABLES;
103 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
104 |
105 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
106 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
107 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
108 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
109 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
110 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
111 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
112 |
113 | -- Dump completed on 2020-04-09 22:11:36
114 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/spider.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import json
3 | import time
4 | import pymysql
5 | from selenium.webdriver import Chrome,ChromeOptions
6 | import traceback
7 | import sys
8 |
9 | #返回历史数据和当日详细数据
10 | def get_tencent_data():
11 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
12 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other"
13 | headers = {
14 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
15 | }
16 | r1 = requests.get(url1, headers)
17 | r2 = requests.get(url2, headers)
18 |
19 | #json字符串转字典
20 | res1 = json.loads(r1.text)
21 | res2 = json.loads(r2.text)
22 |
23 | data_all1 = json.loads(res1["data"])
24 | data_all2 = json.loads(res2["data"])
25 |
26 | #历史数据
27 | history = {}
28 | for i in data_all2["chinaDayList"]:
29 | ds = "2020." + i["date"]
30 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
31 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
32 | confirm = i["confirm"]
33 | suspect = i["suspect"]
34 | heal = i["heal"]
35 | dead = i["dead"]
36 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead}
37 | for i in data_all2["chinaDayAddList"]:
38 | ds = "2020." + i["date"]
39 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
40 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
41 | confirm = i["confirm"]
42 | suspect = i["suspect"]
43 | heal = i["heal"]
44 | dead = i["dead"]
45 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead})
46 |
47 | #当日详细数据
48 | details = []
49 | update_time = data_all1["lastUpdateTime"]
50 | data_country = data_all1["areaTree"] #list 25个国家
51 | data_province = data_country[0]["children"] #中国各省
52 | for pro_infos in data_province:
53 | province = pro_infos["name"] #省名
54 | for city_infos in pro_infos["children"]:
55 | city = city_infos["name"]
56 | confirm = city_infos["total"]["confirm"]
57 | confirm_add = city_infos["today"]["confirm"]
58 | heal = city_infos["total"]["heal"]
59 | dead = city_infos["total"]["dead"]
60 | details.append([update_time, province, city, confirm, confirm_add, heal, dead])
61 | return history, details
62 |
63 |
64 | def get_conn():
65 | #建立连接
66 | conn = pymysql.connect(host="127.0.0.1", user="root", password="root", db="cov", charset="utf8")
67 | #创建游标
68 | cursor = conn.cursor()
69 | return conn,cursor
70 |
71 | def close_conn(conn,cursor):
72 | if cursor:
73 | cursor.close()
74 | if conn:
75 | conn.close()
76 |
77 | #插入details数据
78 | def update_details():
79 | cursor = None
80 | conn = None
81 | try:
82 | li = get_tencent_data()[1] #0是历史数据,1是当日详细数据
83 | conn,cursor = get_conn()
84 | sql = "insert into details(update_time,province,city,confirm,confirm_add,heal,dead) values(%s,%s,%s,%s,%s,%s,%s)"
85 | sql_query = "select %s=(select update_time from details order by id desc limit 1)" #对比当前最大时间戳
86 | #对比当前最大时间戳
87 | cursor.execute(sql_query,li[0][0])
88 | if not cursor.fetchone()[0]:
89 | print(f"{time.asctime()}开始更新数据")
90 | for item in li:
91 | cursor.execute(sql,item)
92 | conn.commit()
93 | print(f"{time.asctime()}更新到最新数据")
94 | else:
95 | print(f"{time.asctime()}已是最新数据!")
96 | except:
97 | traceback.print_exc()
98 | finally:
99 | close_conn(conn,cursor)
100 |
101 |
102 | #插入history数据
103 | def insert_history():
104 | cursor = None
105 | conn = None
106 | try:
107 | dic = get_tencent_data()[0]#0代表历史数据字典
108 | print(f"{time.asctime()}开始插入历史数据")
109 | conn,cursor = get_conn()
110 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)"
111 | for k,v in dic.items():
112 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"),
113 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"),
114 | v.get("dead"),v.get("dead_add")])
115 | conn.commit()
116 | print(f"{time.asctime()}插入历史数据完毕")
117 | except:
118 | traceback.print_exc()
119 | finally:
120 | close_conn(conn,cursor)
121 |
122 |
123 | #更新历史数据
124 | def update_history():
125 | cursor = None
126 | conn = None
127 | try:
128 | dic = get_tencent_data()[0]#0代表历史数据字典
129 | print(f"{time.asctime()}开始更新历史数据")
130 | conn,cursor = get_conn()
131 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)"
132 | sql_query = "select confirm from history where ds=%s"
133 | for k,v in dic.items():
134 | if not cursor.execute(sql_query,k):
135 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"),
136 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"),
137 | v.get("dead"),v.get("dead_add")])
138 | conn.commit()
139 | print(f"{time.asctime()}历史数据更新完毕")
140 | except:
141 | traceback.print_exc()
142 | finally:
143 | close_conn(conn,cursor)
144 |
145 |
146 | #返回百度疫情热搜
147 | def get_baidu_hot():
148 | option = ChromeOptions() #创建谷歌浏览器实例
149 | option.add_argument("--headless")#隐藏浏览器
150 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样
151 |
152 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1'
153 | brower = Chrome(options = option)
154 | brower.get(url)
155 | #找到展开按钮
156 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮
157 | but.click() #点击展开
158 |
159 | time.sleep(1)#爬虫与反爬,模拟人等待1秒
160 |
161 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]')
162 | context = [i.text for i in c] #获取标签内容
163 | print(context)
164 | return context
165 |
166 |
167 | #将疫情热搜插入数据库
168 | def update_hotsearch():
169 | cursor = None
170 | conn = None
171 | try:
172 | context = get_baidu_hot()
173 | print(f"{time.asctime()}开始更新热搜数据")
174 | conn, cursor = get_conn()
175 | sql = "insert into hotsearch(dt,content) values(%s,%s)"
176 | ts = time.strftime("%Y-%m-%d %X")
177 | for i in context:
178 | cursor.execute(sql,(ts,i)) #插入数据
179 | conn.commit() #提交事务保存数据
180 | print(f"{time.asctime()}数据更新完毕")
181 | except:
182 | traceback.print_exc()
183 | finally:
184 | close_conn(conn,cursor)
185 |
186 |
187 |
188 | # his,de = get_tencent_data()
189 | # print(his)
190 | # print(de)
191 | if __name__ == "__main__":
192 | insert_history()
193 | update_details()
194 | update_hotsearch()
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/static/css/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | background: #333;
4 | }
5 |
6 | #title {
7 | position: absolute;
8 | width: 40%;
9 | height: 10%;
10 | top: 0;
11 | left: 30%;
12 | color: white;
13 | font-size: 40px;
14 |
15 | display: flex;
16 | align-items: center;
17 | justify-content: center;
18 | }
19 |
20 | #tim {
21 | position: absolute;
22 | /* width: 30%; */
23 | height: 10%;
24 | top: 5%;
25 | right: 2%;
26 | color: #FFFFFF;
27 | font-size: 20px;
28 | }
29 |
30 | #c1 {
31 | position: absolute;
32 | width: 40%;
33 | height: 30%;
34 | top: 10%;
35 | left: 30%;
36 | /* background: #777777; */
37 | }
38 |
39 | .num {
40 | width: 25%;
41 | float: left;
42 | display: flex;
43 | align-items: center;
44 | justify-content: center;
45 | color: gold;
46 | font-size: 20px;
47 | }
48 | .txt {
49 | width: 25%;
50 | float: left;
51 | font-family: "幼圆";
52 | display: flex;
53 | align-items: center;
54 | justify-content: center;
55 | font-size: 20px;
56 | color: white;
57 | }
58 |
59 | #c2 {
60 | position: absolute;
61 | width: 40%;
62 | height: 60%;
63 | top: 40%;
64 | left: 30%;
65 | background: #888888;
66 | }
67 |
68 | #l1 {
69 | position: absolute;
70 | width: 30%;
71 | height: 45%;
72 | top: 10%;
73 | left: 0%;
74 | background: #666666;
75 | }
76 |
77 | #l2 {
78 | position: absolute;
79 | width: 30%;
80 | height: 45%;
81 | top: 55%;
82 | left: 0%;
83 | background: #777777;
84 | }
85 |
86 | #r1 {
87 | position: absolute;
88 | width: 30%;
89 | height: 45%;
90 | top: 10%;
91 | right: 0%;
92 | background: #666666;
93 | }
94 |
95 | #r2 {
96 | position: absolute;
97 | width: 30%;
98 | height: 45%;
99 | top: 55%;
100 | right: 0%;
101 | background: #777777;
102 | }
103 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/static/js/controller.js:
--------------------------------------------------------------------------------
1 | function gettime() {
2 | $.ajax({
3 | url: "/time",
4 | timeout: 10000, //超时时间设置为10秒;
5 | success: function(data) {
6 | $("#tim").html(data)
7 | },
8 | error: function(xhr, type, errorThrown) {
9 | }
10 | });
11 | }
12 |
13 | function get_c1_data() {
14 | $.ajax({
15 | url: "/c1",
16 | success: function(data) {
17 | $(".num h1").eq(0).text(data.confirm);
18 | $(".num h1").eq(1).text(data.suspect);
19 | $(".num h1").eq(2).text(data.heal);
20 | $(".num h1").eq(3).text(data.dead);
21 | },
22 | error: function(xhr, type, errorThrown) {
23 | }
24 | })
25 | }
26 |
27 | function get_c2_data() {
28 | $.ajax({
29 | url:"/c2",
30 | success: function(data) {
31 | ec_center_option.series[0].data=data.data
32 | ec_center.setOption(ec_center_option)
33 | },
34 | error: function(xhr, type, errorThrown) {
35 |
36 | }
37 | })
38 | }
39 |
40 | function get_l1_data() {
41 | $.ajax({
42 | url:"/l1",
43 | success: function(data) {
44 | ec_left1_Option.xAxis[0].data=data.day
45 | ec_left1_Option.series[0].data=data.confirm
46 | ec_left1_Option.series[1].data=data.suspect
47 | ec_left1_Option.series[2].data=data.heal
48 | ec_left1_Option.series[3].data=data.dead
49 | ec_left1.setOption(ec_left1_Option)
50 | },
51 | error: function(xhr, type, errorThrown) {
52 |
53 | }
54 | })
55 | }
56 |
57 | function get_l2_data() {
58 | $.ajax({
59 | url:"/l2",
60 | success: function(data) {
61 | ec_left2_Option.xAxis[0].data=data.day
62 | ec_left2_Option.series[0].data=data.confirm_add
63 | ec_left2_Option.series[1].data=data.suspect_add
64 | ec_left2.setOption(ec_left2_Option)
65 | },
66 | error: function(xhr, type, errorThrown) {
67 | }
68 | })
69 | }
70 |
71 | function get_r1_data() {
72 | $.ajax({
73 | url: "/r1",
74 | success: function (data) {
75 | ec_right1_option.xAxis.data=data.city;
76 | ec_right1_option.series[0].data=data.confirm;
77 | ec_right1.setOption(ec_right1_option);
78 | }
79 | })
80 | }
81 |
82 | function get_r2_data() {
83 | $.ajax({
84 | url: "/r2",
85 | success: function (data) {
86 | ec_right2_option.series[0].data=data.kws;
87 | ec_right2.setOption(ec_right2_option);
88 | }
89 | })
90 | }
91 |
92 |
93 | gettime()
94 | get_c1_data()
95 | get_c2_data()
96 | get_l1_data()
97 | get_l2_data()
98 | get_r1_data()
99 | get_r2_data()
100 |
101 | setInterval(gettime,1000)
102 | setInterval(get_c1_data,1000*10)
103 | setInterval(get_c2_data,10000*10)
104 | setInterval(get_l1_data,10000*10)
105 | setInterval(get_l2_data,10000*10)
106 | setInterval(get_r1_data,10000*10)
107 | setInterval(get_r2_data,10000*10)
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/static/js/ec_center.js:
--------------------------------------------------------------------------------
1 | var ec_center = echarts.init(document.getElementById('c2'), "dark");
2 |
3 | var mydata = [{'name': '上海', 'value': 318}, {'name': '云南', 'value': 162}]
4 |
5 | var ec_center_option = {
6 | title: {
7 | text: '',
8 | subtext: '',
9 | x: 'left'
10 | },
11 | tooltip: {
12 | trigger: 'item'
13 | },
14 | //左侧小导航图标
15 | visualMap: {
16 | show: true,
17 | x: 'left',
18 | y: 'bottom',
19 | textStyle: {
20 | fontSize: 8,
21 | },
22 | splitList: [{ start: 1,end: 9 },
23 | {start: 10, end: 99 },
24 | { start: 100, end: 999 },
25 | { start: 1000, end: 9999 },
26 | { start: 10000 }],
27 | color: ['#8A3310', '#C64918', '#E55B25', '#F2AD92', '#F9DCD1']
28 | },
29 | //配置属性
30 | series: [{
31 | name: '累计确诊人数',
32 | type: 'map',
33 | mapType: 'china',
34 | roam: false, //拖动和缩放
35 | itemStyle: {
36 | normal: {
37 | borderWidth: .5, //区域边框宽度
38 | borderColor: '#009fe8', //区域边框颜色
39 | areaColor: "#ffefd5", //区域颜色
40 | },
41 | emphasis: { //鼠标滑过地图高亮的相关设置
42 | borderWidth: .5,
43 | borderColor: '#4b0082',
44 | areaColor: "#fff",
45 | }
46 | },
47 | label: {
48 | normal: {
49 | show: true, //省份名称
50 | fontSize: 8,
51 | },
52 | emphasis: {
53 | show: true,
54 | fontSize: 8,
55 | }
56 | },
57 | data:[] //mydata //数据
58 | }]
59 | };
60 | ec_center.setOption(ec_center_option)
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/static/js/ec_left1.js:
--------------------------------------------------------------------------------
1 | var ec_left1 = echarts.init(document.getElementById('l1'), "dark");
2 |
3 | var ec_left1_Option = {
4 | //标题样式
5 | title: {
6 | text: "全国累计趋势",
7 | textStyle: {
8 | // color: 'white',
9 | },
10 | left: 'left',
11 | },
12 | tooltip: {
13 | trigger: 'axis',
14 | //指示器
15 | axisPointer: {
16 | type: 'line',
17 | lineStyle: {
18 | color: '#7171C6'
19 | }
20 | },
21 | },
22 | legend: {
23 | data: ['累计确诊', '现有疑似', "累计治愈", "累计死亡"],
24 | left: "right"
25 | },
26 |
27 | //图形位置
28 | grid: {
29 | left: '4%',
30 | right: '6%',
31 | bottom: '4%',
32 | top: 50,
33 | containLabel: true
34 | },
35 | xAxis: [{
36 | type: 'category',
37 | //x轴坐标点开始与结束点位置都不在最边缘
38 | // boundaryGap : true,
39 | data: []//
40 | // data: ['01.20', '01.21', '01.22']
41 | }],
42 | yAxis: [{
43 | type: 'value',
44 | //y轴字体设置
45 | axisLabel: {
46 | show: true,
47 | color: 'white',
48 | fontSize: 12,
49 | formatter: function(value) {
50 | if (value >= 1000) {
51 | value = value / 1000 + 'k';
52 | }
53 | return value;
54 | }
55 | },
56 | //y轴线设置显示
57 | axisLine: {
58 | show: true
59 | },
60 | //与x轴平行的线样式
61 | splitLine: {
62 | show: true,
63 | lineStyle: {
64 | color: '#17273B',
65 | width: 1,
66 | type: 'solid',
67 | }
68 | }
69 | }],
70 | series: [{
71 | name: "累计确诊",
72 | type: 'line',
73 | smooth: true,
74 | data: []//[260, 406, 529]
75 | }, {
76 | name: "现有疑似",
77 | type: 'line',
78 | smooth: true,
79 | data: []//[54, 37, 3935]
80 | },
81 | {
82 | name: "累计治愈",
83 | type: 'line',
84 | smooth: true,
85 | data: []//[25, 25, 25]
86 | }, {
87 | name: "累计死亡",
88 | type: 'line',
89 | smooth: true,
90 | data: []//[6, 9, 17]
91 | }]
92 | };
93 |
94 | ec_left1.setOption(ec_left1_Option)
95 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/static/js/ec_left2.js:
--------------------------------------------------------------------------------
1 | var ec_left2 = echarts.init(document.getElementById('l2'), "dark");
2 | var ec_left2_Option = {
3 | tooltip: {
4 | trigger: 'axis',
5 | //指示器
6 | axisPointer: {
7 | type: 'line',
8 | lineStyle: {
9 | color: '#7171C6'
10 | }
11 | },
12 | },
13 | legend: {
14 | data: ['新增确诊', '新增疑似'],
15 | left: "right"
16 | },
17 | //标题样式
18 | title: {
19 | text: "全国新增趋势",
20 | textStyle: {
21 | color: 'white',
22 | },
23 | left: 'left'
24 | },
25 | //图形位置
26 | grid: {
27 | left: '4%',
28 | right: '6%',
29 | bottom: '4%',
30 | top: 50,
31 | containLabel: true
32 | },
33 | xAxis: [{
34 | type: 'category',
35 | //x轴坐标点开始与结束点位置都不在最边缘
36 | // boundaryGap : true,
37 |
38 | data: []
39 | }],
40 | yAxis: [{
41 | type: 'value',
42 | //y轴字体设置
43 |
44 | //y轴线设置显示
45 | axisLine: {
46 | show: true
47 | },
48 | axisLabel: {
49 | show: true,
50 | color: 'white',
51 | fontSize: 12,
52 | formatter: function(value) {
53 | if (value >= 1000) {
54 | value = value / 1000 + 'k';
55 | }
56 | return value;
57 | }
58 | },
59 | //与x轴平行的线样式
60 | splitLine: {
61 | show: true,
62 | lineStyle: {
63 | color: '#17273B',
64 | width: 1,
65 | type: 'solid',
66 | }
67 | }
68 | }],
69 | series: [{
70 | name: "新增确诊",
71 | type: 'line',
72 | smooth: true,
73 | data: []
74 | }, {
75 | name: "新增疑似",
76 | type: 'line',
77 | smooth: true,
78 | data: []
79 | }]
80 | };
81 |
82 | ec_left2.setOption(ec_left2_Option)
83 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/static/js/ec_right1.js:
--------------------------------------------------------------------------------
1 | var ec_right1 = echarts.init(document.getElementById('r1'),"dark");
2 | var ec_right1_option = {
3 | //标题样式
4 | title : {
5 | text : "非湖北地区城市确诊TOP5",
6 | textStyle : {
7 | color : 'white',
8 | },
9 | left : 'left'
10 | },
11 | color: ['#3398DB'],
12 | tooltip: {
13 | trigger: 'axis',
14 | axisPointer: { // 坐标轴指示器,坐标轴触发有效
15 | type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
16 | }
17 | },
18 | xAxis: {
19 | type: 'category',
20 | data: []
21 | },
22 | yAxis: {
23 | type: 'value'
24 | },
25 | series: [{
26 | data: [],
27 | type: 'bar',
28 | barMaxWidth:"50%"
29 | }]
30 | };
31 | ec_right1.setOption(ec_right1_option)
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/static/js/ec_right2.js:
--------------------------------------------------------------------------------
1 | var ec_right2 = echarts.init(document.getElementById('r2'), "dark");
2 |
3 | var ddd = [{'name': '肺炎', 'value': '12734670'}, {'name': '实时', 'value': '12734670'},
4 | {'name': '新型', 'value': '12734670'}]
5 | var ec_right2_option = {
6 | // backgroundColor: '#515151',
7 | title : {
8 | text : "今日疫情热搜",
9 | textStyle : {
10 | color : 'white',
11 | },
12 | left : 'left'
13 | },
14 | tooltip: {
15 | show: false
16 | },
17 | series: [{
18 | type: 'wordCloud',
19 | // drawOutOfBound:true,
20 | gridSize: 1,
21 | sizeRange: [12, 55],
22 | rotationRange: [-45, 0, 45, 90],
23 | // maskImage: maskImage,
24 |
25 | //这是让词云图的颜色随机
26 | textStyle: {
27 | normal: {
28 | color: function () {
29 | return 'rgb(' +
30 | Math.round(Math.random() * 255) +
31 | ', ' + Math.round(Math.random() * 255) +
32 | ', ' + Math.round(Math.random() * 255) + ')'
33 | }
34 | }
35 | },
36 | // left: 'center',
37 | // top: 'center',
38 | // // width: '96%',
39 | // // height: '100%',
40 | right: null,
41 | bottom: null,
42 | // width: 300,
43 | // height: 200,
44 | // top: 20,
45 | data: []
46 | }]
47 | }
48 |
49 | ec_right2.setOption(ec_right2_option);
50 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | My Page
6 |
7 |
8 |
9 | 疫情追踪
10 | 实时报道
11 |
12 |
28 |
29 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/templates/main.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 疫情监控
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 全国疫情实时追踪
14 |
15 | 我是左1
16 | 我是左2
17 |
18 |
19 |
20 |
21 |
22 |
累计确诊
23 |
剩余疑似
24 |
累计治愈
25 |
累计死亡
26 |
27 | 我是中2
28 | 我是右1
29 | 我是右2
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/templates/test.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
27 |
28 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/utils.py:
--------------------------------------------------------------------------------
1 | import time
2 | import pymysql
3 |
4 |
5 | def get_time():
6 | time_str = time.strftime("%Y{}%m{}%d{} %X")
7 | return time_str.format("年","月","日") #因为直接写不支持直接识别中文,才用format写
8 |
9 |
10 | #return: 连接,游标
11 | def get_conn():
12 |
13 | # 创建连接
14 | conn = pymysql.connect(host="127.0.0.1",
15 | user="root",
16 | password="root",
17 | db="cov",
18 | charset="utf8")
19 | # 创建游标
20 | cursor = conn.cursor()# 执行完毕返回的结果集默认以元组显示
21 | return conn, cursor
22 |
23 |
24 | def close_conn(conn, cursor):
25 | cursor.close()
26 | conn.close()
27 |
28 | def query(sql,*args):
29 | """
30 | 封装通用查询
31 | :param sql:
32 | :param args:
33 | :return: 返回查询到的结果,((),(),)的形式
34 | """
35 | conn, cursor = get_conn()
36 | cursor.execute(sql,args)
37 | res = cursor.fetchall()
38 | close_conn(conn, cursor)
39 | return res
40 |
41 |
42 | def get_c1_data():
43 | """
44 | :return: 返回大屏div id=c1 的数据
45 | """
46 | # 因为会更新多次数据,取时间戳最新的那组数据
47 | sql = "select sum(confirm)," \
48 | "(select suspect from history order by ds desc limit 1)," \
49 | "sum(heal)," \
50 | "sum(dead) " \
51 | "from details " \
52 | "where update_time=(select update_time from details order by update_time desc limit 1) "
53 | res = query(sql)
54 | return res[0]
55 |
56 | #返回各省数据
57 | def get_c2_data():
58 | # 因为会更新多次数据,取时间戳最新的那组数据
59 | sql = "select province,sum(confirm) from details " \
60 | "where update_time=(select update_time from details " \
61 | "order by update_time desc limit 1) " \
62 | "group by province"
63 | res = query(sql)
64 | return res
65 |
66 |
67 | def get_l1_data():
68 |
69 | sql = "select ds,confirm,suspect,heal,dead from history"
70 | res = query(sql)
71 | return res
72 |
73 | def get_l2_data():
74 |
75 | sql = "select ds,confirm_add,suspect_add from history"
76 | res = query(sql)
77 | return res
78 |
79 |
80 | #返回非湖北地区城市确诊人数前5名
81 | def get_r1_data():
82 |
83 | sql = 'SELECT city,confirm FROM ' \
84 | '(select city,confirm from details ' \
85 | 'where update_time=(select update_time from details order by update_time desc limit 1) ' \
86 | 'and province not in ("湖北","北京","上海","天津","重庆","香港","台湾") ' \
87 | 'union all ' \
88 | 'select province as city,sum(confirm) as confirm from details ' \
89 | 'where update_time=(select update_time from details order by update_time desc limit 1) ' \
90 | 'and province in ("北京","上海","天津","重庆","香港","台湾") group by province) as a ' \
91 | 'ORDER BY confirm DESC LIMIT 5'
92 | res = query(sql)
93 | return res
94 |
95 | #返回最近的20条热搜
96 | def get_r2_data():
97 | sql = 'select content from hotsearch order by id desc limit 20'
98 | res = query(sql) # 格式 (('民警抗疫一线奋战16天牺牲1037364',), ('四川再派两批医疗队1537382',)
99 | return res
100 |
101 |
102 | # if __name__ == "__main__":
103 | # print(get_r2_data())
104 |
105 |
106 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/爬取并处理腾讯疫情数据.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import json
3 | import time
4 |
5 | #返回历史数据和当日详细数据
6 | def get_tencent_data():
7 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
8 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other"
9 | headers = {
10 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
11 | }
12 | r1 = requests.get(url1, headers)
13 | r2 = requests.get(url2, headers)
14 |
15 | #json字符串转字典
16 | res1 = json.loads(r1.text)
17 | res2 = json.loads(r2.text)
18 |
19 | data_all1 = json.loads(res1["data"])
20 | data_all2 = json.loads(res2["data"])
21 |
22 | #历史数据
23 | history = {}
24 | for i in data_all2["chinaDayList"]:
25 | ds = "2020." + i["date"]
26 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
27 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
28 | confirm = i["confirm"]
29 | suspect = i["suspect"]
30 | heal = i["heal"]
31 | dead = i["dead"]
32 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead}
33 | for i in data_all2["chinaDayAddList"]:
34 | ds = "2020." + i["date"]
35 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间
36 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式
37 | confirm = i["confirm"]
38 | suspect = i["suspect"]
39 | heal = i["heal"]
40 | dead = i["dead"]
41 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead})
42 |
43 | #当日详细数据
44 | details = []
45 | update_time = data_all1["lastUpdateTime"]
46 | data_country = data_all1["areaTree"] #list 25个国家
47 | data_province = data_country[0]["children"] #中国各省
48 | for pro_infos in data_province:
49 | province = pro_infos["name"] #省名
50 | for city_infos in pro_infos["children"]:
51 | city = city_infos["name"]
52 | confirm = city_infos["total"]["confirm"]
53 | confirm_add = city_infos["today"]["confirm"]
54 | heal = city_infos["total"]["heal"]
55 | dead = city_infos["total"]["dead"]
56 | details.append([update_time, province, city, confirm, confirm_add, heal, dead])
57 | return history, details
58 |
59 |
60 |
61 |
62 |
63 | his,de = get_tencent_data()
64 | print(his)
65 | print(de)
66 |
--------------------------------------------------------------------------------
/开发过程中的版本/COVID-19_Tracking_本机/爬取百度热搜.py:
--------------------------------------------------------------------------------
1 | from selenium.webdriver import Chrome,ChromeOptions
2 | import time
3 |
4 | option = ChromeOptions()
5 | option.add_argument("--headless")#隐藏浏览器
6 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样
7 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1'
8 |
9 | brower = Chrome(options = option)
10 | #brower = Chrome()
11 | brower.get(url)
12 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮
13 | but.click() #点击展开
14 |
15 |
16 | time.sleep(1)#爬虫与反爬,模拟人等待1秒
17 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]')
18 | for i in c:
19 | print(i.text)
20 |
--------------------------------------------------------------------------------
/疫情数据网站.txt:
--------------------------------------------------------------------------------
1 | 各大平台疫情数据的网站
2 |
3 | https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1 百度
4 |
5 | https://news.qq.com//zt2020/page/feiyan.htm 腾讯
6 |
7 |
8 | 爬取腾讯yq数据
9 | https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5
10 |
11 | https://view.inews.qq.com/g2/getOnsInfo?name=disease_other
12 |
13 |
14 | 我们要爬取百度的疫情数据平台的今日疫情热搜
15 |
16 | https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1
17 |
--------------------------------------------------------------------------------