1st
This commit is contained in:
203
handball.sgo
Normal file
203
handball.sgo
Normal file
@@ -0,0 +1,203 @@
|
||||
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 - последние матчи команд (хозяев и гостей)
|
||||
// Внутри блока <div id="tab-h2h-overall" будут 2 таблицы:
|
||||
// <table class="head_to_head h2h_home"
|
||||
// <table class="head_to_head h2h_away"
|
||||
//
|
||||
// Строки (tr) внутри таблицы имеют вид:
|
||||
// <tr class="odd highlight"
|
||||
// <tr class="even highlight"
|
||||
|
||||
overall := doc.Find("#tab-h2h-overall")
|
||||
if overall.Length() == 0 {
|
||||
err = fmt.Errorf("Div #tab-h2h-overall not found")
|
||||
return
|
||||
}
|
||||
|
||||
overall = overall.First()
|
||||
|
||||
// Последние матчи хозяев (во всех турнирах, на выезде и в гостях)
|
||||
home := overall.Find(".h2h_home")
|
||||
if home.Length() == 0 {
|
||||
err = fmt.Errorf("Table .h2h_home not found")
|
||||
return
|
||||
}
|
||||
|
||||
report.HomeTeamMatches, err = parseMatchesResults(home.First().Find(".highlight"))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Последние матчи AWAY команды (во всех турнирах, на выезде и в гостях)
|
||||
away := overall.Find(".h2h_away")
|
||||
if away.Length() == 0 {
|
||||
err = fmt.Errorf("Table .h2h_away not found")
|
||||
return
|
||||
}
|
||||
|
||||
report.AwayTeamMatches, err = parseMatchesResults(away.First().Find(".highlight"))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Последние личные встречи (во всех турнирах, на выезде и в гостях)
|
||||
h2h := overall.Find(".h2h_mutual")
|
||||
if home.Length() == 0 {
|
||||
err = fmt.Errorf("Table .h2h_mutual not found")
|
||||
return
|
||||
}
|
||||
|
||||
report.H2H, err = parseMatchesResults(h2h.First().Find(".highlight"))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
/*
|
||||
var hasLostMatch bool
|
||||
|
||||
hasLostMatch, report.HomeTeamMatches, err = s.addSummaryToFootballMatches(report.HomeTeamMatches)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if hasLostMatch {
|
||||
report.IsComplete = false
|
||||
}
|
||||
|
||||
hasLostMatch, report.AwayTeamMatches, err = s.addSummaryToFootballMatches(report.AwayTeamMatches)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if hasLostMatch {
|
||||
report.IsComplete = false
|
||||
}
|
||||
|
||||
hasLostMatch, report.H2H, err = s.addSummaryToFootballMatches(report.H2H)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if hasLostMatch {
|
||||
report.IsComplete = false
|
||||
}
|
||||
|
||||
|
||||
*/
|
||||
|
||||
// load odds +
|
||||
report.Odds, err = loadFootballOdds(spider, matchID)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("loadOdds: %s", err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user