annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
1 package main
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
2
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
3 import (
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
4 "fmt"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
5 "flag"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
6 "io/ioutil"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
7 "log"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
8 "math"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
9 "net/http"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
10 "net/smtp"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
11 "os"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
12 "strconv"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
13 "strings"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
14 "time"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
15
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
16 "golang.org/x/net/html"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
17 )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
18
13
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
19 var ver = "0.1.1"
12
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
20
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
21 func main() {
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
22
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
23 version := flag.Bool( "v", false, "print version" )
13
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
24 verbose := flag.Bool( "V", false, "verbose" )
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
25 file := flag.String( "f", "usd.dat", "data file" )
12
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
26 flag.Parse()
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
27
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
28 if ( *version ) {
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
29 fmt.Fprintf( os.Stderr, "getexr - Get Exchange Rate [ version = %s ]\n",ver )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
30 os.Exit( 0 )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
31 }
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
32
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
33 // Get USD Rate
13
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
34 PrintVerbose( *verbose, "> get rate from yahoo..." )
12
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
35 url := "http://finance.yahoo.co.jp/"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
36 resp, err := http.Get( url )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
37 if err != nil {
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
38 log.Fatal( err )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
39 }
13
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
40 PrintVerbose( *verbose, "done\n" )
12
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
41
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
42 z := html.NewTokenizer( resp.Body )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
43 usd, err := ParseHtml( z )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
44 if err != nil {
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
45 log.Fatal( err )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
46 }
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
47 defer resp.Body.Close()
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
48
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
49 // Compare Past Rate
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
50 content, err := ioutil.ReadFile( *file )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
51 if err != nil {
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
52 log.Fatal( err )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
53 }
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
54
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
55 buf1 := strings.Split( string( content ), "\n" )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
56 buf2 := strings.Split( buf1[ len( buf1 ) - 2 ], "," )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
57 usd0, _ := strconv.ParseFloat( buf2[1], 32 )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
58
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
59 if ( math.Abs( usd0 - usd ) > 1.0 ) {
13
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
60 PrintVerbose( *verbose, "> rate changed.\n" )
12
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
61 t := time.Now()
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
62 now := t.Format( "2006-01-02 15:04:05" )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
63
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
64 // Save Rate
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
65 buf := fmt.Sprintf( "%s,%.2f\n", now, usd )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
66 content = append( content, buf... )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
67
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
68 err = ioutil.WriteFile( *file, content, 0777 )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
69 if err != nil {
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
70 log.Fatal( err )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
71 }
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
72
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
73 // Post E-mail
13
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
74 PrintVerbose( *verbose, "> sending mail.\n" )
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
75 err = SendMail( now, usd, buf2[0], usd0 )
12
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
76 if err != nil {
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
77 log.Fatal( err )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
78 }
13
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
79 } else {
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
80 PrintVerbose( *verbose, "> no change.\n" )
12
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
81 }
13
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
82
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
83 PrintVerbose( *verbose, "> finish.\n" )
12
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
84 }
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
85
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
86 func ParseHtml( z *html.Tokenizer ) ( float64, error ) {
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
87 for {
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
88 tt := z.Next()
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
89 switch tt {
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
90 case html.ErrorToken:
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
91 return 0.0, nil
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
92
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
93 case html.StartTagToken:
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
94 tag, _ := z.TagName()
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
95 key, val, _ := z.TagAttr()
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
96 if string( tag ) == "strong" && string( key ) == "class" && string( val ) == "bkLine" {
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
97 z.Next()
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
98 //fmt.Printf( "%s %s %s\n", key, val, z.Token() )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
99 return strconv.ParseFloat( z.Token().String(), 32 )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
100 }
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
101 }
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
102 }
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
103 }
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
104
13
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
105 func SendMail( now string, usd float64, old string, usd0 float64 ) error {
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
106 address := "muty@willcom.com"
12
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
107 hostname := "sdm.sakura.ne.jp"
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
108 auth := smtp.PlainAuth( "", "bad_user@sdm.sakura.ne.jp", "hogehoge3", hostname )
13
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
109 to := []string{ address }
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
110 msg := []byte( "To: " + address + "\r\n" +
12
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
111 "Subject: Exchange-Mail\r\n" +
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
112 "\r\n" +
13
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
113 "rate changed\r\n" +
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
114 now + "\r\n" +
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
115 fmt.Sprintf( "[ USD/JPY : %.2f ].", usd ) + "\r\n\r\n" +
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
116 old + "\r\n" +
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
117 fmt.Sprintf( "[ USD/JPY : %.2f ].", usd0 ) + "\r\n" ) // mail body
12
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
118 err := smtp.SendMail( hostname + ":587", auth, "bad_user@sdm.sakura.ne.jp", to, msg )
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
119 if err != nil {
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
120 return err
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
121 }
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
122 return nil
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
123 }
aea69f84ed33 add getexr ( Get Foreign-Exchange )
pyon@macmini
parents:
diff changeset
124
13
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
125 func PrintVerbose( y bool, msg string ) {
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
126 if y {
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
127 fmt.Fprintf( os.Stderr, msg )
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
128 }
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
129 }
4fb189ae0a46 getexr: version up.
pyon@macmini
parents: 12
diff changeset
130