update LoadFeed

This commit is contained in:
2025-04-09 15:26:25 +08:00
parent 5f0148dab2
commit 5fd117b1d1
2 changed files with 15 additions and 37 deletions

View File

@@ -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)
}
}

View File

@@ -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
}