118 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	_ "embed"
 | |
| 	"encoding/json"
 | |
| 	"fmt"
 | |
| 	"math/rand"
 | |
| 	"net/http"
 | |
| 	"net/url"
 | |
| 	"os"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| //go:embed platforms.json
 | |
| var platformJSON []byte
 | |
| 
 | |
| type Platform struct {
 | |
| 	ID   int    `json:"platform_id"`
 | |
| 	Name string `json:"platform_name"`
 | |
| }
 | |
| 
 | |
| type platformData struct {
 | |
| 	Platforms []Platform
 | |
| }
 | |
| 
 | |
| type gameData struct {
 | |
| 	Games []struct {
 | |
| 		Title     string
 | |
| 		Platforms []Platform
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func _main(apiKey string) error {
 | |
| 	var foundGame string
 | |
| 	var foundPlatform string
 | |
| 
 | |
| 	var pd platformData
 | |
| 	if err := json.Unmarshal(platformJSON, &pd); err != nil {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 	//ps := pd.Platforms
 | |
| 
 | |
| 	v := url.Values{}
 | |
| 	v.Add("format", "normal")
 | |
| 	v.Add("api_key", apiKey)
 | |
| 
 | |
| 	u := fmt.Sprintf("https://api.mobygames.com/v1/games/random?%s", v.Encode())
 | |
| 
 | |
| 	res, err := http.Get(u)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	if res.StatusCode != 200 {
 | |
| 		return fmt.Errorf("sad satus: %d", res.StatusCode)
 | |
| 	}
 | |
| 
 | |
| 	var gd gameData
 | |
| 	if err = json.NewDecoder(res.Body).Decode(&gd); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	rand.Seed(time.Now().Unix())
 | |
| 
 | |
| 	choice := rand.Intn(len(gd.Games))
 | |
| 
 | |
| 	for ix, game := range gd.Games {
 | |
| 		if ix != choice {
 | |
| 			continue
 | |
| 		}
 | |
| 		foundGame = game.Title
 | |
| 		foundPlatform = game.Platforms[0].Name
 | |
| 	}
 | |
| 
 | |
| 	utterances := []string{
 | |
| 		"huh",
 | |
| 		"wow",
 | |
| 		"whoa",
 | |
| 		"well",
 | |
| 		"geez",
 | |
| 		"neato",
 | |
| 	}
 | |
| 
 | |
| 	pauses := []string{
 | |
| 		"...",
 | |
| 		", ",
 | |
| 		". ",
 | |
| 		"! ",
 | |
| 		"; ",
 | |
| 	}
 | |
| 
 | |
| 	suffices := []string{
 | |
| 		"",
 | |
| 		".",
 | |
| 		"!",
 | |
| 		"...",
 | |
| 	}
 | |
| 
 | |
| 	utterance := utterances[rand.Intn(len(utterances))]
 | |
| 	pause := pauses[rand.Intn(len(pauses))]
 | |
| 	suffix := suffices[rand.Intn(len(suffices))]
 | |
| 
 | |
| 	fmt.Printf("%s%sgames sure have come a long way since %s for %s%s\n", utterance, pause, foundGame, foundPlatform, suffix)
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func main() {
 | |
| 	apiKey := os.Getenv("MOBYKEY")
 | |
| 	if apiKey == "" {
 | |
| 		panic("MOBYKEY not found in env")
 | |
| 	}
 | |
| 	if err := _main(apiKey); err != nil {
 | |
| 		fmt.Println(err.Error())
 | |
| 		os.Exit(1)
 | |
| 	}
 | |
| }
 |