package flashscore import ( "bytes" "fmt" webspider "spider" "time" "github.com/PuerkitoBio/goquery" ) func listScheduledHandballMatches() (result []ScheduledMatch, err error) { spider, err := webspider.NewSpider(nil) if err != nil { panic(err) } // Загружаем AJAX страницу с таблицами матчей //url := fmt.Sprintf(h2hTablesURLPattern, matchID) buf, err := spider.Get(handballAllGamesFeedURL, map[string]string{ "referer": "https://d.flashscore.com/x/feed/proxy-local", "x-requested-with": "XMLHttpRequest", // Важное поле! Код можно найти в исходниках либо подсмотреть. Без кода // сервер отдает 401 ошибку "x-fsign": feedSign, "x-referer": "https://www.flashscore.com/handball/", "x-geoip": "1", }) if err != nil { err = fmt.Errorf("Load handball All Games feed: %s", err) return } result, err = parseListOfScheduledMatches(string(buf)) if err != nil { err = fmt.Errorf("parseListOfScheduledMatches: %s", err) return } return } func Check() (err error) { matches, err := listScheduledHandballMatches() if err != nil { return } matches = DiscardScheduledMatchesFurtherThan(matches, 24*time.Hour) for _, m := range matches { report, err := GetUpcomingMatchReport(m.MatchID) if err != nil { // log } } return } func GetUpcomingMatchReport(matchID string) (report HandballUpcomingMatchReport, err error) { report.IsComplete = true spider, err := webspider.NewSpider(nil) if err != nil { panic(err) } // Загружаем Landing landingURL := fmt.Sprintf(h2hLandingURLPattern, matchID) buf, err := spider.Get(landingURL, nil) if err != nil { err = fmt.Errorf("load h2hLanding: %s", err) return } doc, err := goquery.NewDocumentFromReader(bytes.NewBuffer(buf)) if err != nil { err = fmt.Errorf("goquery.NewDocumentFromReader: %s", err) return } // FIX - добавить чемпионат и парсинг инфы //_, _, report.Home, report.Away, err = s.parseFootballMatchInfo(doc) //if err != nil { // return //} // Загружаем AJAX страницу с таблицами матчей url := fmt.Sprintf(h2hTablesURLPattern, matchID) buf, err = spider.Get(url, map[string]string{ "referer": "https://d.flashscore.com/x/feed/proxy-local", "x-requested-with": "XMLHttpRequest", // Важное поле! Код можно найти в исходниках либо подсмотреть. Без кода // сервер отдает 401 ошибку "x-fsign": feedSign, "x-referer": fmt.Sprintf(h2hLandingURLPattern, matchID), "x-geoip": "1", }) if err != nil { err = fmt.Errorf("load h2hTables: %s", err) return } doc, err = goquery.NewDocumentFromReader(bytes.NewBuffer(buf)) if err != nil { err = fmt.Errorf("goquery.NewDocumentFromReader: %s", err) return } // var (dirtyTeamID string // OVERALL - последние матчи команд (хозяев и гостей) // Внутри блока