From 442409f87de7c37d4b88c3e9bf67c64408ead8ae Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Sat, 24 Apr 2021 11:12:39 +0800 Subject: [PATCH] update: database of China city, optimize IP data --- backend/ChinaCity.db | Bin 32768 -> 0 bytes backend/cityCN.db | Bin 0 -> 86016 bytes backend/{city.php => cityCN.php} | 6 ++-- backend/queryInfo.php | 50 ++++++++++++++++++++++++------- 4 files changed, 44 insertions(+), 12 deletions(-) delete mode 100644 backend/ChinaCity.db create mode 100644 backend/cityCN.db rename backend/{city.php => cityCN.php} (88%) diff --git a/backend/ChinaCity.db b/backend/ChinaCity.db deleted file mode 100644 index 07f9640e0b9594b7449255978cf95be28290b983..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 literal 0 HcmV?d00001 diff --git a/backend/city.php b/backend/cityCN.php similarity index 88% rename from backend/city.php rename to backend/cityCN.php index 796a5aa..1e1930b 100644 --- a/backend/city.php +++ b/backend/cityCN.php @@ -1,6 +1,6 @@ open('ChinaCity.db'); // 中国省市经纬度数据库 + $this->open('cityCN.db'); // 中国省市经纬度数据库 } } @@ -26,6 +26,8 @@ function getLoc($region, $city) { // 根据省份/城市信息查询经纬度 $query_str='SELECT * FROM main WHERE level1="'.$region.'" AND level2="-";'; // 尝试仅查询省份数据 $raw = $db->query($query_str)->fetchArray(SQLITE3_ASSOC); if (!$raw) { // 省份错误,返回北京经纬度 + $data['region'] = '北京'; + $data['city'] = '北京'; $data['lat'] = '39.91'; $data['lon'] = '116.73'; return $data; diff --git a/backend/queryInfo.php b/backend/queryInfo.php index a9a1acf..833b8e1 100644 --- a/backend/queryInfo.php +++ b/backend/queryInfo.php @@ -4,7 +4,7 @@ include("country.php"); include("qqwry.php"); include("ipinfo.php"); include("ipip.php"); -include("city.php"); +include("cityCN.php"); function getIPInfo($ip) { $specialInfo = checkSpecial($ip); // 检查是否为特殊IP段 @@ -40,21 +40,51 @@ function getIPInfo($ip) { if ($addr[0] == '中国' || $detail['country'] == '中国') { $info['country'] = 'CN - China(中国)'; $info['timezone'] = 'Asia/Shanghai'; - $flagErr = false; - if ($addr[1] == '' || $addr[2] == '') { - if ($detail['region'] != '' && $detail['city'] != '') { - $addr[1] = $detail['region']; // 修正IPIP.net数据 - $addr[2] = $detail['city']; - } else { - $flagErr = true; // 国内数据不全 + if ($detail['region'] == '台湾') { // 修正台湾数据带 "市" 或 "县" 的情况 + if (mb_substr($detail['city'], -1) == '市' || mb_substr($detail['city'], -1) == '县') { + $detail['city'] = mb_substr($detail['city'], 0, mb_strlen($detail['city']) - 1); } } - if (!$flagErr) { // 国内数据可用 - $cityLoc = getLoc($addr[1], $addr[2]); // 获取城市经纬度 + if ($detail['region'] == '' && $detail['city'] == '') { // 纯真库解析不出数据 + if ($addr[1] != '' || $addr[2] != '') { // IPIP数据不同时为空 + $detail['region'] = $addr[1]; + $detail['city'] = $addr[2]; + } + } else if ($detail['region'] == '' || $detail['city'] == '') { // 纯真库存在空数据 + if ($addr[1] != '' && $addr[2] != '') { // IPIP数据完整 + $detail['region'] = $addr[1]; // 修正纯真数据 + $detail['city'] = $addr[2]; + } + } + if ($detail['region'] != '' || $detail['city'] != '') { // 修正后数据不同时为空 + $cityLoc = getLoc($detail['region'], $detail['city']); // 获取城市经纬度 $info['region'] = $cityLoc['region']; $info['city'] = $cityLoc['city']; $info['loc'] = $cityLoc['lat'] . ',' . $cityLoc['lon']; } + if ($detail['isp'] == '教育网') { // 载入纯真库分析出的ISP数据 + $info['isp'] = 'China Education and Research Network'; + } else if ($detail['isp'] == '电信') { + $info['isp'] = 'China Telecom'; + } else if ($detail['isp'] == '联通') { + $info['isp'] = 'China Unicom Limited'; + } else if ($detail['isp'] == '移动') { + $info['isp'] = 'China Mobile Communications Corporation'; + } else if ($detail['isp'] == '铁通') { + $info['isp'] = 'China Tietong Telecom'; + } else if ($detail['isp'] == '广电网') { + $info['isp'] = 'Shaanxi Broadcast & TV Network Intermediary'; + } else if ($detail['isp'] == '鹏博士') { + $info['isp'] = 'Chengdu Dr.Peng Technology'; + } else if ($detail['isp'] == '长城') { + $info['isp'] = 'Great Wall Broadband Network Service'; + } else if ($detail['isp'] == '中华电信') { + $info['isp'] = 'ChungHwa Telecom'; + } else if ($detail['isp'] == '亚太电信') { + $info['isp'] = 'Asia Pacific Telecom'; + } else if ($detail['isp'] == '远传电信') { + $info['isp'] = 'Far EasTone Telecommunications'; + } } if (filter_var($ip, \FILTER_VALIDATE_IP,\FILTER_FLAG_IPV4)) { // 录入纯真库数据 $info['scope'] = tryCIDR($detail['beginIP'], $detail['endIP']);