null, 'large' => 500, 'medium' => 300, 'small' => 92, ]; public function index() { $movieId = request('movieId'); //$movieId = 1284120; /****************************************** */ $responseMovie = Http::withHeaders([ 'Authorization' => 'Bearer ' . $this->token, 'Accept' => 'application/json', ])->get("$this->baseUrl/movie/$movieId", [ 'language' => 'fr-FR' ]); $movie = $responseMovie->successful() ? $responseMovie->json() : []; $title = Title::create([ 'imdb_id' => $movie['id'], 'backdrop' => "https://image.tmdb.org/t/p/original".$movie['backdrop_path'], 'poster' => "https://image.tmdb.org/t/p/original".$movie['poster_path'], 'name' => $movie['title'], 'original_title' => $movie['original_title'], 'language' => $movie['original_language'], 'is_series' => false, 'release_date' => $movie['release_date'], 'tagline' => $movie['tagline'], 'description' => $movie['overview'], 'runtime' => $movie['runtime'], //////////////////'certification' => $movie[''], 'budget' => $movie['budget'], 'revenue' => $movie['revenue'], 'popularity' => $movie['popularity'], 'language' => $movie['original_language'], 'adult' => $movie['adult'], 'type' => 'movie', 'tmdb_vote_average' => $movie['vote_average'] ]); $genres = $countrys = []; foreach($movie['production_countries'] as $country) { $productionCountry = ProductionCountry::updateOrCreate( ['name' => $country['iso_3166_1']], ['name' => $country['iso_3166_1'], 'display_name' => $country['name'] ]); $countrys[] = $productionCountry->id; } foreach($movie['genres'] as $genre) { $genre = Genre::updateOrCreate( ['name' => $genre['name']], [ 'name' => $genre['name'], 'display_name' => $genre['name'] ]); $genres[] = $genre->id; } $title->productionCountries()->attach($countrys); $title->genres()->attach($genres); /*********************************************** */ $responseMovieKeyword = Http::withHeaders([ 'Authorization' => 'Bearer ' . $this->token, 'Accept' => 'application/json', ])->get("$this->baseUrl/movie/$movieId/keywords", [ 'language' => 'fr-FR' ]); $movieKeywords = $responseMovieKeyword->successful() ? $responseMovieKeyword->json() : []; $keywords = []; foreach($movieKeywords['keywords'] as $valKey) { $keyword = Keyword::updateOrCreate( ['name' => $valKey['name']], [ 'name' => $valKey['name'], 'display_name' => $valKey['name'] ]); $keywords[] = $keyword->id; } $title->keywords()->attach($keywords); /************************************************/ $responseMovieCredits = Http::withHeaders([ 'Authorization' => 'Bearer ' . $this->token, 'Accept' => 'application/json', ])->get("$this->baseUrl/movie/$movieId/credits", [ 'language' => 'fr-FR' ]); $movieCredits = $responseMovieCredits->successful() ? $responseMovieCredits->json() : []; foreach($movieCredits['cast'] as $cast) { $person_id = $this->getPeopleByTMDBid($cast['id']); $title->createCredit([ 'person_id'=>$person_id, 'department'=> "actors", 'job'=>"actor", 'order'=>$cast['order'], 'character'=>$cast['character'], ]); } foreach($movieCredits['crew'] as $cast) { $person_id = $this->getPeopleByTMDBid($cast['id']); $title->createCredit([ 'person_id'=>$person_id, 'department'=> $cast['department'], 'job'=>$cast['job'], ]); } /********************* Videos *******************************/ $responseMovieVideos = Http::withHeaders([ 'Authorization' => 'Bearer ' . $this->token, 'Accept' => 'application/json', ])->get("$this->baseUrl/movie/$movieId/videos", [ 'language' => 'fr-FR' ]); $MovieVideos = $responseMovieVideos->successful() ? $responseMovieVideos->json() : []; foreach($MovieVideos['results'] as $keyV =>$video) { if( ($video['site'] == "YouTube") && ($video['type'] == "Trailer") ) { Video::create([ 'name'=>$video['name'], 'src'=>"https://youtube.com/embed/".$video['key'], 'type'=>'embed', 'quality'=> ($video['size']==1080)? "1080p" : null, 'title_id'=>$title->id, 'origin'=>"local", 'downvotes'=>0, 'upvotes'=>0, 'approved'=>1, 'order'=>$keyV, 'user_id'=>auth()->id(), 'language'=>$video['iso_639_1'], 'category'=>'trailer', ]); } } /***********************Images***************************/ $responseMovieImages = Http::withHeaders([ 'Authorization' => 'Bearer ' . $this->token, 'Accept' => 'application/json', ])->get("$this->baseUrl/movie/$movieId/images", []); $movieImages = $responseMovieImages->successful() ? $responseMovieImages->json() : []; for($i=0; $i<=5; $i++) { $nameFileImage = isset($movieImages['backdrops'][$i]['file_path'])? $movieImages['backdrops'][$i]['file_path'] : null; if($nameFileImage) { $url = $this->saveImage("https://image.tmdb.org/t/p/original$nameFileImage"); Image::where('model_type', Title::MODEL_TYPE) ->where('model_id', $title->id) ->increment('order'); Image::create([ 'url' => $url, 'type' => 'backdrop', 'source' => 'local', 'model_type' => Title::MODEL_TYPE, 'model_id' => $title->id, 'order' => 0 ]); } } } function getPeopleByTMDBid($tmdb_id) { $person = DB::table('people')->where('tmdb_id', $tmdb_id)->first(); if(!$person) { $responsePeople = Http::withHeaders([ 'Authorization' => 'Bearer ' . $this->token, 'Accept' => 'application/json', ])->get("$this->baseUrl/person/$tmdb_id", [ 'language' => 'fr-FR' ]); $people = $responsePeople->successful() ? $responsePeople->json() : []; $person = Person::create([ 'tmdb_id' => $people['id'], 'name' => $people['name'], 'description'=>$people['biography'], 'gender'=>$people['gender'], 'birth_date'=>$people['birthday'], 'birth_place'=>$people['place_of_birth'], 'poster'=>"https://image.tmdb.org/t/p/w500".$people['profile_path'], 'imdb_id'=>$people['imdb_id'], 'known_for'=>$people['known_for_department'], 'popularity'=>$people['popularity'], 'death_date'=>$people['deathday'], 'adult'=>$people['adult'], ]); } return $person->id ; } public function saveImage(string $urlImage): string { $hash = Str::random(30); $manager = new ImageManager(new Driver()); // Télécharger l'image depuis l'URL $imageContent = file_get_contents($urlImage); $tempFile = tempnam(sys_get_temp_dir(), 'img'); file_put_contents($tempFile, $imageContent); try { $img = $manager->read($tempFile); // Déterminer l'extension à partir de l'URL ou utiliser jpeg par défaut $pathInfo = pathinfo(parse_url($urlImage, PHP_URL_PATH)); $extension = $pathInfo['extension'] ?? 'jpeg'; $extension = in_array(strtolower($extension), ['jpg', 'jpeg', 'png']) ? $extension : 'jpeg'; foreach ($this->sizes as $key => $size) { if ($size) { $img->scale($size); } Storage::disk('public')->put( "media-images/backdrops/$hash/$key.$extension", $extension === 'png' ? $img->toPng() : $img->toJpeg(), ); } $endpoint = config('common.site.file_preview_endpoint'); $uri = "media-images/backdrops/$hash/original.$extension"; return $endpoint ? "$endpoint/storage/$uri" : Storage::disk('public')->url($uri); } finally { // Nettoyer le fichier temporaire if (file_exists($tempFile)) { unlink($tempFile); } } } }