From 7d61f705bffb89353b5f9e73f7531b99a443d548 Mon Sep 17 00:00:00 2001 From: Nazar Kanaev Date: Mon, 22 Mar 2021 22:28:15 +0000 Subject: [PATCH] url fixer --- src/feed/feed.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/feed/feed.go b/src/feed/feed.go index 2fcf321..7e45006 100644 --- a/src/feed/feed.go +++ b/src/feed/feed.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "io" + "net/url" "strings" ) @@ -54,3 +55,23 @@ func Parse(r io.Reader) (*Feed, error) { r = io.MultiReader(bytes.NewReader(chunk), r) return callback(r) } + +func FixURLs(feed *Feed, base string) error { + baseUrl, err := url.Parse(base) + if err != nil { + return fmt.Errorf("failed to parse base url: %#v", base) + } + siteUrl, err := url.Parse(feed.SiteURL) + if err != nil { + return fmt.Errorf("failed to parse feed url: %#v", feed.SiteURL) + } + feed.SiteURL = baseUrl.ResolveReference(siteUrl).String() + for _, item := range feed.Items { + itemUrl, err := url.Parse(item.URL) + if err != nil { + return fmt.Errorf("failed to parse item url: %#v", item.URL) + } + item.URL = siteUrl.ResolveReference(itemUrl).String() + } + return nil +}