Mercurial > mercurial > hgweb_golang.cgi
view src/getexr/checkusd.go @ 34:8a9ffd02a148
add gosleep.go
author | pyon@macmini |
---|---|
date | Thu, 07 Nov 2019 18:47:32 +0900 |
parents | 2afa7e0ff1f2 |
children |
line wrap: on
line source
package main import ( "fmt" "flag" "log" "net/http" "os" "strconv" "time" "golang.org/x/net/html" ) func main() { var thro, thru float64 var help bool flag.Float64Var( &thro, "o", 999.9, "over" ) flag.Float64Var( &thru, "u", 0.0, "under" ) flag.BoolVar( &help, "h", false, "print help" ) flag.Parse() if help { PrintHelp() os.Exit( 0 ) } if thro < thru { fmt.Println( "bad rate." ) os.Exit( 0 ) } url := "http://finance.yahoo.co.jp/" fmt.Printf( "> get rate from '%s' ...\n", url ) usd, err := GetUSD( time.Now(), url ) if err != nil { log.Fatal( err ) } if ( thro == 999.9 && thru == 0.0 ) || ( thro < usd && thru == 0.0 ) || ( thru > usd && thro == 999.9 ) || ( thru > usd && thro < usd ) { os.Exit( 0 ) } c := time.Tick( 30 * time.Second ) for now := range c { usd, _ := GetUSD( now, url ) if thro < usd || thru > usd { os.Exit( 0 ) } } } func GetUSD( now time.Time, url string ) ( float64, error ) { resp, err := http.Get( url ) if err != nil { return 0, err } z := html.NewTokenizer( resp.Body ) usd, _ := ParseHtml( z ) defer resp.Body.Close() fmt.Println( fmt.Sprintf( "%s [ %.3f ]", now.Format( "15:04:05" ), usd ) ) return usd, nil } func ParseHtml( z *html.Tokenizer ) ( float64, error ) { for { tt := z.Next() switch tt { case html.ErrorToken: return 0.0, nil case html.StartTagToken: tag, _ := z.TagName() key, val, _ := z.TagAttr() if string( tag ) == "strong" && string( key ) == "class" && string( val ) == "bkLine" { z.Next() //fmt.Printf( "%s %s %s\n", key, val, z.Token() ) return strconv.ParseFloat( z.Token().String(), 32 ) } } } } func PrintHelp() { fmt.Fprint( os.Stderr, "Usage:\n" ) fmt.Fprint( os.Stderr, "> checkusd # print rate.\n" ) fmt.Fprint( os.Stderr, "> checkusd -o 112.987 # continue printing rate and stop when rate over.\n" ) fmt.Fprint( os.Stderr, "> checkusd -u 112.987 # continue printing rate and stop when rate under.\n" ) fmt.Fprint( os.Stderr, "> checkusd -o 112.987 -u 112.789 # both.\n" ) fmt.Fprint( os.Stderr, "> checkusd -h # print this help\n" ) }