TrailerController.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace App\Http\Controllers\Movie;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\Cache;
  5. use Illuminate\Support\Facades\Http;
  6. use App\Http\Controllers\Controller;
  7. use App\Http\Traits\PagingTrait;
  8. class TrailerController extends Controller
  9. {
  10. use PagingTrait;
  11. public function __construct() {
  12. $this->middleware('front');
  13. }
  14. /**
  15. * 영화 예고편
  16. * @method GET
  17. * @see /movie/trailer
  18. */
  19. public function index(Request $request)
  20. {
  21. $page = $request->get('page', 1);
  22. $keyword = $request->get('keyword');
  23. $sort = $request->get('sort', 1); // 개봉순, 인기순, 평점 높은순
  24. $params = [
  25. 'api_key' => TMDB_API_KEY,
  26. 'language' => 'ko',
  27. 'page' => $page,
  28. 'region' => 'kr'
  29. ];
  30. if(!$keyword) {
  31. $url = (TMDB_HOST . match(intval($sort)) {
  32. 1 => TMDB_GET_UPCOMING,
  33. 2 => TMDB_GET_POPULAR,
  34. 3 => TMDB_GET_TOP_RATED,
  35. });
  36. }else{
  37. $url = (TMDB_HOST . TMDB_GET_SEARCH_MOVIE);
  38. $params['region'] = null;
  39. $params['query'] = $keyword;
  40. }
  41. $cacheName = ($url . join($params));
  42. if (!$data = Cache::get($cacheName))
  43. {
  44. // 곧 개봉 예정
  45. $response = Http::get($url, $params);
  46. $total = 0;
  47. $list = [];
  48. $paginator = null;
  49. if($response->ok()) {
  50. $trailers = json_decode($response->body());
  51. foreach($trailers->results as $row) {
  52. $row->posterURL = ('https://image.tmdb.org/t/p/original' . $row->poster_path);
  53. // 예고편 조회
  54. $res = Http::get(sprintf(TMDB_HOST . TMDB_GET_VIDEOS, $row->id), [
  55. 'api_key' => TMDB_API_KEY,
  56. 'language' => 'ko'
  57. ]);
  58. $row->thumbURL = "";
  59. if($res->ok()) {
  60. $row->videoMeta = current((json_decode($res->body()))->results);
  61. if($row->videoMeta) {
  62. $row->thumbURL = sprintf('https://img.youtube.com/vi/%s/0.jpg', $row->videoMeta->key);
  63. }
  64. }
  65. $list[] = $row;
  66. $total++;
  67. }
  68. $paginator = $this->getPaginator($trailers->results, $trailers->total_results, 20, $trailers->page);
  69. }
  70. $data = (object)[
  71. 'total' => $total,
  72. 'list' => $list,
  73. 'paginator' => $paginator
  74. ];
  75. Cache::put($cacheName, $data, CACHE_EXPIRE_TIME * 12 * 24);
  76. }
  77. return view(layout('movie.trailer.index'), [
  78. 'page' => $page,
  79. 'keyword' => $keyword,
  80. 'sort' => $sort,
  81. 'total' => $data->total,
  82. 'list' => $data->list,
  83. 'paginator' => $data->paginator
  84. ]);
  85. }
  86. }