summaryrefslogtreecommitdiff
path: root/scripts/get_external_link_rank.go
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-04-07 14:53:17 +0800
committereltrac <hi@eltr.ac>2026-04-07 14:53:17 +0800
commit10431bd8f5ff71690ae4e5444e8d7894fd401ae5 (patch)
tree62b7fd1b6c1f68d2804f380eb522bcebeb2c8d9f /scripts/get_external_link_rank.go
parent3e0edacc4a0cafa53ede57ebb6f0378c93f3123b (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.go77
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)
-}