diff --git a/main.go b/main.go index 8ccb857..ae9f961 100644 --- a/main.go +++ b/main.go @@ -22,11 +22,13 @@ func main() { item := podcast.Items[0] fmt.Printf("name: %s, feedUrl: %s\n", item.CollectionName, item.FeedURL) - pod, err := model.LoadFeed(item.FeedURL) + feedUrl := "http://www.ximalaya.com/album/19206382.xml" + + pod, err := model.LoadFeed(feedUrl) if err != nil { panic(err) } - for _, e := range pod.Episodes[:5] { + for _, e := range pod.Episodes[:2] { fmt.Printf("episode: %+v\n", e) } } diff --git a/model/podcast.go b/model/podcast.go index 8b2375f..e18f6ad 100644 --- a/model/podcast.go +++ b/model/podcast.go @@ -31,6 +31,9 @@ type Podcast struct { // 版权信息 Copyright string `json:"copyright,omitempty"` + // 语言 + Language string `json:"language,omitempty"` + // 是否锁定,表示此订阅是否可以被导入到其他平台 Locked *Locked `json:"locked,omitempty"` @@ -47,7 +50,7 @@ type Podcast struct { Block []Block `json:"block,omitempty"` // 剧集列表 - Episodes []Episode `json:"episodes,omitempty"` + Episodes []*gofeed.Item `json:"episodes,omitempty"` // 远程项目 RemoteItems []RemoteItem `json:"remote_items,omitempty"` @@ -68,13 +71,18 @@ func LoadFeed(url string) (*Podcast, error) { return nil, errors.New("解析播客订阅失败: 空订阅") } + imageURL := "" + if feed.Image != nil { + imageURL = feed.Image.URL + } podcast := &Podcast{ Title: feed.Title, Description: feed.Description, Link: feed.Link, - Image: feed.Image.URL, + Image: imageURL, Copyright: feed.Copyright, - Episodes: make([]Episode, 0), + Language: feed.Language, + Episodes: feed.Items, Funding: make([]Funding, 0), Persons: make([]Person, 0), Value: make([]Value, 0), @@ -82,37 +90,5 @@ func LoadFeed(url string) (*Podcast, error) { Medium: MediumPodcast, } - // 解析剧集 - for _, item := range feed.Items { - episode := Episode{ - GUID: item.GUID, - Title: item.Title, - Description: item.Description, - Link: item.Link, - PublicationDate: item.PublishedParsed, - Author: item.Author.Name, - } - - // 解析媒体URL - if len(item.Enclosures) > 0 { - episode.ContentURL = item.Enclosures[0].URL - } - - // 解析剧集图片 - if item.Image != nil && item.Image.URL != "" { - episode.ImageURL = item.Image.URL - } - - // 解析时长 - if item.ITunesExt != nil && item.ITunesExt.Duration != "" { - // 简单处理,实际应该解析时间格式 - durationSec := 0 - fmt.Sscanf(item.ITunesExt.Duration, "%d", &durationSec) - episode.Duration = durationSec - } - - podcast.Episodes = append(podcast.Episodes, episode) - } - return podcast, nil }