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 }