movies.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package movies
  2. import (
  3. "encoding/json"
  4. "strconv"
  5. "strings"
  6. )
  7. type Movie struct {
  8. Title string
  9. Director string
  10. Poster string
  11. Rating *Rating
  12. IMDBID string
  13. OMDB OMDBMovie
  14. }
  15. type Rating struct {
  16. Note float64
  17. Votes int64
  18. }
  19. type OMDBMovie struct {
  20. Title string
  21. Year string
  22. Rated string
  23. Released string
  24. Runtime string
  25. Genre string
  26. Director string
  27. Writer string
  28. Actors string
  29. Plot string
  30. Language string
  31. Country string
  32. Awards string
  33. Poster string
  34. Ratings []OMDBRating
  35. Metascore string
  36. IMDBRating string `json: "imdbRating"`
  37. IMDBVotes string `json: "imdbVotes"`
  38. IMDBID string `json: "imdbID"`
  39. Type string
  40. DVD string
  41. BoxOffice string
  42. Production string
  43. Website string
  44. Response string
  45. }
  46. type OMDBRating struct {
  47. Source, Value string
  48. }
  49. func Unmarshal(b []byte) (*Movie, error) {
  50. var omdb OMDBMovie
  51. if err := json.Unmarshal(b, &omdb); err != nil {
  52. return nil, err
  53. }
  54. m := &Movie{
  55. OMDB: omdb,
  56. }
  57. if err := m.FillFromOMDB(); err != nil {
  58. return nil, err
  59. }
  60. return m, nil
  61. }
  62. func (m *Movie) FillFromOMDB() error {
  63. if m.Title == "" {
  64. m.Title = m.OMDB.Title
  65. }
  66. if m.Director == "" {
  67. m.Director = m.OMDB.Director
  68. }
  69. if m.Poster == "" {
  70. m.Poster = m.OMDB.Poster
  71. }
  72. if m.IMDBID == "" {
  73. m.IMDBID = m.OMDB.IMDBID
  74. }
  75. if m.Rating == nil {
  76. m.Rating = &Rating{}
  77. if note, err := strconv.ParseFloat(m.OMDB.IMDBRating, 64); err == nil {
  78. m.Rating.Note = note
  79. }
  80. if votes, err := strconv.ParseInt(strings.ReplaceAll(m.OMDB.IMDBVotes, ",", ""), 10, 64); err == nil {
  81. m.Rating.Votes = votes
  82. }
  83. }
  84. return nil
  85. }