diff options
Diffstat (limited to 'internal/links/find.go')
| -rw-r--r-- | internal/links/find.go | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/internal/links/find.go b/internal/links/find.go new file mode 100644 index 0000000..33b24d5 --- /dev/null +++ b/internal/links/find.go @@ -0,0 +1,35 @@ +package links + +import ( + "io" + + "golang.org/x/net/html" + "golang.org/x/net/html/atom" +) + +func find(htmlInput io.Reader) ([]string, error) { + doc, err := html.Parse(htmlInput) + if err != nil { + return nil, err + } + + hrefs := findHrefs(doc) + + return hrefs, nil +} + +// findHrefs returns all link addresses inside doc. +func findHrefs(doc *html.Node) []string { + var hrefs []string + for node := range doc.Descendants() { + if node.Type == html.ElementNode && node.DataAtom == atom.A { + for _, attr := range node.Attr { + if attr.Key == "href" { + hrefs = append(hrefs, attr.Val) + } + } + } + } + + return hrefs +} |
