Hola, estoy trabajando en un proyecto personal y por necesidad he tenido que crear esta api para poder obtener información en español de la mejor web de películas. y ya que me he currado el crearla, me gustaría compartir con vosotros su funcionamiento.
Esta API para filmaffinity esta montada en PHP y en un tiempo record por lo que estoy mirando fallos pero parece que corre bien. Los archivos estan montados en un servidor por el que cualquier usuario podra acceder a los datos desde su web, script, etc etc.
El script muestra los datos en texto plano, XML y JSON, estos dos último mas acorde para la extracción de datos.
La dirección del scrip es: http://script.spaingeek.com/filmaffinity/
Como bien se explica el funcionamiento es muy sencillo, puedes introducir el nombre de la pelicula, o la ID de filmafinity.com
Obtener los datos con el nombre:
Formato: http://script.spaingeek.com/filmaffinity/?d1=[NOMBRE_PELICULA]
Ejemplo: http://script.spaingeek.com/filmaffinity/?d1=matrix
Obtener los datos con la ID
Formato: http://script.spaingeek.com/filmaffinity/?d2=[ID_PELICULA]
Ejemplo: http://script.spaingeek.com/filmaffinity/?d2=932476
Activa XML:
Añadir "&xml=1" al final de la URL sin las comillas
Ejemplo: http://script.spaingeek.com/filmaffinity/?d1=matrix&xml=1
Ejemplo: http://script.spaingeek.com/filmaffinity/?d2=932476&xml=1
Activa JSON:
Añadir "&json=1" al final de la URL sin las comillas
Ejemplo: http://script.spaingeek.com/filmaffinity/?d1=matrix&json=1
Ejemplo: hhttp://script.spaingeek.com/filmaffinity/?d2=932476&json=1
Los resultados serian mostrados así:
codeArray
(
[titulo] => Matrix
[rating] => 7,9
[votos] => 136.391 votos
[trailers] => http://www.filmaffinity.com/es/evideos.php?movie_id=932476
[cartel] => http://pics.filmaffinity.com/Matrix-835446153-large.jpg
[titulo_original] => The Matrix
[ano] => 1999
[duracion] => 131 min.
[pais] => Estados Unidos
[director] => Andy Wachowski, Lana Wachowski (AKA Larry Wachowski)
[guion] => Andy Wachowski, Lana Wachowski (AKA Larry Wachowski)
[musica] => Don Davis
[fotografia] => Bill Pope
[reparto] => Keanu Reeves, Laurence Fishburne, Carrie-Anne Moss, Hugo Weaving, Joe Pantoliano, Marcus Chong, Paul Goddard, Gloria Foster
[productora] => Warner Bros / Village Roadshow Pictures / Groucho II Film Partnership. Productor: Joel Silver
[genero] => Ciencia ficción. Fantástico. Acción. Thriller | Película de culto. Cyberpunk. Thriller futurista
[sinopsis] => Thomas Anderson es un brillante programador de una respetable compañía de software. Pero fuera del trabajo es Neo, un hacker que un día recibe una misteriosa visita...
[script_by] => http://about.me/danielfs
[criticas] => Array
(
[0] => Deslumbra y es un gran espectáculo digno de ser visto, pero se pierde un poco dentro de un pretencioso eclecticismo
[1] => (Jesús Ruiz Mantilla: Diario El País)
[2] => Lo que importa aquí es la forma y el ritmo
[3] => (Omar Khan: Cinemanía)
[4] => Sin duda, la más fascinante entrega de cienciaficción que se ha dado en el cine mundial en los últimos años. Espectaculares efectos especiales para una cinta que se separa totalmente de todo lo visto hasta el momento
[5] => (Fernando Morales: Diario El País)
)
)
Este seria el modo de texto plano, y el XML seria así:
code<pelicula>
<titulo>Matrix</titulo>
<titulo_original>The Matrix</titulo_original>
<rating>7,9</rating>
<votos>136.391 votos</votos>
<ano>1999</ano>
<duracion>131 min.</duracion>
<pais>Estados Unidos</pais>
<cartel>
http://pics.filmaffinity.com/Matrix-835446153-large.jpg
</cartel>
<trailers>
http://www.filmaffinity.com/es/evideos.php?movie_id=932476
</trailers>
<director>
Andy Wachowski, Lana Wachowski (AKA Larry Wachowski)
</director>
<guion>
Andy Wachowski, Lana Wachowski (AKA Larry Wachowski)
</guion>
<musica>Don Davis</musica>
<fotografia>Bill Pope</fotografia>
<reparto>
Keanu Reeves, Laurence Fishburne, Carrie-Anne Moss, Hugo Weaving, Joe Pantoliano, Marcus Chong, Paul Goddard, Gloria Foster
</reparto>
<productora>
Warner Bros / Village Roadshow Pictures / Groucho II Film Partnership. Productor: Joel Silver
</productora>
<genero>
Ciencia ficción. Fantástico. Acción. Thriller | Película de culto. Cyberpunk. Thriller futurista
</genero>
<sinopsis>
Thomas Anderson es un brillante programador de una respetable compañía de software. Pero fuera del trabajo es Neo, un hacker que un día recibe una misteriosa visita...
</sinopsis>
<script_by>http://about.me/danielfs</script_by>
</pelicula>
Por ultimo en formato JSON:
code{
"titulo": "Matrix",
"rating": "7,9",
"votos": "136.398 votos",
"trailers": "http://www.filmaffinity.com/es/evideos.php?movie_id=932476",
"cartel": "http://pics.filmaffinity.com/Matrix-835446153-large.jpg",
"titulo_original": "The Matrix",
"ano": "1999",
"duracion": "131 min.",
"pais": "Estados Unidos",
"director": "Andy Wachowski, Lana Wachowski (AKA Larry Wachowski)",
"guion": "Andy Wachowski, Lana Wachowski (AKA Larry Wachowski)",
"musica": "Don Davis",
"fotografia": "Bill Pope",
"reparto": "Keanu Reeves, Laurence Fishburne, Carrie-Anne Moss, Hugo Weaving, Joe Pantoliano, Marcus Chong, Paul Goddard, Gloria Foster",
"productora": "Warner Bros / Village Roadshow Pictures / Groucho II Film Partnership. Productor: Joel Silver",
"genero": "Ciencia ficcin002e0020Fants0074ico. Accin002e0020Thriller | Pelc0075la de culto. Cyberpunk. Thriller futurista",
"sinopsis": "Thomas Anderson es un brillante programador de una respetable compaa0020de software. Pero fuera del trabajo es Neo, un hacker que un da0020recibe una misteriosa visita...",
"script_by": "http://about.me/danielfs",
"criticas": [
"Deslumbra y es un gran espectc0075lo digno de ser visto, pero se pierde un poco dentro de un pretencioso eclecticismo",
"(Jess002000520075iz Mantilla: Diario El Pas0029",
"Lo que importa aqu 0065s la forma y el ritmo",
"(Omar Khan: Cinemana0029",
"Sin duda, la ms0020fascinante entrega de cienciaficcin00200071ue se ha dado en el cine mundial en los l00740069006dos ao0073002e Espectaculares efectos especiales para una cinta que se separa totalmente de todo lo visto hasta el momento",
"(Fernando Morales: Diario El Pas0029"
]
}
Los programadores que deseen utilizarla solo tendrán que crear un pequeño script que hace de conector y podrán consultar información de cualquier película, obteniendo los datos de una forma ordenada.
Como programo en php, pienso que una salida en XML o JSON es la forma mas facil de crear un conector con DOM por ejemplo, pero supongo que para otros lenguajes como C++, Java, C#, etc puede que no sea la mas correcta.
Si alguna persona cree que existe algún método mejor para la realización de un conector que me lo comunique, estoy abierto a cualquier posibilidad.
Pensad que lo que se muestra en texto plano es un simple array, lo digo por si queréis escribir algo de código para que lo implemente simplemente tenéis que pensar que es un array con los títulos que se ven.
Por ejemplo para la realización del XML este es el código:
code
header("Content-Type: application/xml; charset=ISO-8859-1");
echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<pelicula>';
echo '<titulo>' . $datos['titulo'] . '</titulo>';
echo '<titulo_original>' . $datos['titulo_original'] . '</titulo_original>';
echo '<rating>' . $datos['rating'] . '</rating>';
echo '<votos>' . $datos['votos'] . '</votos>';
echo '<ano>' . $datos['ano'] . '</ano>';
echo '<duracion>' . $datos['duracion'] . '</duracion>';
echo '<pais>' . $datos['pais'] . '</pais>';
echo '<cartel>' . $datos['cartel'] . '</cartel>';
echo '<trailers>' . $datos['trailers'] . '</trailers>';
echo '<director>' . $datos['director'] . '</director>';
echo '<guion>' . $datos['guion'] . '</guion>';
echo '<musica>' . $datos['musica'] . '</musica>';
echo '<fotografia>' . $datos['fotografia'] . '</fotografia>';
echo '<reparto>' . $datos['reparto'] . '</reparto>';
echo '<productora>' . $datos['productora'] . '</productora>';
echo '<genero>' . $datos['genero'] . '</genero>';
echo '<sinopsis>' . $datos['sinopsis'] . '</sinopsis>';
echo '<script_by>' . $datos['script_by'] . '</script_by>';
echo '</pelicula>';
Aquí dejo un ejemplo de conector hecho en DOM para XML php, el resultado es un array con todos los datos:
code<?php
$file = implode ("", file ('http://script.spaingeek.com/filmaffinity/?d1=matrix&xml=1'));
$dom = new DomDocument();
$dom->loadHTML($file);
$xpath = new DomXPath($dom);
$data = array (
'titulo' => utf8_decode(trim($xpath->query('//pelicula/titulo/text()')->item(0)->nodeValue)),
'titulo_original' => utf8_decode(trim($xpath->query('//pelicula/titulo_original/text()')->item(0)->nodeValue)),
'rating' => utf8_decode(trim($xpath->query('//pelicula/rating/text()')->item(0)->nodeValue)),
'votos' => utf8_decode(trim($xpath->query('//pelicula/votos/text()')->item(0)->nodeValue)),
'ano' => utf8_decode(trim($xpath->query('//pelicula/ano/text()')->item(0)->nodeValue)),
'duracion' => utf8_decode(trim($xpath->query('//pelicula/duracion/text()')->item(0)->nodeValue)),
'pais' => utf8_decode(trim($xpath->query('//pelicula/pais/text()')->item(0)->nodeValue)),
'cartel' => utf8_decode(trim($xpath->query('//pelicula/cartel/text()')->item(0)->nodeValue)),
'trailers' => utf8_decode(trim($xpath->query('//pelicula/trailers/text()')->item(0)->nodeValue)),
'director' => utf8_decode(trim($xpath->query('//pelicula/director/text()')->item(0)->nodeValue)),
'guion' => utf8_decode(trim($xpath->query('//pelicula/guion/text()')->item(0)->nodeValue)),
'musica' => utf8_decode(trim($xpath->query('//pelicula/musica/text()')->item(0)->nodeValue)),
'fotografia' => utf8_decode(trim($xpath->query('//pelicula/fotografia/text()')->item(0)->nodeValue)),
'reparto' => utf8_decode(trim($xpath->query('//pelicula/reparto/text()')->item(0)->nodeValue)),
'productora' => utf8_decode(trim($xpath->query('//pelicula/productora/text()')->item(0)->nodeValue)),
'genero' => utf8_decode(trim($xpath->query('//pelicula/genero/text()')->item(0)->nodeValue)),
'sinopsis' => utf8_decode(trim($xpath->query('//pelicula/sinopsis/text()')->item(0)->nodeValue)),
'script_by' => utf8_decode(trim($xpath->query('//pelicula/script_by/text()')->item(0)->nodeValue))
);
print_r($data);
?>
Conector para JSON php:
code<?php
$json = file_get_contents('http://script.spaingeek.com/filmaffinity/?d1=matrix&json=1');
$d=json_decode($json);
print_r($d);
?>
Un saludo a todos.
EDIT:
PD: He editado la dirección del script, ahora esta montada bajo un dominio .tk ya que el servidor anterior ha fallado, y para evitar la continua modificación de los script lo monto bajo un dominio, si algun dia vuelve a fallar solo sera necesario montarlo en otro y modificar las DNS. Pido que si vuestro conector falla me aviseis para que pueda solucionarlo lo antes posible.