func getElevatorsAndStatus(station *storage.Station) error { if !station.HasElevators { return nil } var url *url.URL = station.GetURL() resp, err := http.Get(url.String()) if err != nil { return err } defer resp.Body.Close() bodyParser, err := html.Parse(resp.Body) if err != nil { return err } var contents *html.Node = findNodeWithAttributes(bodyParser, "div", map[string]string{"id": "contentRight"}) var p *html.Node = findNode(contents, "p") if !strings.HasPrefix(p.FirstChild.Data, "Situation en date du") { p = findNext(p) } if !strings.HasPrefix(p.FirstChild.Data, "Situation en date du") { p = findNext(p) } var date string = p.FirstChild.Data[21:] var table *html.Node = findNode(bodyParser, "table") var tbody *html.Node = findNode(table, "tbody") var row *html.Node for row = findNode(tbody, "tr"); row != nil; row = findNext(row) { var col *html.Node = findNode(row, "td") var code, situation, direction, status string if col.FirstChild != nil { code = col.FirstChild.Data } col = findNext(col) if col.FirstChild != nil { situation = col.FirstChild.Data } col = findNext(col) if col.FirstChild != nil { direction = col.FirstChild.Data } col = findNext(col) if col.FirstChild != nil && findNode(col, "span") != nil { status = findNode(col, "span").FirstChild.Data } else if col.FirstChild != nil { status = col.FirstChild.Data } var elevator *storage.Elevator = station.NewElevator(code, situation, direction) _, err = elevator.NewStatus(status, date) if err != nil { return err } if elevator.Status.LastUpdate.After(station.LastUpdate) { station.LastUpdate = elevator.Status.LastUpdate } } return nil }