diff --git a/api/icp/index.php b/api/icp/index.php index 3130b49..9cf5ffa 100644 --- a/api/icp/index.php +++ b/api/icp/index.php @@ -84,69 +84,40 @@ function queryICP($domain) { ]; try { - // 方法1: 使用API Vat接口(返回JSON格式) - $apiurl = "https://api.vat.tools/query?domain=" . urlencode($domain); + // 方法1: 使用互联网档案馆API + $apiurl = "https://www.api.vat.tools/query?domain=" . urlencode($domain); $data = callApi($apiurl); - if ($data && isset($data['icp'])) { - $result['status'] = 'success'; - $result['code'] = 200; - $result['message'] = '查询成功'; - $result['data'] = [ - 'domain' => $domain, - 'icp' => $data['icp'] ?? 'N/A', - 'owner' => $data['organizer'] ?? $data['owner'] ?? 'N/A', - 'siteName' => $data['website_name'] ?? $data['name'] ?? 'N/A', - 'checkDate' => $data['check_date'] ?? $data['approve_date'] ?? 'N/A', - 'siteNature' => $data['site_nature'] ?? 'N/A', - 'source' => 'api.vat.tools' - ]; - return $result; + if ($data && is_array($data) && !empty($data)) { + if (isset($data['icp']) && $data['icp'] != 'N/A') { + $result['status'] = 'success'; + $result['code'] = 200; + $result['message'] = '查询成功'; + $result['data'] = [ + 'domain' => $domain, + 'icp' => $data['icp'] ?? 'N/A', + 'owner' => $data['organizer'] ?? $data['owner'] ?? 'N/A', + 'siteName' => $data['website_name'] ?? $data['name'] ?? 'N/A', + 'checkDate' => $data['check_date'] ?? $data['approve_date'] ?? 'N/A', + 'siteNature' => $data['site_nature'] ?? 'N/A', + 'source' => 'vat.tools' + ]; + return $result; + } } - // 方法2: 使用天聪API - $apiurl2 = "https://api.tiancong.info/api/queryIcp?domain=" . urlencode($domain); - $data2 = callApi($apiurl2); - if ($data2 && isset($data2['code']) && $data2['code'] == 0 && isset($data2['data'])) { - $icpData = $data2['data']; - $result['status'] = 'success'; - $result['code'] = 200; - $result['message'] = '查询成功'; - $result['data'] = [ - 'domain' => $domain, - 'icp' => $icpData['icp'] ?? 'N/A', - 'owner' => $icpData['unitname'] ?? 'N/A', - 'siteName' => $icpData['sitename'] ?? 'N/A', - 'checkDate' => $icpData['checkdate'] ?? 'N/A', - 'siteNature' => $icpData['sitenature'] ?? 'N/A', - 'source' => 'tiancong.info' - ]; - return $result; - } - - // 方法3: 使用免费ICP API - $apiurl3 = "https://ijscode.top/api/icp.php?url=" . urlencode($domain); + // 方法2: 使用ICP查询-接口-通用API + $apiurl2 = "https://api.search.naver.com/search.naver?query=" . urlencode($domain) . "&where=web"; + + // 方法2b: 使用工信部接口 + $apiurl2b = "https://beian.miit.gov.cn/"; + + // 方法3: 使用免费的ICP API - API1 + $apiurl3 = "https://api.allorigins.win/get?url=" . urlencode("https://icp.aizhan.com/index.php?domain=" . urlencode($domain)); $data3 = callApi($apiurl3); - if ($data3 && isset($data3['icp'])) { - $result['status'] = 'success'; - $result['code'] = 200; - $result['message'] = '查询成功'; - $result['data'] = [ - 'domain' => $domain, - 'icp' => $data3['icp'] ?? 'N/A', - 'owner' => $data3['belong'] ?? 'N/A', - 'siteName' => $data3['name'] ?? 'N/A', - 'checkDate' => $data3['time'] ?? 'N/A', - 'source' => 'ijscode' - ]; - return $result; - } - - // 方法4: 使用aizhan.com (改进的HTML解析) - $apiurl4 = "https://icp.aizhan.com/index.php?domain=" . urlencode($domain); - $htmlData = callApi($apiurl4, false); - if ($htmlData) { - $parsedData = parseICPData($htmlData, $domain); - if ($parsedData) { + if ($data3 && isset($data3['contents'])) { + $htmlData = $data3['contents']; + $parsedData = parseICPFromHTML($htmlData, $domain); + if ($parsedData && (!isset($parsedData['icp']) || $parsedData['icp'] !== 'N/A')) { $result['status'] = 'success'; $result['code'] = 200; $result['message'] = '查询成功'; @@ -155,24 +126,84 @@ function queryICP($domain) { } } - // 方法5: 备用API - ICP查询 - $backupUrl = "https://www.beianx.com/search/?q=" . urlencode($domain); - $htmlResponse = callApi($backupUrl, false); - if ($htmlResponse) { - $backupData = parseBeianxData($htmlResponse, $domain); - if ($backupData) { + // 方法4: 使用爱站网缓存结果 + $apiurl4 = "https://tools.zhuaxia.com/icp?domain=" . urlencode($domain); + $data4 = callApi($apiurl4); + if ($data4 && is_array($data4) && isset($data4['data'])) { + $icpData = $data4['data']; + $parsedIcp = isset($icpData['icp']) && !empty($icpData['icp']) ? $icpData['icp'] : 'N/A'; + if ($parsedIcp !== 'N/A') { $result['status'] = 'success'; $result['code'] = 200; $result['message'] = '查询成功'; - $result['data'] = $backupData; + $result['data'] = [ + 'domain' => $domain, + 'icp' => $parsedIcp, + 'owner' => $icpData['unitname'] ?? $icpData['owner'] ?? 'N/A', + 'siteName' => $icpData['sitename'] ?? $icpData['name'] ?? 'N/A', + 'checkDate' => $icpData['checkdate'] ?? $icpData['time'] ?? 'N/A', + 'source' => 'zhuaxia' + ]; return $result; } } + // 方法5: 使用网格API + $apiurl5 = "https://www.chaxun.15600.net/service.php?domain=" . urlencode($domain); + $data5 = callApi($apiurl5, true); + if ($data5) { + $icpNum = ''; + if (isset($data5['ICP']) && !empty($data5['ICP'])) { + $icpNum = $data5['ICP']; + } elseif (isset($data5['icp']) && !empty($data5['icp'])) { + $icpNum = $data5['icp']; + } + + if (!empty($icpNum)) { + $result['status'] = 'success'; + $result['code'] = 200; + $result['message'] = '查询成功'; + $result['data'] = [ + 'domain' => $domain, + 'icp' => $icpNum, + 'owner' => $data5['company'] ?? $data5['owner'] ?? 'N/A', + 'siteName' => $data5['websitename'] ?? $data5['name'] ?? 'N/A', + 'checkDate' => $data5['checkTime'] ?? 'N/A', + 'source' => 'chaxun' + ]; + return $result; + } + } + + // 方法6: 爱站网直接查询 + $apiurl6 = "http://icp.aizhan.com/index.php?domain=" . urlencode($domain); + $htmlData = callApi($apiurl6, false); + if ($htmlData && strlen($htmlData) > 100) { + // 尝试提取ICP信息 + $icpMatch = []; + if (preg_match('/[\d\u4e00-\u9fa5]+-ICP-\d+/u', $htmlData, $icpMatch)) { + // 如果能直接提取ICP号则成功 + if (!empty($icpMatch[0]) && strpos($icpMatch[0], 'ICP') !== false) { + $result['status'] = 'success'; + $result['code'] = 200; + $result['message'] = '查询成功'; + $result['data'] = [ + 'domain' => $domain, + 'icp' => $icpMatch[0], + 'owner' => extractFromHTML($htmlData, '主办单位'), + 'siteName' => extractFromHTML($htmlData, '网站名称'), + 'checkDate' => extractFromHTML($htmlData, '审核时间'), + 'source' => 'aizhan-cache' + ]; + return $result; + } + } + } + // 如果都失败,返回默认的未备案状态 $result['status'] = 'not_found'; $result['code'] = 404; - $result['message'] = '未找到ICP备案信息(该域名可能未在中国备案或各查询源暂时不可用)'; + $result['message'] = '未找到ICP备案信息(该域名可能未在中国备案或查询源暂时不可用)'; } catch (Exception $e) { $result['message'] = '查询异常: ' . $e->getMessage(); @@ -181,6 +212,9 @@ function queryICP($domain) { return $result; } + return $result; +} + /** * 通用HTTP调用函数 */ @@ -196,10 +230,15 @@ function callApi($url, $isJson = true) { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 3); + curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate'); + curl_setopt($ch, CURLOPT_HTTPHEADER, [ + 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8', + 'Accept-Encoding: gzip, deflate', + 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' + ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); - $curlError = curl_error($ch); curl_close($ch); if ($httpCode !== 200 || empty($response)) { @@ -217,140 +256,81 @@ function callApi($url, $isJson = true) { } /** - * 解析aizhan.com返回的ICP数据 + * 从HTML中提取指定字段的值 */ -function parseICPData($html, $domain) { - // 移除脚本和样式 +function extractFromHTML($html, $label) { + $patterns = [ + '/' . preg_quote($label) . '[^>]*>([^<]+)<', + '/