Versión inicial funcional de MyDiary
This commit is contained in:
@@ -0,0 +1,700 @@
|
||||
<?php
|
||||
|
||||
require_once $_SERVER['DOCUMENT_ROOT'].'/MyDiary/includes/conexionBD.php';
|
||||
|
||||
class ApiSerie{
|
||||
private $token;
|
||||
|
||||
public function __construct(){
|
||||
$this->token = $_ENV['tokenTMDB'];
|
||||
} // Fin __construct()
|
||||
|
||||
private function peticion($url){
|
||||
|
||||
$curl = curl_init();
|
||||
|
||||
curl_setopt($curl, CURLOPT_URL, $url);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER,['Authorization: Bearer '.$this->token, 'Accept: application/json']);
|
||||
|
||||
$respuesta = curl_exec($curl);
|
||||
|
||||
$codigoHTTP = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||||
|
||||
if(curl_errno($curl)){
|
||||
$error = curl_error($curl);
|
||||
curl_close($curl);
|
||||
|
||||
return [
|
||||
'error' => 'No se pudo realizar la petición a TMDB.',
|
||||
'error_tecnico' => $error
|
||||
];
|
||||
}
|
||||
|
||||
curl_close($curl);
|
||||
|
||||
$resultado =json_decode($respuesta,true);
|
||||
|
||||
if($codigoHTTP < 200 || $codigoHTTP >= 300){
|
||||
|
||||
return [
|
||||
'error' => 'TMDB devolvió un error.',
|
||||
'error_tecnico' => $resultado
|
||||
];
|
||||
}
|
||||
|
||||
return $resultado;
|
||||
|
||||
} // Fin peticion()
|
||||
|
||||
public function buscar($nombre){
|
||||
|
||||
$nombre = urlencode($nombre);
|
||||
|
||||
$url = 'https://api.themoviedb.org/3/search/tv'.'?query='.$nombre;
|
||||
|
||||
$resultado = $this->peticion($url);
|
||||
|
||||
if(isset($resultado['error'])){
|
||||
return $resultado;
|
||||
}
|
||||
|
||||
return $resultado['results'];
|
||||
|
||||
} // Fin buscar()
|
||||
|
||||
public function detalles($idApi){
|
||||
|
||||
$url = 'https://api.themoviedb.org/3/tv/'.$idApi.'?append_to_response=aggregate_credits,watch/providers';
|
||||
|
||||
$resultado = $this->peticion($url);
|
||||
|
||||
if(isset($resultado['error'])){
|
||||
return $resultado;
|
||||
}
|
||||
|
||||
// Directores
|
||||
$directores = [];
|
||||
|
||||
if(isset($resultado['aggregate_credits']['crew'])){
|
||||
foreach($resultado['aggregate_credits']['crew'] as $persona){
|
||||
|
||||
if(!isset($persona['jobs'])){
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach($persona['jobs'] as $trabajo){
|
||||
|
||||
if($trabajo['job'] === 'Director' && !in_array($persona['name'],$directores,true)){
|
||||
|
||||
$directores[] = $persona['name'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(count($directores) >= 2){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$resultado['directores'] = implode(', ', $directores);
|
||||
|
||||
// Actores
|
||||
$actores = [];
|
||||
|
||||
if(isset($resultado['aggregate_credits']['cast'])){
|
||||
foreach($resultado['aggregate_credits']['cast'] as $actor){
|
||||
|
||||
if(count($actores) >= 6){
|
||||
break;
|
||||
}
|
||||
|
||||
$actores[] = $actor['name'];
|
||||
}
|
||||
}
|
||||
|
||||
$resultado['actores'] = implode(', ', $actores);
|
||||
|
||||
|
||||
// Guionistas
|
||||
$guionistas = [];
|
||||
|
||||
if(isset($resultado['aggregate_credits']['crew'])){
|
||||
foreach($resultado['aggregate_credits']['crew'] as $persona){
|
||||
|
||||
if(!isset($persona['jobs'])){
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach($persona['jobs'] as $trabajo){
|
||||
|
||||
if($trabajo['job'] === 'Writer' || $trabajo['job'] === 'Screenplay' || $trabajo['job'] === 'Teleplay'){
|
||||
|
||||
if(!in_array($persona['name'],$guionistas,true)){
|
||||
|
||||
$guionistas[] = $persona['name'];
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(count($guionistas) >= 3){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$resultado['guionistas'] = implode(', ', $guionistas);
|
||||
|
||||
|
||||
unset($resultado['aggregate_credits']);
|
||||
|
||||
return $resultado;
|
||||
|
||||
} // Fin detalles()
|
||||
|
||||
public function transformarDatos($resultado){
|
||||
|
||||
$serie = [];
|
||||
|
||||
// Id
|
||||
$serie['idApi'] = $resultado['id'] ?? '';
|
||||
|
||||
// Nombre
|
||||
$serie['nombreSerie'] = $resultado['name'] ?? '';
|
||||
|
||||
// Creador
|
||||
$creadores = [];
|
||||
|
||||
if(!empty($resultado['created_by'])){
|
||||
foreach($resultado['created_by'] as $creador){
|
||||
if(isset($creador['name'])){
|
||||
$creadores[] =$creador['name'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$serie['creadorSerie'] = implode(', ',array_unique($creadores));
|
||||
|
||||
// Director
|
||||
$serie['directorSerie'] = $resultado['directores'] ?? '';
|
||||
|
||||
// Actor
|
||||
$serie['actorSerie'] = $resultado['actores'] ?? '';
|
||||
|
||||
// Guionista
|
||||
$serie['guionistaSerie'] = $resultado['guionistas'] ?? '';
|
||||
|
||||
// Genero
|
||||
$generos = [];
|
||||
|
||||
if(!empty($resultado['genres'])){
|
||||
foreach($resultado['genres'] as $genero){
|
||||
if(isset($genero['name'])){
|
||||
$generos[] = $genero['name'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$serie['generoSerie'] = implode(', ',array_unique($generos));
|
||||
|
||||
// Año
|
||||
$serie['anoSerie'] = !empty($resultado['first_air_date']) ? substr($resultado['first_air_date'],0,4) : '';
|
||||
|
||||
// Número temporadas
|
||||
$serie['temporadasSerie'] = $resultado['number_of_seasons'] ?? 0;
|
||||
|
||||
// Número episodios
|
||||
$serie['episodiosSerie'] = $resultado['number_of_episodes'] ?? 0;
|
||||
|
||||
// Rating medio
|
||||
$serie['ratingAvgSerie'] = isset($resultado['vote_average']) ? number_format($resultado['vote_average'] / 2,2): null;
|
||||
|
||||
// Compañia
|
||||
$companias = [];
|
||||
|
||||
if(!empty($resultado['production_companies'])){
|
||||
foreach($resultado['production_companies'] as $compania){
|
||||
if(isset($compania['name'])){
|
||||
$companias[] = $compania['name'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$serie['companiaSerie'] = implode(', ',array_unique($companias));
|
||||
|
||||
// País
|
||||
$paises = [];
|
||||
|
||||
if(!empty($resultado['production_countries'])){
|
||||
foreach($resultado['production_countries'] as $pais){
|
||||
if(isset($pais['name'])){
|
||||
$paises[] = $pais['name'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(empty($paises) && !empty($resultado['origin_country'])){
|
||||
$paises = $resultado['origin_country'];
|
||||
}
|
||||
|
||||
$serie['paisSerie'] = implode(', ',array_unique($paises));
|
||||
|
||||
// Idioma
|
||||
$idiomas = [];
|
||||
|
||||
if(!empty($resultado['spoken_languages'])){
|
||||
foreach($resultado['spoken_languages'] as $idioma){
|
||||
if(isset($idioma['name'])){
|
||||
$idiomas[] = $idioma['name'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(empty($idiomas) && !empty($resultado['original_language'])){
|
||||
$idiomas[] = $resultado['original_language'];
|
||||
}
|
||||
|
||||
$serie['idiomaSerie'] = implode(', ',array_unique($idiomas));
|
||||
|
||||
// Sinopsis
|
||||
$serie['sinopsisSerie'] = $resultado['overview'] ?? '';
|
||||
|
||||
// Portada
|
||||
if(!empty($resultado['poster_path'])){
|
||||
$serie['posterSerie'] = 'https://image.tmdb.org/t/p/w500'.$resultado['poster_path'];
|
||||
}else{
|
||||
$serie['posterSerie'] = 'images/noPoster.jpeg';
|
||||
}
|
||||
|
||||
// Temporadas.
|
||||
// Mantenemos la información proporcionada directamente por TMDB para poder utilizarla más adelante.
|
||||
$serie['temporadas'] = $resultado['seasons'] ?? [];
|
||||
|
||||
return $serie;
|
||||
|
||||
} // Fin transformarDatos()
|
||||
|
||||
public function temporada($idSerie, $numeroTemporada){
|
||||
|
||||
$url = 'https://api.themoviedb.org/3/tv/'.$idSerie.'/season/'.$numeroTemporada.'?append_to_response=aggregate_credits';
|
||||
|
||||
$datos = $this->peticion($url);
|
||||
|
||||
if(is_array($datos)){
|
||||
return $datos;
|
||||
}
|
||||
|
||||
$respuesta = json_decode($datos, true);
|
||||
|
||||
if(isset($respuesta['status_code'])){
|
||||
|
||||
return [
|
||||
'error' => 'TMDB devolvió un error.',
|
||||
'error_tecnico' => $respuesta
|
||||
];
|
||||
}
|
||||
|
||||
return $respuesta;
|
||||
|
||||
} // Fin temporada()
|
||||
|
||||
public function transformarDatosTemporada($resultado, $nombreSerie){
|
||||
|
||||
$temporada = [];
|
||||
|
||||
// Id
|
||||
$temporada['idApi'] = $resultado['id'] ?? '';
|
||||
|
||||
// ID de la serie a la que pertenece
|
||||
// Lo dejamos preparado para que el controlador
|
||||
// pueda asignarle después tu idSerie de la BD.
|
||||
|
||||
$temporada['idSerie'] = null;
|
||||
|
||||
// Nombre
|
||||
$temporada['nombreTemporada'] = $resultado['name'] ? $nombreSerie.' - '.$resultado['name'] : '';
|
||||
|
||||
// Numero temporada
|
||||
$temporada['numeroTemporada'] = $resultado['season_number'] ?? null;
|
||||
|
||||
// Director
|
||||
$directores = [];
|
||||
|
||||
if(isset($resultado['aggregate_credits']['crew']) && is_array($resultado['aggregate_credits']['crew'])){
|
||||
foreach($resultado['aggregate_credits']['crew'] as $persona){
|
||||
|
||||
if(empty($persona['jobs'])){
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach($persona['jobs'] as $trabajo){
|
||||
if(isset($trabajo['job']) && $trabajo['job'] === 'Director'){
|
||||
if(isset($persona['name']) && !in_array($persona['name'],$directores,true)){
|
||||
$directores[] = $persona['name'];
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(count($directores) >= 2){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$temporada['directorTemporada'] = implode(', ', $directores);
|
||||
|
||||
// Guionista
|
||||
$guionistas = [];
|
||||
|
||||
if(isset($resultado['aggregate_credits']['crew']) && is_array($resultado['aggregate_credits']['crew'])){
|
||||
foreach($resultado['aggregate_credits']['crew'] as $persona){
|
||||
if(empty($persona['jobs'])){
|
||||
continue;
|
||||
}
|
||||
foreach($persona['jobs'] as $trabajo){
|
||||
if(isset($trabajo['job']) &&($trabajo['job'] === 'Writer' || $trabajo['job'] === 'Screenplay' ||$trabajo['job'] === 'Teleplay')){
|
||||
if(isset($persona['name']) && !in_array($persona['name'], $guionistas, true)){
|
||||
$guionistas[] = $persona['name'];
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(count($guionistas) >= 3){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$temporada['guionistaTemporada'] = implode(', ', $guionistas);
|
||||
|
||||
// Actor
|
||||
$actores = [];
|
||||
|
||||
if(isset($resultado['aggregate_credits']['cast']) && is_array($resultado['aggregate_credits']['cast'])){
|
||||
foreach($resultado['aggregate_credits']['cast'] as $actor){
|
||||
if(count($actores) >= 6){
|
||||
break;
|
||||
}
|
||||
if(isset($actor['name'])){
|
||||
$actores[] = $actor['name'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$temporada['actorTemporada'] = implode(', ', $actores);
|
||||
|
||||
// Numero episodios
|
||||
$temporada['episodiosTemporada'] = count($resultado['episodes']) ?? 0;
|
||||
|
||||
// Año
|
||||
$temporada['anoTemporada'] = '';
|
||||
if(!empty($resultado['air_date'])){
|
||||
$temporada['anoTemporada'] =substr($resultado['air_date'],0,4);
|
||||
}
|
||||
|
||||
// Rating medio
|
||||
$temporada['ratingAvgTemporada'] = isset($resultado['vote_average']) ? number_format($resultado['vote_average'] / 2, 2) : null;
|
||||
|
||||
// Portada
|
||||
if(!empty($resultado['poster_path'])){
|
||||
$temporada['posterTemporada'] = 'https://image.tmdb.org/t/p/w500'.$resultado['poster_path'];
|
||||
}else{
|
||||
$temporada['posterTemporada'] = 'images/noPoster.jpeg';
|
||||
}
|
||||
|
||||
// Sinopsis
|
||||
$temporada['sinopsisTemporada'] = $resultado['overview'] ?? '';
|
||||
|
||||
// Episodios
|
||||
$episodios = [];
|
||||
|
||||
if(!empty($resultado['episodes'])){
|
||||
foreach($resultado['episodes'] as $episodio){
|
||||
|
||||
$episodios[] = [
|
||||
'idApi' => $episodio['id'] ?? '',
|
||||
'nombreEpisodio' => $episodio['name'] ?? '',
|
||||
'numeroEpisodio' => $episodio['episode_number'] ?? null,
|
||||
'ratingAvgEpisodio' => isset($episodio['vote_average']) ? number_format($episodio['vote_average'] / 2, 2) : null,
|
||||
'posterEpisodio' => !empty($episodio['still_path']) ? 'https://image.tmdb.org/t/p/w300'.$episodio['still_path'] : 'images/noPoster.jpeg',
|
||||
'sinopsisEpisodio' => $episodio['overview'] ?? '',
|
||||
'anoEpisodio' => !empty($episodio['air_date']) ? substr($episodio['air_date'], 0, 4) : ''
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
$temporada['episodios'] = $episodios;
|
||||
|
||||
return $temporada;
|
||||
|
||||
} // Fin transformarDatosTemporada()
|
||||
|
||||
public function episodio($idSerie, $numeroTemporada, $numeroEpisodio){
|
||||
|
||||
$url =
|
||||
'https://api.themoviedb.org/3/tv/'
|
||||
.$idSerie
|
||||
.'/season/'
|
||||
.$numeroTemporada
|
||||
.'/episode/'
|
||||
.$numeroEpisodio
|
||||
.'?append_to_response=credits';
|
||||
|
||||
$datos = $this->peticion($url);
|
||||
|
||||
if(is_array($datos)){
|
||||
return $datos;
|
||||
}
|
||||
|
||||
$respuesta = json_decode($datos, true);
|
||||
|
||||
if(isset($respuesta['status_code'])){
|
||||
|
||||
return [
|
||||
'error' => 'TMDB devolvió un error.',
|
||||
'error_tecnico' => $respuesta
|
||||
];
|
||||
}
|
||||
|
||||
return $respuesta;
|
||||
|
||||
} // Fin episodio()
|
||||
|
||||
public function transformarDatosEpisodio($resultado, $numeroTemporada, $nombreSerie){
|
||||
|
||||
$episodio = [];
|
||||
|
||||
|
||||
/*
|
||||
* ID de TMDB
|
||||
*/
|
||||
$episodio['idApi'] = $resultado['id'] ?? '';
|
||||
|
||||
|
||||
/*
|
||||
* ID de la temporada
|
||||
*
|
||||
* Será el ID interno de tu BD cuando lo guardemos.
|
||||
*/
|
||||
$episodio['idTemporada'] = null;
|
||||
|
||||
|
||||
/*
|
||||
* Nombre
|
||||
*/
|
||||
if(strlen((string)$resultado['episode_number'])==1){
|
||||
$episodio['nombreEpisodio'] = $resultado['name'] ? $nombreSerie.' - '.$numeroTemporada.'x0'.$resultado['episode_number'].' ('.$resultado['name'].')' : '';
|
||||
}else{
|
||||
$episodio['nombreEpisodio'] = $resultado['name'] ? $nombreSerie.' - '.$numeroTemporada.'x'.$resultado['episode_number'].' ('.$resultado['name'].')' : '';
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Número de episodio
|
||||
*/
|
||||
$episodio['numeroEpisodio'] = $resultado['episode_number'] ?? null;
|
||||
|
||||
|
||||
/*
|
||||
* Director
|
||||
*/
|
||||
$directores = [];
|
||||
|
||||
if(
|
||||
!empty($resultado['credits']['crew']) &&
|
||||
is_array($resultado['credits']['crew'])
|
||||
){
|
||||
|
||||
foreach(
|
||||
$resultado['credits']['crew']
|
||||
as $persona
|
||||
){
|
||||
|
||||
if(
|
||||
isset($persona['job']) &&
|
||||
$persona['job'] === 'Director' &&
|
||||
isset($persona['name'])
|
||||
){
|
||||
|
||||
if(!in_array(
|
||||
$persona['name'],
|
||||
$directores,
|
||||
true
|
||||
)){
|
||||
|
||||
$directores[] =
|
||||
$persona['name'];
|
||||
}
|
||||
|
||||
if(count($directores) >= 2){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$episodio['directorEpisodio'] =
|
||||
implode(', ', $directores);
|
||||
|
||||
|
||||
/*
|
||||
* Guionistas
|
||||
*/
|
||||
$guionistas = [];
|
||||
|
||||
if(
|
||||
!empty($resultado['credits']['crew']) &&
|
||||
is_array($resultado['credits']['crew'])
|
||||
){
|
||||
|
||||
foreach(
|
||||
$resultado['credits']['crew']
|
||||
as $persona
|
||||
){
|
||||
|
||||
if(
|
||||
!isset($persona['job']) ||
|
||||
!isset($persona['name'])
|
||||
){
|
||||
continue;
|
||||
}
|
||||
|
||||
if(
|
||||
$persona['job'] === 'Writer' ||
|
||||
$persona['job'] === 'Screenplay' ||
|
||||
$persona['job'] === 'Teleplay'
|
||||
){
|
||||
|
||||
if(!in_array(
|
||||
$persona['name'],
|
||||
$guionistas,
|
||||
true
|
||||
)){
|
||||
|
||||
$guionistas[] =
|
||||
$persona['name'];
|
||||
}
|
||||
|
||||
if(count($guionistas) >= 3){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$episodio['guionistaEpisodio'] =
|
||||
implode(', ', $guionistas);
|
||||
|
||||
|
||||
/*
|
||||
* Actores
|
||||
*/
|
||||
$actores = [];
|
||||
|
||||
if(
|
||||
!empty($resultado['credits']['cast']) &&
|
||||
is_array($resultado['credits']['cast'])
|
||||
){
|
||||
|
||||
foreach(
|
||||
$resultado['credits']['cast']
|
||||
as $actor
|
||||
){
|
||||
|
||||
if(count($actores) >= 6){
|
||||
break;
|
||||
}
|
||||
|
||||
if(isset($actor['name'])){
|
||||
|
||||
$actores[] =
|
||||
$actor['name'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$episodio['actorEpisodio'] =
|
||||
implode(', ', array_unique($actores));
|
||||
|
||||
|
||||
/*
|
||||
* Año
|
||||
*/
|
||||
$episodio['anoEpisodio'] = '';
|
||||
|
||||
if(!empty($resultado['air_date'])){
|
||||
|
||||
$episodio['anoEpisodio'] =
|
||||
substr(
|
||||
$resultado['air_date'],
|
||||
0,
|
||||
4
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Valoración media
|
||||
*
|
||||
* TMDB: 0-10
|
||||
* Proyecto: 0-5
|
||||
*/
|
||||
$episodio['ratingAvgEpisodio'] =
|
||||
isset($resultado['vote_average'])
|
||||
? number_format(
|
||||
$resultado['vote_average'] / 2,
|
||||
2
|
||||
)
|
||||
: null;
|
||||
|
||||
|
||||
/*
|
||||
* Portada / imagen
|
||||
*/
|
||||
if(!empty($resultado['still_path'])){
|
||||
|
||||
$episodio['posterEpisodio'] =
|
||||
'https://image.tmdb.org/t/p/w500'
|
||||
.$resultado['still_path'];
|
||||
|
||||
}else{
|
||||
|
||||
$episodio['posterEpisodio'] =
|
||||
'images/noPoster.jpeg';
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Sinopsis
|
||||
*/
|
||||
$episodio['sinopsisEpisodio'] =
|
||||
$resultado['overview'] ?? '';
|
||||
|
||||
|
||||
/*
|
||||
* Duración
|
||||
*
|
||||
* El episodio puede tener runtime aunque no
|
||||
* lo hayamos guardado en la temporada.
|
||||
*/
|
||||
$episodio['duracionEpisodio'] = $resultado['runtime'] ? $resultado['runtime'].' min' : null;
|
||||
|
||||
|
||||
return $episodio;
|
||||
|
||||
} // Fin transformarDatosEpisodio()
|
||||
|
||||
} // Fin clase ApiSerie
|
||||
/*
|
||||
$api = new ApiSerie();
|
||||
$resultado = $api->episodio(70523, 2, 6);
|
||||
|
||||
echo '<pr>';
|
||||
print_r ($resultado);
|
||||
echo '</pr>';
|
||||
*/
|
||||
?>
|
||||
Reference in New Issue
Block a user