40 lines
694 B
Go
40 lines
694 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
|
||
|
"golang.org/x/net/html"
|
||
|
)
|
||
|
|
||
|
// ParseErrata grabs all of the OpenBSD errata from an html page
|
||
|
func ParseErrata(s string) ([]string, error) {
|
||
|
var data []string
|
||
|
resp, err := http.Get(s)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
defer resp.Body.Close()
|
||
|
|
||
|
doc, err := html.Parse(resp.Body)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
var f func(*html.Node)
|
||
|
f = func(node *html.Node) {
|
||
|
if node.Type == html.ElementNode && node.Data == "strong" {
|
||
|
if node.FirstChild != nil {
|
||
|
data = append(data, node.FirstChild.Data)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
for child := node.FirstChild; child != nil; child = child.NextSibling {
|
||
|
f(child)
|
||
|
}
|
||
|
}
|
||
|
f(doc)
|
||
|
|
||
|
return data, nil
|
||
|
}
|