mirror of
https://github.com/go-i2p/newsgo.git
synced 2025-06-07 10:01:49 -04:00
feed.go
This commit is contained in:
10
.gitignore
vendored
10
.gitignore
vendored
@ -1,4 +1,6 @@
|
||||
newsgo
|
||||
onionkeys
|
||||
i2pkeys
|
||||
build
|
||||
/newsgo
|
||||
/onionkeys
|
||||
/i2pkeys
|
||||
/tlskeys
|
||||
/build
|
||||
/data
|
||||
|
@ -1 +1,14 @@
|
||||
package newsbuilder
|
||||
|
||||
import (
|
||||
newsfeed "i2pgit.org/idk/newsgo/builder/feed"
|
||||
)
|
||||
|
||||
type NewsBuilder struct {
|
||||
Nodes []newsfeed.Node
|
||||
File string
|
||||
}
|
||||
|
||||
func (n *NewsBuilder) LoadFeed() {
|
||||
n.Nodes = newsfeed.XMLData(n.File)
|
||||
}
|
||||
|
45
builder/feed/feed.go
Normal file
45
builder/feed/feed.go
Normal file
@ -0,0 +1,45 @@
|
||||
package newsfeed
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/xml"
|
||||
)
|
||||
|
||||
type Node struct {
|
||||
XMLName xml.Name
|
||||
Attrs []xml.Attr `xml:",any,attr"`
|
||||
Content []byte `xml:",innerxml"`
|
||||
Nodes []Node `xml:",any"`
|
||||
}
|
||||
|
||||
func (n *Node) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
|
||||
n.Attrs = start.Attr
|
||||
type node Node
|
||||
|
||||
return d.DecodeElement((*node)(n), &start)
|
||||
}
|
||||
|
||||
func XMLData(data []byte) (m []Node) {
|
||||
buf := bytes.NewBuffer(data)
|
||||
dec := xml.NewDecoder(buf)
|
||||
|
||||
var n Node
|
||||
err := dec.Decode(&n)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
walk([]Node{n}, func(n Node) bool {
|
||||
m = append(m, n)
|
||||
return true
|
||||
})
|
||||
return m
|
||||
}
|
||||
|
||||
func walk(nodes []Node, f func(Node) bool) {
|
||||
for _, n := range nodes {
|
||||
if f(n) {
|
||||
walk(n.Nodes, f)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user