annotate src/getexr/checkusd.go @ 47:169936fed61b

small changes.
author pyon@macmini
date Tue, 21 Apr 2020 22:43:55 +0900
parents 2afa7e0ff1f2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
1 package main
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
2
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
3 import (
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
4 "fmt"
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
5 "flag"
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
6 "log"
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
7 "net/http"
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
8 "os"
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
9 "strconv"
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
10 "time"
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
11
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
12 "golang.org/x/net/html"
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
13 )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
14
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
15 func main() {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
16
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
17 var thro, thru float64
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
18 var help bool
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
19
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
20 flag.Float64Var( &thro, "o", 999.9, "over" )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
21 flag.Float64Var( &thru, "u", 0.0, "under" )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
22 flag.BoolVar( &help, "h", false, "print help" )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
23 flag.Parse()
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
24
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
25 if help {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
26 PrintHelp()
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
27 os.Exit( 0 )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
28 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
29 if thro < thru {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
30 fmt.Println( "bad rate." )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
31 os.Exit( 0 )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
32 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
33
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
34 url := "http://finance.yahoo.co.jp/"
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
35 fmt.Printf( "> get rate from '%s' ...\n", url )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
36 usd, err := GetUSD( time.Now(), url )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
37 if err != nil {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
38 log.Fatal( err )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
39 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
40 if ( thro == 999.9 && thru == 0.0 ) ||
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
41 ( thro < usd && thru == 0.0 ) ||
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
42 ( thru > usd && thro == 999.9 ) ||
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
43 ( thru > usd && thro < usd ) {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
44 os.Exit( 0 )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
45 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
46
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
47 c := time.Tick( 30 * time.Second )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
48 for now := range c {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
49 usd, _ := GetUSD( now, url )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
50 if thro < usd || thru > usd {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
51 os.Exit( 0 )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
52 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
53 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
54 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
55
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
56 func GetUSD( now time.Time, url string ) ( float64, error ) {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
57
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
58 resp, err := http.Get( url )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
59 if err != nil {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
60 return 0, err
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
61 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
62
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
63 z := html.NewTokenizer( resp.Body )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
64 usd, _ := ParseHtml( z )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
65 defer resp.Body.Close()
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
66 fmt.Println( fmt.Sprintf( "%s [ %.3f ]", now.Format( "15:04:05" ), usd ) )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
67
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
68 return usd, nil
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
69 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
70
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
71 func ParseHtml( z *html.Tokenizer ) ( float64, error ) {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
72 for {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
73 tt := z.Next()
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
74 switch tt {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
75 case html.ErrorToken:
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
76 return 0.0, nil
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
77
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
78 case html.StartTagToken:
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
79 tag, _ := z.TagName()
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
80 key, val, _ := z.TagAttr()
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
81 if string( tag ) == "strong" && string( key ) == "class" && string( val ) == "bkLine" {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
82 z.Next()
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
83 //fmt.Printf( "%s %s %s\n", key, val, z.Token() )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
84 return strconv.ParseFloat( z.Token().String(), 32 )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
85 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
86 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
87 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
88 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
89
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
90 func PrintHelp() {
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
91 fmt.Fprint( os.Stderr, "Usage:\n" )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
92 fmt.Fprint( os.Stderr, "> checkusd # print rate.\n" )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
93 fmt.Fprint( os.Stderr, "> checkusd -o 112.987 # continue printing rate and stop when rate over.\n" )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
94 fmt.Fprint( os.Stderr, "> checkusd -u 112.987 # continue printing rate and stop when rate under.\n" )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
95 fmt.Fprint( os.Stderr, "> checkusd -o 112.987 -u 112.789 # both.\n" )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
96 fmt.Fprint( os.Stderr, "> checkusd -h # print this help\n" )
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
97 }
2afa7e0ff1f2 add checkusd.go
pyon@macmini
parents:
diff changeset
98