Created
February 9, 2014 16:59
-
-
Save thenonameguy/8902112 to your computer and use it in GitHub Desktop.
Bartos élete végéig köszöntő programocska
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"encoding/json" | |
"errors" | |
"fmt" | |
"io/ioutil" | |
"net/http" | |
"net/url" | |
"strconv" | |
"time" | |
) | |
type gender string | |
const ( | |
Male gender = "male" | |
Female gender = "female" | |
) | |
type lifeResult struct { | |
Data lifeResultData | |
Success bool | |
} | |
type lifeResultData struct { | |
Date lifeResultDate | |
} | |
type lifeResultDate struct { | |
Years int | |
} | |
type Bartos struct { | |
InitialAge int | |
Age int | |
birthday time.Time | |
expectedYearsFromNow int | |
expectedYears int | |
} | |
func (b *Bartos) isDead() bool { | |
return b.Age >= b.expectedYears+b.InitialAge | |
} | |
func NewBartos() Bartos { | |
return Bartos{ | |
InitialAge: 18, | |
Age: 18, | |
birthday: time.Date(1995, time.February, 7, 0, 0, 0, 0, time.UTC), | |
} | |
} | |
func fetchExpectedYears(bday time.Time, gender gender) (int, error) { | |
client := &http.Client{} | |
getValues := url.Values{} | |
birthStr := strconv.Itoa(bday.Day()) + " " + bday.Month().String() + " " + strconv.Itoa(bday.Year()) | |
getValues.Add("birth", birthStr) | |
getValues.Add("gender", string(gender)) | |
req, err := http.NewRequest("GET", "https://life-left.p.mashape.com/time-left?"+getValues.Encode(), nil) | |
if err != nil { | |
return -1, err | |
} | |
req.Header.Add("X-Mashape-Authorization", "paR7P8vNwZrryy2rNgQOXplGKrtxUEVA") | |
resp, err := client.Do(req) | |
if err != nil { | |
return -1, err | |
} | |
jsonblob, err := ioutil.ReadAll(resp.Body) | |
if err != nil { | |
return -1, err | |
} | |
var result lifeResult | |
if err := json.Unmarshal(jsonblob, &result); err != nil { | |
return -1, err | |
} | |
if !result.Success { | |
return -1, errors.New("JSON query failed, success false") | |
} | |
return result.Data.Date.Years, nil | |
} | |
func main() { | |
bartos := NewBartos() | |
years, err := fetchExpectedYears(bartos.birthday, Male) | |
if err != nil { | |
fmt.Println(err) | |
return | |
} | |
bartos.expectedYears, bartos.expectedYearsFromNow = years, years | |
facebookWall := make(chan string) | |
go func() { | |
for { | |
bartos.Age++ | |
bartos.expectedYearsFromNow-- | |
facebookWall <- "Boldog " + strconv.Itoa(bartos.Age) + ".-ik szülinapot! Nyugi még van hátra " + strconv.Itoa(bartos.expectedYearsFromNow) + " éved! :)" | |
//time.Sleep(8766 * time.Hour) | |
time.Sleep(time.Millisecond) | |
} | |
}() | |
for !bartos.isDead() { | |
select { | |
case msg := <-facebookWall: | |
fmt.Println(msg) | |
} | |
} | |
fmt.Println("you is dead, sorry") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment