From 7d530f8d7da8565302589921434022a117bb5b73 Mon Sep 17 00:00:00 2001 From: xing Date: Thu, 20 Mar 2025 23:29:05 +0800 Subject: [PATCH] fix bbc --- bbclearn/bbc.go | 53 +++++++++++++++++++++++++++++++++++-------------- main.go | 8 ++++++-- 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/bbclearn/bbc.go b/bbclearn/bbc.go index a60b7e5..aed21d2 100644 --- a/bbclearn/bbc.go +++ b/bbclearn/bbc.go @@ -14,16 +14,26 @@ import ( "time" ) -func LearnParse(s string, recentDay int) string { +func LearnParse(s string, recentDay int) (string, error) { document, err := goquery.NewDocumentFromReader(strings.NewReader(s)) if err != nil { - return "" + return "", err } var item []rss2.Item - item = append(item, full(document, recentDay)) - item = append(item, items(document, recentDay)...) + f, err := full(document, recentDay) + if err != nil { + log.Println(err) + } else { + item = append(item, f) + } + i, err := items(document, recentDay) + if err != nil { + log.Println(err) + } else { + item = append(item, i...) + } if len(item) < 1 { - return "" + return "", err } rss := rss2.Rss2{ Title: "BBC 英语教学", @@ -31,7 +41,7 @@ func LearnParse(s string, recentDay int) string { LastBuildDate: time.Now().Format(time.RFC1123Z), Items: item, } - return rss.GetXML() + return rss.GetXML(), nil } func parseTime(u string) (date time.Time, err error) { @@ -46,7 +56,7 @@ func parseTime(u string) (date time.Time, err error) { return } -func dateFilter(u string, recentDay int) (r bool) { +func dateFilter(u string, recentDay int) (r bool, err error) { date, err := parseTime(u) if err != nil { return @@ -59,7 +69,7 @@ func dateFilter(u string, recentDay int) (r bool) { return } -func fetch(u string) (r rss2.Item) { +func fetch(u string) (r rss2.Item, err error) { res, err := http.Get(u) if err != nil { return @@ -111,11 +121,13 @@ func downAndSendMail(doc *goquery.Document, title string) { if ok { response, err := http.Get(uu) if err != nil { + log.Println(err) continue } name := filepath.Base(uu) file, err := os.OpenFile(name, os.O_CREATE|os.O_WRONLY, 0755) if err != nil { + log.Println(err) continue } fn = append(fn, func() { @@ -124,6 +136,7 @@ func downAndSendMail(doc *goquery.Document, title string) { }) _, err = io.Copy(file, response.Body) if err != nil { + log.Println(err) continue } mm.f = append(mm.f, name) @@ -151,26 +164,36 @@ func downAndSendMail(doc *goquery.Document, title string) { } } -func full(doc *goquery.Document, recentDay int) (r rss2.Item) { +func full(doc *goquery.Document, recentDay int) (r rss2.Item, err error) { a := doc.Find("#bbcle-content .widget-container-full a") u, ok := a.Attr("href") if !ok { return } - if !dateFilter(u, recentDay) { + if ok, er := dateFilter(u, recentDay); !ok || er != nil { + err = er return } - r = fetch(u) + r, err = fetch(u) return } -func items(doc *goquery.Document, recentDay int) (r []rss2.Item) { - doc.Find("#bbcle-content > div > div.widget-container.widget-container-full > div.widget.widget-image.widget-image-two_column > div a").Each(func(i int, s *goquery.Selection) { +func items(doc *goquery.Document, recentDay int) (r []rss2.Item, err error) { + doc.Find(`div[data-widget-index="5"] div.items >div> a`).Each(func(i int, s *goquery.Selection) { u, ok := s.Attr("href") - if !ok || !dateFilter(u, recentDay) { + if !ok { + ok, err = dateFilter(u, recentDay) + if !ok || err != nil { + return + } + + } + rr, er := fetch(u) + if er != nil { + err = er return } - r = append(r, fetch(u)) + r = append(r, rr) }) return } diff --git a/main.go b/main.go index 9ea00e7..42f3079 100644 --- a/main.go +++ b/main.go @@ -75,7 +75,11 @@ func tjxz(w http.ResponseWriter, r *http.Request) { } func bbcLearn(w http.ResponseWriter, _ *http.Request) { io.WriteString(w, fetch("https://www.bbc.co.uk/learningenglish/chinese", func(s string) string { - return bbclearn.LearnParse(s, recentDay) + xm, err := bbclearn.LearnParse(s, recentDay) + if err != nil { + log.Println(err) + } + return xm })) } @@ -96,7 +100,7 @@ var recentDay = 1 func main() { port := os.Getenv("port") if port == "" { - port = ":80" + port = "127.0.0.1:8081" } day := os.Getenv("rss_recent_day") if day != "" {