func (f *feedparserImpl) Fetch(channel *models.Channel) error { result, err := fetch(channel.URL) if err != nil { return err } channel.Title = result.channel.Title channel.Image = result.channel.Image.Url channel.Description = result.channel.Description website := result.getWebsiteURL() if website != "" { channel.Website.String = website channel.Website.Valid = true } // we just want unique categories categoryMap := make(map[string]string) for _, category := range result.channel.Categories { categoryMap[category.Text] = category.Text } var categories []string for _, category := range categoryMap { categories = append(categories, category) } channel.Categories.String = strings.Join(categories, " ") channel.Categories.Valid = true var podcasts []*models.Podcast for _, item := range result.items { podcast := &models.Podcast{ Title: item.Title, Description: item.Description, } podcast.EnclosureURL = item.Enclosures[0].Url if item.Guid == nil { // use pub date + URL as standin Guid podcast.Guid = item.PubDate + ":" + podcast.EnclosureURL } else { podcast.Guid = *item.Guid } if item.Source != nil { podcast.Source = item.Source.Url } var pubDate time.Time // try using the builtin RSS parser first if pubDate, err = item.ParsedPubDate(); err != nil { // try some other parsers pubDate, err = now.Parse(item.PubDate) // pubdate will be "empty", we'll have to live with that } podcast.PubDate = pubDate podcasts = append(podcasts, podcast) } channel.Podcasts = podcasts return nil }