Mercurial > mercurial > hgweb_golang.cgi
comparison src/getexr/getexr.go @ 13:4fb189ae0a46
getexr: version up.
author | pyon@macmini |
---|---|
date | Wed, 03 Jan 2018 08:10:34 +0900 |
parents | aea69f84ed33 |
children | 001e2aa380ad |
comparison
equal
deleted
inserted
replaced
12:aea69f84ed33 | 13:4fb189ae0a46 |
---|---|
14 "time" | 14 "time" |
15 | 15 |
16 "golang.org/x/net/html" | 16 "golang.org/x/net/html" |
17 ) | 17 ) |
18 | 18 |
19 var ver = "0.1" | 19 var ver = "0.1.1" |
20 | 20 |
21 func main() { | 21 func main() { |
22 | 22 |
23 version := flag.Bool( "v", false, "print version" ) | 23 version := flag.Bool( "v", false, "print version" ) |
24 file := flag.String( "f", "usd.dat", "print version" ) | 24 verbose := flag.Bool( "V", false, "verbose" ) |
25 file := flag.String( "f", "usd.dat", "data file" ) | |
25 flag.Parse() | 26 flag.Parse() |
26 | 27 |
27 if ( *version ) { | 28 if ( *version ) { |
28 fmt.Fprintf( os.Stderr, "getexr - Get Exchange Rate [ version = %s ]\n",ver ) | 29 fmt.Fprintf( os.Stderr, "getexr - Get Exchange Rate [ version = %s ]\n",ver ) |
29 os.Exit( 0 ) | 30 os.Exit( 0 ) |
30 } | 31 } |
31 | 32 |
32 // Get USD Rate | 33 // Get USD Rate |
34 PrintVerbose( *verbose, "> get rate from yahoo..." ) | |
33 url := "http://finance.yahoo.co.jp/" | 35 url := "http://finance.yahoo.co.jp/" |
34 resp, err := http.Get( url ) | 36 resp, err := http.Get( url ) |
35 if err != nil { | 37 if err != nil { |
36 log.Fatal( err ) | 38 log.Fatal( err ) |
37 } | 39 } |
40 PrintVerbose( *verbose, "done\n" ) | |
38 | 41 |
39 z := html.NewTokenizer( resp.Body ) | 42 z := html.NewTokenizer( resp.Body ) |
40 usd, err := ParseHtml( z ) | 43 usd, err := ParseHtml( z ) |
41 if err != nil { | 44 if err != nil { |
42 log.Fatal( err ) | 45 log.Fatal( err ) |
51 | 54 |
52 buf1 := strings.Split( string( content ), "\n" ) | 55 buf1 := strings.Split( string( content ), "\n" ) |
53 buf2 := strings.Split( buf1[ len( buf1 ) - 2 ], "," ) | 56 buf2 := strings.Split( buf1[ len( buf1 ) - 2 ], "," ) |
54 usd0, _ := strconv.ParseFloat( buf2[1], 32 ) | 57 usd0, _ := strconv.ParseFloat( buf2[1], 32 ) |
55 | 58 |
56 alart := false | |
57 if ( math.Abs( usd0 - usd ) > 1.0 ) { | 59 if ( math.Abs( usd0 - usd ) > 1.0 ) { |
58 alart = true | 60 PrintVerbose( *verbose, "> rate changed.\n" ) |
59 } | |
60 | |
61 if ( alart ) { | |
62 t := time.Now() | 61 t := time.Now() |
63 now := t.Format( "2006-01-02 15:04:05" ) | 62 now := t.Format( "2006-01-02 15:04:05" ) |
64 | 63 |
65 // Save Rate | 64 // Save Rate |
66 buf := fmt.Sprintf( "%s,%.2f\n", now, usd ) | 65 buf := fmt.Sprintf( "%s,%.2f\n", now, usd ) |
70 if err != nil { | 69 if err != nil { |
71 log.Fatal( err ) | 70 log.Fatal( err ) |
72 } | 71 } |
73 | 72 |
74 // Post E-mail | 73 // Post E-mail |
75 err = SendMail( now, usd, "muty@willcom.com" ) | 74 PrintVerbose( *verbose, "> sending mail.\n" ) |
75 err = SendMail( now, usd, buf2[0], usd0 ) | |
76 if err != nil { | 76 if err != nil { |
77 log.Fatal( err ) | 77 log.Fatal( err ) |
78 } | 78 } |
79 err = SendMail( now, usd, "pyon4pyon@yahoo.co.jp" ) | 79 } else { |
80 if err != nil { | 80 PrintVerbose( *verbose, "> no change.\n" ) |
81 log.Fatal( err ) | |
82 } | |
83 } | 81 } |
82 | |
83 PrintVerbose( *verbose, "> finish.\n" ) | |
84 } | 84 } |
85 | 85 |
86 func ParseHtml( z *html.Tokenizer ) ( float64, error ) { | 86 func ParseHtml( z *html.Tokenizer ) ( float64, error ) { |
87 for { | 87 for { |
88 tt := z.Next() | 88 tt := z.Next() |
100 } | 100 } |
101 } | 101 } |
102 } | 102 } |
103 } | 103 } |
104 | 104 |
105 func SendMail( now string, usd float64, addr string ) error { | 105 func SendMail( now string, usd float64, old string, usd0 float64 ) error { |
106 address := "muty@willcom.com" | |
106 hostname := "sdm.sakura.ne.jp" | 107 hostname := "sdm.sakura.ne.jp" |
107 auth := smtp.PlainAuth( "", "bad_user@sdm.sakura.ne.jp", "hogehoge3", hostname ) | 108 auth := smtp.PlainAuth( "", "bad_user@sdm.sakura.ne.jp", "hogehoge3", hostname ) |
108 to := []string{ addr } | 109 to := []string{ address } |
109 msg := []byte( "To: " + addr + "\r\n" + | 110 msg := []byte( "To: " + address + "\r\n" + |
110 "Subject: Exchange-Mail\r\n" + | 111 "Subject: Exchange-Mail\r\n" + |
111 "\r\n" + | 112 "\r\n" + |
112 now + fmt.Sprintf( "\r\nrate changed\r\n[ USD/JPY : %.2f ].", usd ) + "\r\n" ) // mail body | 113 "rate changed\r\n" + |
114 now + "\r\n" + | |
115 fmt.Sprintf( "[ USD/JPY : %.2f ].", usd ) + "\r\n\r\n" + | |
116 old + "\r\n" + | |
117 fmt.Sprintf( "[ USD/JPY : %.2f ].", usd0 ) + "\r\n" ) // mail body | |
113 err := smtp.SendMail( hostname + ":587", auth, "bad_user@sdm.sakura.ne.jp", to, msg ) | 118 err := smtp.SendMail( hostname + ":587", auth, "bad_user@sdm.sakura.ne.jp", to, msg ) |
114 if err != nil { | 119 if err != nil { |
115 return err | 120 return err |
116 } | 121 } |
117 return nil | 122 return nil |
118 } | 123 } |
119 | 124 |
125 func PrintVerbose( y bool, msg string ) { | |
126 if y { | |
127 fmt.Fprintf( os.Stderr, msg ) | |
128 } | |
129 } | |
130 |