omdb.go 700 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package omdb
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "net/http"
  6. "os"
  7. )
  8. const (
  9. base = "http://www.omdbapi.com/?apikey=%s&i=%s"
  10. )
  11. var cache map[string][]byte
  12. func Get(imdbID string) ([]byte, error) {
  13. if cache == nil {
  14. cache = make(map[string][]byte)
  15. }
  16. if b, ok := cache[imdbID]; ok {
  17. return b, nil
  18. }
  19. url := fmt.Sprintf(base, apiKey(), imdbID)
  20. resp, err := http.Get(url)
  21. if err != nil {
  22. return nil, fmt.Errorf("error getting %q: %w", url, err)
  23. }
  24. defer resp.Body.Close()
  25. b, err := ioutil.ReadAll(resp.Body)
  26. if err != nil {
  27. return nil, fmt.Errorf("error reading body from %q: %w", url, err)
  28. }
  29. cache[imdbID] = b
  30. return b, nil
  31. }
  32. func apiKey() string {
  33. return os.Getenv("API_KEY")
  34. }