fix bbc
This commit is contained in:
parent
ed796e6d7f
commit
7d530f8d7d
@ -14,16 +14,26 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func LearnParse(s string, recentDay int) string {
|
func LearnParse(s string, recentDay int) (string, error) {
|
||||||
document, err := goquery.NewDocumentFromReader(strings.NewReader(s))
|
document, err := goquery.NewDocumentFromReader(strings.NewReader(s))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ""
|
return "", err
|
||||||
}
|
}
|
||||||
var item []rss2.Item
|
var item []rss2.Item
|
||||||
item = append(item, full(document, recentDay))
|
f, err := full(document, recentDay)
|
||||||
item = append(item, items(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 {
|
if len(item) < 1 {
|
||||||
return ""
|
return "", err
|
||||||
}
|
}
|
||||||
rss := rss2.Rss2{
|
rss := rss2.Rss2{
|
||||||
Title: "BBC 英语教学",
|
Title: "BBC 英语教学",
|
||||||
@ -31,7 +41,7 @@ func LearnParse(s string, recentDay int) string {
|
|||||||
LastBuildDate: time.Now().Format(time.RFC1123Z),
|
LastBuildDate: time.Now().Format(time.RFC1123Z),
|
||||||
Items: item,
|
Items: item,
|
||||||
}
|
}
|
||||||
return rss.GetXML()
|
return rss.GetXML(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseTime(u string) (date time.Time, err error) {
|
func parseTime(u string) (date time.Time, err error) {
|
||||||
@ -46,7 +56,7 @@ func parseTime(u string) (date time.Time, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func dateFilter(u string, recentDay int) (r bool) {
|
func dateFilter(u string, recentDay int) (r bool, err error) {
|
||||||
date, err := parseTime(u)
|
date, err := parseTime(u)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -59,7 +69,7 @@ func dateFilter(u string, recentDay int) (r bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetch(u string) (r rss2.Item) {
|
func fetch(u string) (r rss2.Item, err error) {
|
||||||
res, err := http.Get(u)
|
res, err := http.Get(u)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -111,11 +121,13 @@ func downAndSendMail(doc *goquery.Document, title string) {
|
|||||||
if ok {
|
if ok {
|
||||||
response, err := http.Get(uu)
|
response, err := http.Get(uu)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
name := filepath.Base(uu)
|
name := filepath.Base(uu)
|
||||||
file, err := os.OpenFile(name, os.O_CREATE|os.O_WRONLY, 0755)
|
file, err := os.OpenFile(name, os.O_CREATE|os.O_WRONLY, 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
fn = append(fn, func() {
|
fn = append(fn, func() {
|
||||||
@ -124,6 +136,7 @@ func downAndSendMail(doc *goquery.Document, title string) {
|
|||||||
})
|
})
|
||||||
_, err = io.Copy(file, response.Body)
|
_, err = io.Copy(file, response.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
mm.f = append(mm.f, name)
|
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")
|
a := doc.Find("#bbcle-content .widget-container-full a")
|
||||||
u, ok := a.Attr("href")
|
u, ok := a.Attr("href")
|
||||||
if !ok {
|
if !ok {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !dateFilter(u, recentDay) {
|
if ok, er := dateFilter(u, recentDay); !ok || er != nil {
|
||||||
|
err = er
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
r = fetch(u)
|
r, err = fetch(u)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func items(doc *goquery.Document, recentDay int) (r []rss2.Item) {
|
func items(doc *goquery.Document, recentDay int) (r []rss2.Item, err error) {
|
||||||
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) {
|
doc.Find(`div[data-widget-index="5"] div.items >div> a`).Each(func(i int, s *goquery.Selection) {
|
||||||
u, ok := s.Attr("href")
|
u, ok := s.Attr("href")
|
||||||
if !ok || !dateFilter(u, recentDay) {
|
if !ok {
|
||||||
|
ok, err = dateFilter(u, recentDay)
|
||||||
|
if !ok || err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
r = append(r, fetch(u))
|
|
||||||
|
}
|
||||||
|
rr, er := fetch(u)
|
||||||
|
if er != nil {
|
||||||
|
err = er
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r = append(r, rr)
|
||||||
})
|
})
|
||||||
return
|
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) {
|
func bbcLearn(w http.ResponseWriter, _ *http.Request) {
|
||||||
io.WriteString(w, fetch("https://www.bbc.co.uk/learningenglish/chinese", func(s string) string {
|
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() {
|
func main() {
|
||||||
port := os.Getenv("port")
|
port := os.Getenv("port")
|
||||||
if port == "" {
|
if port == "" {
|
||||||
port = ":80"
|
port = "127.0.0.1:8081"
|
||||||
}
|
}
|
||||||
day := os.Getenv("rss_recent_day")
|
day := os.Getenv("rss_recent_day")
|
||||||
if day != "" {
|
if day != "" {
|
||||||
|
Loading…
Reference in New Issue
Block a user