kobis.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. package model
  2. import (
  3. "crawler/config"
  4. "crawler/service"
  5. "encoding/json"
  6. "fmt"
  7. "github.com/google/go-querystring/query"
  8. )
  9. type Kobis struct {
  10. Rest service.Rest
  11. }
  12. // KOBIS 오류 응답 (HTTP 200으로 반환되므로 body 검사 필수)
  13. type KobisFault struct {
  14. FaultInfo *struct {
  15. Message string `json:"message"`
  16. ErrorCode string `json:"errorCode"`
  17. } `json:"faultInfo"`
  18. }
  19. // KOBIS faultInfo 응답 확인 (무효 키, 쿼터 초과 등)
  20. func (this *Kobis) checkFault(data []byte) error {
  21. var fault KobisFault
  22. if json.Unmarshal(data, &fault) == nil && fault.FaultInfo != nil {
  23. err := fmt.Errorf("KOBIS fault %s: %s", fault.FaultInfo.ErrorCode, fault.FaultInfo.Message)
  24. this.Rest.Check(err)
  25. return err
  26. }
  27. return nil
  28. }
  29. func (this *Kobis) MovieDailyBoxOfficeListAPI(req SearchDailyBoxOfficeParams) (SearchDailyBoxOfficeList, error) {
  30. var (
  31. url = config.MOVIE_DAILY_BOX_OFFICE_LIST
  32. query, _ = query.Values(req)
  33. result SearchDailyBoxOfficeList
  34. )
  35. if query.Encode() != "" {
  36. url += "?" + query.Encode()
  37. }
  38. data, err := this.Rest.CallRestGetAPI(url)
  39. if this.Rest.Check(err) {
  40. return result, err
  41. }
  42. if err := this.checkFault(data); err != nil {
  43. return result, err
  44. }
  45. err = json.Unmarshal(data, &result)
  46. if this.Rest.Check(err) {
  47. return result, err
  48. }
  49. return result, nil
  50. }
  51. func (this *Kobis) MovieWeeklyBoxOfficeListAPI(req SearchWeeklyBoxOfficeParams) (SearchWeeklyBoxOfficeList, error) {
  52. var (
  53. url = config.MOVIE_WEEK_BOX_OFFICE_LIST
  54. query, _ = query.Values(req)
  55. result SearchWeeklyBoxOfficeList
  56. )
  57. if query.Encode() != "" {
  58. url += "?" + query.Encode()
  59. }
  60. data, err := this.Rest.CallRestGetAPI(url)
  61. if this.Rest.Check(err) {
  62. return result, err
  63. }
  64. if err := this.checkFault(data); err != nil {
  65. return result, err
  66. }
  67. err = json.Unmarshal(data, &result)
  68. if this.Rest.Check(err) {
  69. return result, err
  70. }
  71. return result, nil
  72. }
  73. func (this *Kobis) MovieListAPI(req SearchMovieListParams) (SearchMovieList, error) {
  74. var (
  75. url = config.MOVIE_LIST
  76. query, _ = query.Values(req)
  77. result SearchMovieList
  78. )
  79. if query.Encode() != "" {
  80. url += "?" + query.Encode()
  81. }
  82. data, err := this.Rest.CallRestGetAPI(url)
  83. if this.Rest.Check(err) {
  84. return result, err
  85. }
  86. if err := this.checkFault(data); err != nil {
  87. return result, err
  88. }
  89. err = json.Unmarshal(data, &result)
  90. if this.Rest.Check(err) {
  91. return result, err
  92. }
  93. return result, nil
  94. }
  95. func (this *Kobis) MovieInfoAPI(req SearchMovieInfoParams) (SearchMovieInfo, error) {
  96. var (
  97. url = config.MOVIE_INFO
  98. query, _ = query.Values(req)
  99. result SearchMovieInfo
  100. )
  101. if query.Encode() != "" {
  102. url += "?" + query.Encode()
  103. }
  104. data, err := this.Rest.CallRestGetAPI(url)
  105. if this.Rest.Check(err) {
  106. return result, err
  107. }
  108. if err := this.checkFault(data); err != nil {
  109. return result, err
  110. }
  111. err = json.Unmarshal(data, &result)
  112. if this.Rest.Check(err) {
  113. return result, err
  114. }
  115. return result, nil
  116. }
  117. func (this *Kobis) CompanyListAPI(req SearchCompanyListParams) (SearchCompanyList, error) {
  118. var (
  119. url = config.COMPANY_LIST
  120. query, _ = query.Values(req)
  121. result SearchCompanyList
  122. )
  123. if query.Encode() != "" {
  124. url += "?" + query.Encode()
  125. }
  126. data, err := this.Rest.CallRestGetAPI(url)
  127. if this.Rest.Check(err) {
  128. return result, err
  129. }
  130. if err := this.checkFault(data); err != nil {
  131. return result, err
  132. }
  133. err = json.Unmarshal(data, &result)
  134. if this.Rest.Check(err) {
  135. return result, err
  136. }
  137. return result, nil
  138. }
  139. func (this *Kobis) CompanyInfoAPI(req SearchCompanyInfoParams) (SearchCompanyInfo, error) {
  140. var (
  141. url = config.COMPANY_INFO
  142. query, _ = query.Values(req)
  143. result SearchCompanyInfo
  144. )
  145. if query.Encode() != "" {
  146. url += "?" + query.Encode()
  147. }
  148. data, err := this.Rest.CallRestGetAPI(url)
  149. if this.Rest.Check(err) {
  150. return result, err
  151. }
  152. if err := this.checkFault(data); err != nil {
  153. return result, err
  154. }
  155. err = json.Unmarshal(data, &result)
  156. if this.Rest.Check(err) {
  157. return result, err
  158. }
  159. return result, nil
  160. }
  161. func (this *Kobis) MovieBoxOfficeAPI(req SearchBoxOfficeParams) (SearchBoxOfficeList, error) {
  162. var (
  163. url = config.MOVIE_BOX_OFFICE_STATS
  164. query, _ = query.Values(req)
  165. result SearchBoxOfficeList
  166. )
  167. if query.Encode() != "" {
  168. url += "?" + query.Encode()
  169. }
  170. data, err := this.Rest.CallRestGetAPI(url)
  171. if this.Rest.Check(err) {
  172. return result, err
  173. }
  174. if err := this.checkFault(data); err != nil {
  175. return result, err
  176. }
  177. err = json.Unmarshal(data, &result)
  178. if this.Rest.Check(err) {
  179. return result, err
  180. }
  181. return result, nil
  182. }