示例#1
0
func main() {
	var twitr twitter.Twitter
	templates = template.Must(template.New("nma").Parse(templateNMA))
	templates = template.Must(templates.New("console").Parse(templateNotifyConsole))

	username := os.Getenv("TWITTER_USERNAME")
	checkEnvVar(username)
	key := os.Getenv("TWITTER_KEY")
	checkEnvVar(key)
	secret := os.Getenv("TWITTER_SECRET")
	checkEnvVar(secret)
	nmaKey = os.Getenv("NOTIFY_MY_ANDROID_KEY") // this parameter is optional, no need to check
	if nmaKey != "" {
		n := nma.New(nmaKey)
		err := n.Verify(nmaKey)
		handleError(err)
	}

	twitr = twitter.NewTwitter(key, secret)
	defer twitr.Close()

	done := make(chan bool)

	c := make(chan os.Signal)

	signal.Notify(c, os.Interrupt)

	go func(twitr twitter.Twitter, done <-chan bool) {
		var end bool
		var prevFollowers, curFollowers Followers
		prevFollowers = getFollowers(twitr, username)
		fmt.Printf("Initialisation: %v followers for user %v\n", len(prevFollowers.Ids), username)
		tick := time.Tick(1 * time.Minute)
		for !end {
			select {
			case <-done:
				end = true
			case <-tick:
				curFollowers = getFollowers(twitr, username)
				if len(curFollowers.Ids) == 0 {
					continue
				}
				lost, win := diffFollowers(prevFollowers.Ids, curFollowers.Ids)
				res := parseResult(twitr, result{lose: lost, win: win, source: curFollowers})
				notify(res)
				prevFollowers = curFollowers
			}
		}
	}(twitr, done)

	select {
	case <-c:
		done <- true
	}
}