main.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package main
  2. import (
  3. "bufio"
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. "os"
  8. "strings"
  9. )
  10. func main() {
  11. url := "https://publicsuffix.org/list/public_suffix_list.dat"
  12. err := downloadAndParseTLDs(url, "tld.json")
  13. if err != nil {
  14. fmt.Println("Error:", err)
  15. }
  16. }
  17. func downloadAndParseTLDs(url, outputFilename string) error {
  18. resp, err := http.Get(url)
  19. if err != nil {
  20. return err
  21. }
  22. defer resp.Body.Close()
  23. tlds := make(map[string]bool)
  24. scanner := bufio.NewScanner(resp.Body)
  25. for scanner.Scan() {
  26. line := strings.TrimSpace(scanner.Text())
  27. if strings.HasPrefix(line, "//") || line == "" {
  28. continue
  29. }
  30. tlds[line] = true
  31. }
  32. if err := scanner.Err(); err != nil {
  33. return err
  34. }
  35. jsonData, err := json.MarshalIndent(tlds, "", " ")
  36. if err != nil {
  37. return err
  38. }
  39. outputFile, err := os.Create(outputFilename)
  40. if err != nil {
  41. return err
  42. }
  43. defer outputFile.Close()
  44. _, err = outputFile.Write(jsonData)
  45. if err != nil {
  46. return err
  47. }
  48. fmt.Println("TLDs successfully downloaded and saved to", outputFilename)
  49. return nil
  50. }