diff --git a/pkg/builders/vimeo.go b/pkg/builders/vimeo.go index 7a855bd..7b60778 100644 --- a/pkg/builders/vimeo.go +++ b/pkg/builders/vimeo.go @@ -40,7 +40,7 @@ func (v *VimeoBuilder) queryChannel(feed *model.Feed) (*itunes.Podcast, error) { ch, resp, err := v.client.Channels.Get(channelID) if err != nil { - if resp.StatusCode == http.StatusNotFound { + if resp != nil && resp.StatusCode == http.StatusNotFound { return nil, api.ErrNotFound } @@ -64,7 +64,7 @@ func (v *VimeoBuilder) queryGroup(feed *model.Feed) (*itunes.Podcast, error) { gr, resp, err := v.client.Groups.Get(groupID) if err != nil { - if resp.StatusCode == http.StatusNotFound { + if resp != nil && resp.StatusCode == http.StatusNotFound { return nil, api.ErrNotFound } @@ -88,7 +88,7 @@ func (v *VimeoBuilder) queryUser(feed *model.Feed) (*itunes.Podcast, error) { user, resp, err := v.client.Users.Get(userID) if err != nil { - if resp.StatusCode == http.StatusNotFound { + if resp != nil && resp.StatusCode == http.StatusNotFound { return nil, api.ErrNotFound } @@ -123,7 +123,11 @@ func (v *VimeoBuilder) queryVideos(getVideos getVideosFunc, podcast *itunes.Podc for { videos, response, err := getVideos(feed.ItemID, vimeo.OptPage(page), vimeo.OptPerPage(vimeoDefaultPageSize)) if err != nil { - return errors.Wrapf(err, "failed to query videos (error %d %s)", response.StatusCode, response.Status) + if response != nil { + return errors.Wrapf(err, "failed to query videos (error %d %s)", response.StatusCode, response.Status) + } + + return err } for _, video := range videos { diff --git a/pkg/builders/youtube.go b/pkg/builders/youtube.go index 3b9255e..973c05a 100644 --- a/pkg/builders/youtube.go +++ b/pkg/builders/youtube.go @@ -358,13 +358,19 @@ func (yt *YouTubeBuilder) queryVideoDescriptions( item.AddPubDate(&pubDate) - // Parse duration - d, err := duration.FromString(video.ContentDetails.Duration) - if err != nil { - return errors.Wrapf(err, "failed to parse duration %s", video.ContentDetails.Duration) + // Sometimes YouTube retrun empty content defailt, use arbitrary one + var seconds int64 = 1 + + if video.ContentDetails != nil { + // Parse duration + d, err := duration.FromString(video.ContentDetails.Duration) + if err != nil { + return errors.Wrapf(err, "failed to parse duration %s", video.ContentDetails.Duration) + } + + seconds = int64(d.ToDuration().Seconds()) } - seconds := int64(d.ToDuration().Seconds()) item.AddDuration(seconds) // Add download links