diff options
| author | eltrac <hi@eltr.ac> | 2026-04-07 14:53:17 +0800 |
|---|---|---|
| committer | eltrac <hi@eltr.ac> | 2026-04-07 14:53:17 +0800 |
| commit | 10431bd8f5ff71690ae4e5444e8d7894fd401ae5 (patch) | |
| tree | 62b7fd1b6c1f68d2804f380eb522bcebeb2c8d9f /scripts/get_external_link_rank.go | |
| parent | 3e0edacc4a0cafa53ede57ebb6f0378c93f3123b (diff) | |
chore: move templates out of site repo
Diffstat (limited to 'scripts/get_external_link_rank.go')
| -rw-r--r-- | scripts/get_external_link_rank.go | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/scripts/get_external_link_rank.go b/scripts/get_external_link_rank.go deleted file mode 100644 index 4189c191..00000000 --- a/scripts/get_external_link_rank.go +++ /dev/null @@ -1,77 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - "io/fs" - "net/url" - "os" - "path/filepath" - "regexp" - "sort" - "strings" -) - -func main() { - externalLinks := countExternalLinks("content") - writeJSON("data/externallinks.json", externalLinks) - fmt.Println("✅ External link rank data generated.") -} - -// countExternalLinks scans markdown files and counts occurrences of each external domain. -func countExternalLinks(root string) [][2]interface{} { - linkRegex := regexp.MustCompile(`https?://[^\s)>"']+`) - counts := make(map[string]int) - - filepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error { - if err != nil || d.IsDir() || !strings.HasSuffix(path, ".md") { - return nil - } - data, err := os.ReadFile(path) - if err != nil { - return nil - } - matches := linkRegex.FindAllString(string(data), -1) - for _, match := range matches { - u, err := url.Parse(match) - if err == nil && u.Host != "" { - // skip my domains - if strings.HasSuffix(u.Host, "eltr.ac") || strings.HasSuffix(u.Host, "guhub.cn") { - continue - } - counts[u.Host]++ - } - } - return nil - }) - - // convert map to sorted array (alphabetically by domain) - type kv struct { - Key string - Value int - } - var list []kv - for k, v := range counts { - list = append(list, kv{k, v}) - } - sort.Slice(list, func(i, j int) bool { return list[i].Key < list[j].Key }) - - result := make([][2]interface{}, len(list)) - for i, kv := range list { - result[i] = [2]interface{}{kv.Key, kv.Value} - } - return result -} - -// writeJSON writes the result to file with indentation. -func writeJSON(path string, data interface{}) { - file, err := os.Create(path) - if err != nil { - fmt.Println("Error:", err) - return - } - defer file.Close() - enc := json.NewEncoder(file) - enc.SetIndent("", " ") - enc.Encode(data) -} |
