Skip to content

Instantly share code, notes, and snippets.

@thenonameguy
Created February 9, 2014 16:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thenonameguy/8902112 to your computer and use it in GitHub Desktop.
Save thenonameguy/8902112 to your computer and use it in GitHub Desktop.
Bartos élete végéig köszöntő programocska
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