From 74417e757cb9b1084f650c25d6a4f0ec184322be Mon Sep 17 00:00:00 2001 From: yinchenyang Date: Thu, 12 Dec 2019 15:01:26 +0800 Subject: [PATCH] fix xml parsing Change-Id: I3b5da88e95af40fcd718d9e57817acf2388753e9 --- model/source.go | 29 ++++++++++++++++++++++++++--- model/subscribe.go | 2 +- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/model/source.go b/model/source.go index 0cb4c9e2..38dda787 100644 --- a/model/source.go +++ b/model/source.go @@ -2,13 +2,18 @@ package model import ( "errors" + "fmt" "github.com/SlyMarbo/rss" "github.com/indes/flowerss-bot/config" + "io/ioutil" "log" + "net/http" + "strings" + "unicode" ) type Source struct { - ID uint `gorm:"primary_key";"AUTO_INCREMENT"` + ID uint `gorm:"primary_key;AUTO_INCREMENT"` Link string Title string ErrorCount uint @@ -49,9 +54,27 @@ func FindOrNewSourceByUrl(url string) (*Source, error) { source.Link = url // parsing task - feed, err := rss.Fetch(url) + feed, err := rss.FetchByFunc(func(url string) (resp *http.Response, err error) { + resp, err = http.Get(url) + if err != nil { + return nil, err + } + defer resp.Body.Close() + var data []byte + if data, err = ioutil.ReadAll(resp.Body); err != nil { + return nil, err + } + resp.Body = ioutil.NopCloser(strings.NewReader(strings.Map(func(r rune) rune { + if unicode.IsPrint(r) { + return r + } + return -1 + }, string(data)))) + return + }, url) + if err != nil { - return nil, errors.New("Feed 抓取错误") + return nil, fmt.Errorf("Feed 抓取错误 %v", err) } source.Title = feed.Title diff --git a/model/subscribe.go b/model/subscribe.go index cffeab20..0d37d297 100644 --- a/model/subscribe.go +++ b/model/subscribe.go @@ -3,7 +3,7 @@ package model import "errors" type Subscribe struct { - ID uint `gorm:"primary_key";"AUTO_INCREMENT"` + ID uint `gorm:"primary_key;AUTO_INCREMENT"` UserID int64 SourceID uint EnableNotification int