From 7f0814bfbb8c50eb6cb7bd2736809a8927dd09b1 Mon Sep 17 00:00:00 2001 From: Naoki Kishi Date: Tue, 30 Mar 2021 21:45:56 +0900 Subject: [PATCH] fix to pass test --- rss_crawler.go | 41 ++++++++++++++++++++++++------------- rss_crawler_test.go | 50 ++++++++++++++++++++++----------------------- 2 files changed, 52 insertions(+), 39 deletions(-) diff --git a/rss_crawler.go b/rss_crawler.go index ef014ea..9e77079 100644 --- a/rss_crawler.go +++ b/rss_crawler.go @@ -5,7 +5,6 @@ import ( "log" "net/http" "time" - "fmt" "github.com/p1ass/feeds" "github.com/pkg/errors" @@ -48,26 +47,17 @@ func (crawler *rssCrawler) Crawl() ([]*Item, error) { } func convertRssItemToItem(i *feeds.RssItem) (*Item, error) { - layouts := []string{time.RFC1123Z, time.RFC1123} - var t time.Time - var err error - for _, layout := range layouts { - t, err = time.Parse(layout, i.PubDate) - if err == nil { - break - } + t,err := parseTime(i.PubDate) + if err != nil{ + return nil, errors.Wrap(err, "parse pub date") } - if err != nil { - return nil, errors.Wrap(err, "Parse Error") - } - fmt.Println(t.String()) item := &Item{ Title: i.Title, Link: &Link{Href: i.Link}, Description: i.Description, ID: i.Guid, - Created: &t, + Created: t, } if i.Author != "" { @@ -87,3 +77,26 @@ func convertRssItemToItem(i *feeds.RssItem) (*Item, error) { return item, nil } + +func parseTime(datetime string) (*time.Time, error) { + t, err := time.Parse(time.RFC1123, datetime) + if err == nil { + return &t, nil + } + + t, err = time.Parse(time.RFC1123Z, datetime) + if err != nil { + return nil, errors.Wrap(err, "Parse Error") + } + + loc, err := time.LoadLocation(t.Location().String()) + if err != nil { + return nil, errors.Wrap(err, "Parse Error") + } + + if t, err = time.ParseInLocation(time.RFC1123Z, datetime, loc); err == nil { + return &t, nil + } + + return nil, errors.Wrap(err, "Parse Error") +} diff --git a/rss_crawler_test.go b/rss_crawler_test.go index c4a635f..3af6f34 100644 --- a/rss_crawler_test.go +++ b/rss_crawler_test.go @@ -6,8 +6,8 @@ import ( "testing" "time" - "github.com/p1ass/feeder" "github.com/google/go-cmp/cmp" + "github.com/p1ass/feeder" ) func TestRSSFetch(t *testing.T) { @@ -25,8 +25,9 @@ func TestRSSFetch(t *testing.T) { server := feeder.NewMockServer(response) defer server.Close() - publishedString := "2019-01-01T00:00:00+09:00" - published, _ := time.Parse(time.RFC3339, publishedString) + publishedString := "Tue, 01 Jan 2019 00:00:00 +0900" + published, _ := time.Parse(time.RFC1123Z, publishedString) + published = published.UTC() expected := []*feeder.Item{{ Title: "title RFC1123Z", Link: &feeder.Link{ @@ -48,27 +49,27 @@ func TestRSSFetch(t *testing.T) { }, Content: "", }, - { - Title: "title RFC1123", - Link: &feeder.Link{ - Href: "http://example.com", - Rel: "", - }, - Source: nil, - Author: &feeder.Author{ - Name: "name", - }, - Description: "summary_content", - ID: "id", - Updated: nil, - Created: &published, - Enclosure: &feeder.Enclosure{ - URL: "http://example.com/image.png", - Type: "image/png", - Length: "0", - }, - Content: "", - }} + { + Title: "title RFC1123", + Link: &feeder.Link{ + Href: "http://example.com", + Rel: "", + }, + Source: nil, + Author: &feeder.Author{ + Name: "name", + }, + Description: "summary_content", + ID: "id", + Updated: nil, + Created: &published, + Enclosure: &feeder.Enclosure{ + URL: "http://example.com/image.png", + Type: "image/png", + Length: "0", + }, + Content: "", + }} crawler := feeder.NewRSSCrawler(server.URL + "/rss") got, err := crawler.Crawl() @@ -80,6 +81,5 @@ func TestRSSFetch(t *testing.T) { diff := cmp.Diff(expected, got) t.Log(diff) t.Error("Failed to convert AtomEntry to Item.") - } }