Skip to content

Instantly share code, notes, and snippets.

@golman
Created March 24, 2020 20:22
Show Gist options
  • Save golman/eb1208c5c2b15ac6c124047527a105b6 to your computer and use it in GitHub Desktop.
Save golman/eb1208c5c2b15ac6c124047527a105b6 to your computer and use it in GitHub Desktop.
geekbrains golang вебинар: «Продолжаем с Go: пишем сканер погоды» — https://geekbrains.ru/events/1867
package main
import (
"encoding/xml"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/url"
)
type Weather struct {
XMLName xml.Name `xml:"MMWEATHER"`
Text string `xml:",chardata"`
REPORT struct {
Text string `xml:",chardata"`
Type string `xml:"type,attr"`
TOWN struct {
Text string `xml:",chardata"`
Index string `xml:"index,attr"`
Sname string `xml:"sname,attr"`
Latitude string `xml:"latitude,attr"`
Longitude string `xml:"longitude,attr"`
FORECAST []struct {
Text string `xml:",chardata"`
Day string `xml:"day,attr"`
Month string `xml:"month,attr"`
Year string `xml:"year,attr"`
Hour string `xml:"hour,attr"`
Tod string `xml:"tod,attr"`
Predict string `xml:"predict,attr"`
Weekday string `xml:"weekday,attr"`
PHENOMENA struct {
Text string `xml:",chardata"`
Cloudiness string `xml:"cloudiness,attr"`
Precipitation string `xml:"precipitation,attr"`
Rpower string `xml:"rpower,attr"`
Spower string `xml:"spower,attr"`
} `xml:"PHENOMENA"`
PRESSURE struct {
Text string `xml:",chardata"`
Max string `xml:"max,attr"`
Min string `xml:"min,attr"`
} `xml:"PRESSURE"`
TEMPERATURE struct {
Text string `xml:",chardata"`
Max string `xml:"max,attr"`
Min string `xml:"min,attr"`
} `xml:"TEMPERATURE"`
WIND struct {
Text string `xml:",chardata"`
Min string `xml:"min,attr"`
Max string `xml:"max,attr"`
Direction string `xml:"direction,attr"`
} `xml:"WIND"`
RELWET struct {
Text string `xml:",chardata"`
Max string `xml:"max,attr"`
Min string `xml:"min,attr"`
} `xml:"RELWET"`
HEAT struct {
Text string `xml:",chardata"`
Min string `xml:"min,attr"`
Max string `xml:"max,attr"`
} `xml:"HEAT"`
} `xml:"FORECAST"`
} `xml:"TOWN"`
} `xml:"REPORT"`
}
func main() {
response, err := http.Get("https://xml.meteoservice.ru/export/gismeteo/point/182.xml")
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
byteValue, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
}
var weather Weather
err = xml.Unmarshal(byteValue, &weather)
if err != nil {
log.Fatal(err)
}
forecast := weather.REPORT.TOWN.FORECAST
var city, _ = url.PathUnescape(weather.REPORT.TOWN.Sname)
fmt.Println("Forecast for:", city)
for i := 0; i < len(forecast); i++ {
fmt.Print("Date: ", forecast[0].Year+"."+forecast[0].Month+"."+forecast[0].Day)
fmt.Print(", time: ", forecast[i].Hour+":00")
fmt.Print(", temperature from ", forecast[i].TEMPERATURE.Min)
fmt.Println(" to", forecast[i].TEMPERATURE.Max)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment