summaryrefslogtreecommitdiff
path: root/internal/links/find.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/links/find.go')
-rw-r--r--internal/links/find.go35
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
+}