89 lines
1.9 KiB
Go
89 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"net/url"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
url := flag.String("url", "", "URL to check for broken links")
|
|
flag.Parse()
|
|
|
|
if *url == "" {
|
|
log.Fatal("Please provide a URL using the -url flag")
|
|
}
|
|
|
|
// Start time for the filename
|
|
startTime := time.Now()
|
|
|
|
checker := NewLinkChecker()
|
|
brokenLinks, err := checker.CheckLinks(*url)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Extract domain from URL
|
|
parsedURL, err := url.Parse(*url)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
domain := strings.TrimPrefix(parsedURL.Hostname(), "www.")
|
|
|
|
// Create results file with domain and timestamp
|
|
filename := fmt.Sprintf("%s-%s.txt", domain, startTime.Format("2006-01-02-150405"))
|
|
f, err := os.Create(filename)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
fmt.Fprintf(f, "\nTotal pages checked: %d\n\n", checker.pagesChecked)
|
|
|
|
if len(brokenLinks) == 0 {
|
|
fmt.Fprintf(f, "No issues found!\n")
|
|
fmt.Printf("Results written to %s\n", filename)
|
|
return
|
|
}
|
|
|
|
// First list redirects
|
|
var redirectCount int
|
|
for _, link := range brokenLinks {
|
|
if link.Redirect != nil {
|
|
if redirectCount == 0 {
|
|
fmt.Fprintf(f, "Redirects found:\n")
|
|
}
|
|
fmt.Fprintf(f, "- %s (Redirect %d -> %s)\n", link.URL, link.StatusCode, link.Redirect.ToURL)
|
|
redirectCount++
|
|
}
|
|
}
|
|
if redirectCount > 0 {
|
|
fmt.Fprintf(f, "\n")
|
|
}
|
|
|
|
// Then list broken links
|
|
var brokenCount int
|
|
for _, link := range brokenLinks {
|
|
if link.Redirect == nil {
|
|
if brokenCount == 0 {
|
|
fmt.Fprintf(f, "Broken links found:\n")
|
|
}
|
|
if link.Error != "" {
|
|
fmt.Fprintf(f, "- %s (Error: %s)\n", link.URL, link.Error)
|
|
} else {
|
|
fmt.Fprintf(f, "- %s (Status: %d)\n", link.URL, link.StatusCode)
|
|
}
|
|
brokenCount++
|
|
}
|
|
}
|
|
|
|
fmt.Fprintf(f, "\nTotal issues: %d (%d redirects, %d broken)\n",
|
|
len(brokenLinks), redirectCount, brokenCount)
|
|
|
|
fmt.Printf("Results written to %s\n", filename)
|
|
}
|