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