fix bbc
This commit is contained in:
parent
ed796e6d7f
commit
7d530f8d7d
@ -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
|
||||
}
|
||||
|
8
main.go
8
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 != "" {
|
||||
|
Loading…
Reference in New Issue
Block a user