...

Source file src/github.com/thlib/go-timezone-local/tzdata/download_wintz.go

Documentation: github.com/thlib/go-timezone-local/tzdata

     1  package tzdata
     2  
     3  import (
     4  	"encoding/xml"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"net/http"
     8  )
     9  
    10  const winZonesURL = `https://raw.githubusercontent.com/unicode-org/cldr/master/common/supplemental/windowsZones.xml`
    11  
    12  type SupplementalData struct {
    13  	WindowsZones WindowsZones `xml:"windowsZones"`
    14  }
    15  type Version struct {
    16  	Number string `xml:"number,attr"`
    17  }
    18  type WindowsZones struct {
    19  	MapTimezones []MapTimezones `xml:"mapTimezones"`
    20  }
    21  type MapTimezones struct {
    22  	MapZone []MapZone `xml:"mapZone"`
    23  	Type    string    `xml:"type,attr"`
    24  }
    25  type MapZone struct {
    26  	Other     string `xml:"other,attr"`
    27  	Territory string `xml:"territory,attr"`
    28  	Type      string `xml:"type,attr"`
    29  }
    30  
    31  // DownloadWindowsZones fetches Windows mapping info from unicode.org
    32  func DownloadWindowsZones() (SupplementalData, error) {
    33  	var data SupplementalData
    34  
    35  	resp, err := http.Get(winZonesURL)
    36  	if err != nil {
    37  		return data, err
    38  	}
    39  	defer resp.Body.Close()
    40  
    41  	if resp.StatusCode != http.StatusOK {
    42  		return data, fmt.Errorf("failed to download \"%v\", http error: %v", winZonesURL, resp.StatusCode)
    43  	}
    44  
    45  	bytes, err := ioutil.ReadAll(resp.Body)
    46  	if err != nil {
    47  		return data, err
    48  	}
    49  
    50  	xml.Unmarshal(bytes, &data)
    51  
    52  	return data, nil
    53  }
    54  

View as plain text