random.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package tmdb
  2. import (
  3. "notabug.org/apiote/amuse/config"
  4. "notabug.org/apiote/amuse/network"
  5. "encoding/json"
  6. "math/rand"
  7. "net/http"
  8. "strconv"
  9. "notabug.org/apiote/gott"
  10. )
  11. type RandomFilms struct {
  12. Results []struct {
  13. Title string
  14. }
  15. }
  16. func createRandomRequest(args ...interface{}) (interface{}, error) {
  17. request := args[0].(*network.Request)
  18. result := args[1].(*network.Result)
  19. client := &http.Client{}
  20. page := strconv.FormatInt(rand.Int63n(100), 10)
  21. httpRequest, err := http.NewRequest("GET", "https://api.themoviedb.org/3/discover/movie?api_key="+config.TmdbApiKey+"&language="+request.Language+"&sort_by=popularity.desc&include_adult=false&include_video=false&page="+page+"&with_genres=35", nil)
  22. result.Client = client
  23. result.Request = httpRequest
  24. return gott.Tuple(args), err
  25. }
  26. func unmarshalRandom(args ...interface{}) (interface{}, error) {
  27. result := args[1].(*network.Result)
  28. films := &RandomFilms{}
  29. err := json.Unmarshal(result.Body, films)
  30. result.Result = films.Results[rand.Intn(len(films.Results))].Title
  31. return gott.Tuple(args), err
  32. }
  33. func GetRandomComedy(language string) (string, error) {
  34. film, err := gott.
  35. NewResult(gott.Tuple{&network.Request{Language: language}, &network.Result{}}).
  36. Bind(createRandomRequest).
  37. Map(network.AddHeaders).
  38. Bind(network.DoRequest).
  39. Bind(network.HandleRequestError).
  40. Bind(network.ReadResponse).
  41. Bind(unmarshalRandom).
  42. Finish()
  43. if err != nil {
  44. return "", err
  45. } else {
  46. return film.(gott.Tuple)[1].(*network.Result).Result.(string), nil
  47. }
  48. }