/
feed.go
44 lines (39 loc) · 896 Bytes
/
feed.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package tinycast
import (
"net/url"
"path"
"strings"
"github.com/beevik/etree"
)
func modifyAttr(as []etree.Attr, attrName string, tr func(string) string) {
for i, a := range as {
if strings.ToLower(a.Key) == attrName {
as[i].Value = tr(a.Value)
continue
}
}
}
func removeAttr(as []etree.Attr, attrName string) []etree.Attr {
j := 0
for _, a := range as {
if strings.ToLower(a.Key) != attrName {
as[j] = a
j++
}
}
return as[:j]
}
func replace(doc *etree.Document, element string, baseURL url.URL, qr url.Values) {
for _, t := range doc.FindElements(element) {
modifyAttr(t.Attr, "url", func(v string) string {
bU := baseURL
query := qr
query.Set("url", v)
bU.RawQuery = query.Encode()
bU.Path = path.Join(bU.Path, "convert.mp3")
return bU.String()
})
t.Attr = removeAttr(t.Attr, "length")
t.Attr = removeAttr(t.Attr, "filesize")
}
}