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 |
