diff --git a/backend/ChinaCity.db b/backend/ChinaCity.db deleted file mode 100644 index 07f9640..0000000 Binary files a/backend/ChinaCity.db and /dev/null differ diff --git a/backend/cityCN.db b/backend/cityCN.db new file mode 100644 index 0000000..eab3f4e Binary files /dev/null and b/backend/cityCN.db differ 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']);