This commit is contained in:
xing 2025-03-20 23:29:05 +08:00
parent ed796e6d7f
commit 7d530f8d7d
2 changed files with 44 additions and 17 deletions

View File

@ -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
}

View File

@ -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 != "" {