mirror of
https://github.com/nkanaev/yarr.git
synced 2025-09-15 02:40:15 +00:00
112 lines
3.3 KiB
Go
112 lines
3.3 KiB
Go
package parser
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
type media struct {
|
|
MediaGroups []mediaGroup `xml:"http://search.yahoo.com/mrss/ group"`
|
|
MediaContents []mediaContent `xml:"http://search.yahoo.com/mrss/ content"`
|
|
MediaThumbnails []mediaThumbnail `xml:"http://search.yahoo.com/mrss/ thumbnail"`
|
|
MediaDescriptions []mediaDescription `xml:"http://search.yahoo.com/mrss/ description"`
|
|
}
|
|
|
|
type mediaGroup struct {
|
|
MediaContent []mediaContent `xml:"http://search.yahoo.com/mrss/ content"`
|
|
MediaThumbnails []mediaThumbnail `xml:"http://search.yahoo.com/mrss/ thumbnail"`
|
|
MediaDescriptions []mediaDescription `xml:"http://search.yahoo.com/mrss/ description"`
|
|
}
|
|
|
|
type mediaContent struct {
|
|
MediaThumbnails []mediaThumbnail `xml:"http://search.yahoo.com/mrss/ thumbnail"`
|
|
MediaType string `xml:"type,attr"`
|
|
MediaMedium string `xml:"medium,attr"`
|
|
MediaURL string `xml:"url,attr"`
|
|
MediaDescription mediaDescription `xml:"http://search.yahoo.com/mrss/ description"`
|
|
}
|
|
|
|
type mediaThumbnail struct {
|
|
URL string `xml:"url,attr"`
|
|
}
|
|
|
|
type mediaDescription struct {
|
|
Type string `xml:"type,attr"`
|
|
Text string `xml:",chardata"`
|
|
}
|
|
|
|
func (m *media) firstMediaThumbnail() string {
|
|
for _, c := range m.MediaContents {
|
|
for _, t := range c.MediaThumbnails {
|
|
return t.URL
|
|
}
|
|
}
|
|
for _, t := range m.MediaThumbnails {
|
|
return t.URL
|
|
}
|
|
for _, g := range m.MediaGroups {
|
|
for _, t := range g.MediaThumbnails {
|
|
return t.URL
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (m *media) firstMediaDescription() string {
|
|
for _, d := range m.MediaDescriptions {
|
|
return plain2html(d.Text)
|
|
}
|
|
for _, g := range m.MediaGroups {
|
|
for _, d := range g.MediaDescriptions {
|
|
return plain2html(d.Text)
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (m *media) mediaLinks() []MediaLink {
|
|
links := make([]MediaLink, 0)
|
|
for _, thumbnail := range m.MediaThumbnails {
|
|
links = append(links, MediaLink{URL: thumbnail.URL, Type: "image"})
|
|
}
|
|
for _, group := range m.MediaGroups {
|
|
for _, thumbnail := range group.MediaThumbnails {
|
|
links = append(links, MediaLink{
|
|
URL: thumbnail.URL,
|
|
Type: "image",
|
|
})
|
|
}
|
|
}
|
|
for _, content := range m.MediaContents {
|
|
if content.MediaURL != "" {
|
|
url := content.MediaURL
|
|
description := content.MediaDescription.Text
|
|
if strings.HasPrefix(content.MediaType, "image/") {
|
|
links = append(links, MediaLink{URL: url, Type: "image", Description: description})
|
|
} else if strings.HasPrefix(content.MediaType, "audio/") {
|
|
links = append(links, MediaLink{URL: url, Type: "audio", Description: description})
|
|
} else if strings.HasPrefix(content.MediaType, "video/") {
|
|
links = append(links, MediaLink{URL: url, Type: "video", Description: description})
|
|
} else if content.MediaMedium == "image" || content.MediaMedium == "audio" || content.MediaMedium == "video" {
|
|
links = append(links, MediaLink{URL: url, Type: content.MediaMedium, Description: description})
|
|
} else {
|
|
if len(content.MediaThumbnails) > 0 {
|
|
links = append(links, MediaLink{
|
|
URL: content.MediaThumbnails[0].URL,
|
|
Type: "image",
|
|
})
|
|
}
|
|
}
|
|
}
|
|
for _, thumbnail := range content.MediaThumbnails {
|
|
links = append(links, MediaLink{
|
|
URL: thumbnail.URL,
|
|
Type: "image",
|
|
})
|
|
}
|
|
}
|
|
if len(links) == 0 {
|
|
return nil
|
|
}
|
|
return links
|
|
}
|