更新
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
package domain
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// DomainInfo 域名信息结构体
|
||||
type DomainInfo struct {
|
||||
Domain string `json:"domain"`
|
||||
Category string `json:"category"`
|
||||
Company string `json:"company"`
|
||||
}
|
||||
|
||||
// GetDomainInfo 从域名信息数据库中查询域名信息
|
||||
func GetDomainInfo(domain string) (DomainInfo, error) {
|
||||
// 读取域名信息文件
|
||||
data, err := os.ReadFile("./static/domain-info/domains/domain-info.json")
|
||||
if err != nil {
|
||||
return DomainInfo{}, err
|
||||
}
|
||||
|
||||
// 解析JSON数据
|
||||
var domainDB struct {
|
||||
Categories map[string]string `json:"categories"`
|
||||
Domains map[string]map[string]interface{} `json:"domains"`
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(data, &domainDB); err != nil {
|
||||
return DomainInfo{}, err
|
||||
}
|
||||
|
||||
// 遍历域名数据库,查找匹配的域名
|
||||
for _, services := range domainDB.Domains {
|
||||
// 获取公司级别的 company 字段
|
||||
companyLevelCompany := ""
|
||||
if companyData, ok := services["company"].(string); ok {
|
||||
companyLevelCompany = companyData
|
||||
}
|
||||
|
||||
for serviceName, serviceInfo := range services {
|
||||
if serviceName == "company" {
|
||||
continue
|
||||
}
|
||||
|
||||
// 检查 URL 字段
|
||||
if urlData, ok := serviceInfo.(map[string]interface{}); ok {
|
||||
if urlField, ok := urlData["url"]; ok {
|
||||
switch v := urlField.(type) {
|
||||
case string:
|
||||
// 单个 URL
|
||||
if strings.Contains(v, domain) {
|
||||
categoryId := ""
|
||||
if cid, ok := urlData["categoryId"]; ok {
|
||||
if cidStr, ok := cid.(float64); ok {
|
||||
categoryId = fmt.Sprintf("%.0f", cidStr)
|
||||
}
|
||||
}
|
||||
categoryName := "未知"
|
||||
if categoryId != "" {
|
||||
if name, ok := domainDB.Categories[categoryId]; ok {
|
||||
categoryName = name
|
||||
}
|
||||
}
|
||||
// 确定公司名:优先使用服务级别的 company 字段,否则使用公司级别的 company 字段
|
||||
itemCompany := companyLevelCompany
|
||||
if serviceCompany, ok := urlData["company"].(string); ok {
|
||||
itemCompany = serviceCompany
|
||||
}
|
||||
return DomainInfo{
|
||||
Domain: domain,
|
||||
Category: categoryName,
|
||||
Company: itemCompany,
|
||||
}, nil
|
||||
}
|
||||
case map[string]interface{}:
|
||||
// 多个 URL
|
||||
for _, url := range v {
|
||||
if urlStr, ok := url.(string); ok {
|
||||
if strings.Contains(urlStr, domain) {
|
||||
categoryId := ""
|
||||
if cid, ok := urlData["categoryId"]; ok {
|
||||
if cidStr, ok := cid.(float64); ok {
|
||||
categoryId = fmt.Sprintf("%.0f", cidStr)
|
||||
}
|
||||
}
|
||||
categoryName := "未知"
|
||||
if categoryId != "" {
|
||||
if name, ok := domainDB.Categories[categoryId]; ok {
|
||||
categoryName = name
|
||||
}
|
||||
}
|
||||
// 确定公司名:优先使用服务级别的 company 字段,否则使用公司级别的 company 字段
|
||||
itemCompany := companyLevelCompany
|
||||
if serviceCompany, ok := urlData["company"].(string); ok {
|
||||
itemCompany = serviceCompany
|
||||
}
|
||||
return DomainInfo{
|
||||
Domain: domain,
|
||||
Category: categoryName,
|
||||
Company: itemCompany,
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 如果没有找到匹配的域名,返回默认信息
|
||||
return DomainInfo{
|
||||
Domain: domain,
|
||||
Category: "未知",
|
||||
Company: "未知",
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user