main.go - randomcrap - random crap programs of varying quality
 (HTM) git clone git://git.codemadness.org/randomcrap
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       main.go (1952B)
       ---
            1 package main
            2 
            3 import (
            4         "encoding/xml"
            5         "fmt"
            6         "log"
            7         "os"
            8         "strconv"
            9         "time"
           10 )
           11 
           12 var currencynames map[string]string = map[string]string{
           13         "USD": "US dollar",
           14         "JPY": "Japanese yen",
           15         "BGN": "Bulgarian lev",
           16         "CZK": "Czech koruna",
           17         "DKK": "Danish krone",
           18         "GBP": "Pound sterling",
           19         "HUF": "Hungarian forint",
           20         "PLN": "Polish zloty",
           21         "RON": "Romanian leu",
           22         "SEK": "Swedish krona",
           23         "CHF": "Swiss franc",
           24         "NOK": "Norwegian krone",
           25         "HRK": "Croatian kuna",
           26         "RUB": "Russian rouble",
           27         "TRY": "Turkish lira",
           28         "AUD": "Australian dollar",
           29         "BRL": "Brazilian real",
           30         "CAD": "Canadian dollar",
           31         "CNY": "Chinese yuan renminbi",
           32         "HKD": "Hong Kong dollar",
           33         "IDR": "Indonesian rupiah",
           34         "ILS": "Israeli shekel",
           35         "INR": "Indian rupee",
           36         "KRW": "South Korean won",
           37         "MXN": "Mexican peso",
           38         "MYR": "Malaysian ringgit",
           39         "NZD": "New Zealand dollar",
           40         "PHP": "Philippine peso",
           41         "SGD": "Singapore dollar",
           42         "THB": "Thai baht",
           43         "ZAR": "South African rand",
           44 }
           45 
           46 type Result struct {
           47         Subject string `xml:"subject"`
           48         Sender  string `xml:"Sender>name"`
           49         Cube    []struct {
           50                 Time       string `xml:"time,attr"` // format: 2017-04-04
           51                 Currencies []struct {
           52                         Code string `xml:"currency,attr"` // currency code, format: "USD"
           53                         Rate string `xml:"rate,attr"`     // format: 1.0651
           54                 } `xml:"Cube"`
           55         } `xml:"Cube>Cube"`
           56 }
           57 
           58 func main() {
           59         result := Result{}
           60         dec := xml.NewDecoder(os.Stdin)
           61         err := dec.Decode(&result)
           62         if err != nil {
           63                 panic(err)
           64         }
           65 
           66         for _, cb := range result.Cube {
           67                 for _, c := range cb.Currencies {
           68                         dt, err := time.Parse("2006-01-02", cb.Time)
           69                         if err != nil {
           70                                 log.Printf("warning, skipping: invalid time: %s", cb.Time)
           71                                 continue
           72                         }
           73 
           74                         f, err := strconv.ParseFloat(c.Rate, 64)
           75                         if err != nil {
           76                                 log.Printf("warning, skipping: invalid currency rate: %s for %s", c.Rate, c.Code)
           77                                 continue
           78                         }
           79 
           80                         name := currencynames[c.Code]
           81                         fmt.Printf("%s 00:00:00        %s        %s        %g\n",
           82                                 dt.Format("2006-01-02"), name, c.Code, f)
           83                 }
           84         }
           85 }