Nueva API para extraer contenido de filmaffinity

n1x3r

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í:

code

Este seria el modo de texto plano, y el XML seria así:

code

Por ultimo en formato JSON:

code

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

Aquí dejo un ejemplo de conector hecho en DOM para XML php, el resultado es un array con todos los datos:

code

Conector para JSON php:

code

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.

5
Metaza

Yo haría que devolviese un JSON.

Un saludo.

1 respuesta
n1x3r

#2 Cierto, ya lo tengo implementado:

	
	Activa JSON:
	Añadir \"&json=1\" al final de la URL sin las comillas
	Ejemplo: http://www.infopelicula.nixiweb.com/?d1=matrix&json=1
	Ejemplo: http://www.infopelicula.nixiweb.com/?d2=932476&json=1

Gracias por el aviso

Metaza

Por cierto exactamente la ID de la película como va, imagínate que quiero hacer un barrido de las 100 primeras registradas, cojo y voy cogiendo 0,1,2,3... o 0000001,0000002 o... ¿no hay linealidad?

Gracias.

1 respuesta
n1x3r

#4 Pues no se el sistema de organización de filmaffinity, pero supongo que serán claves aleatorias, o con algún patrón, no tengo ni idea.

TaiCHoKe

#1 Ajax. Creo que era una de tus dudas vamos.

http://www.bloogie.es/tecnologia/programacion/34-ajax-con-jquery-php-y-json-ejemplo-paso-a-paso

1 respuesta
n1x3r

#6 Ajax interactua con JSON y este ya lo tengo implementado, ajax y jquery ya es cosa del cliente, no del servidor.

1 respuesta
TaiCHoKe

#7 Pensaba que estabas atascado ahi endendi mal.

La unica duda es que devolver? Tu usa JSON que es una maravilla

n1x3r

Tenéis algún ejemplo de conector para JSON? que reconstruya el array a partir del JSON.
Un saludo.

DarkSoldier

ehmm se puede saber como la has hecho? filmaffinity tiene API para desarrolladores? xD

2 respuestas
n1x3r

#10 esta es una api no oficial. Lo remarco NO OFICIAL y no quiero desvelar el método que utilizo para evitar bloqueos dejando inservible mi script.

eisenfaust

#10 Échale un ojo a http://search.cpan.org/stepanov/IMDB-Film-0.52/lib/IMDB/Film.pm

Igual te da pistas.

tracker086

Una pregunta, hace un tiempo yo hice un scrapping de IMDB, el caso es que después de investigar un poco, vi que es ilegal en algunos casos, como por ejemplo con IMDB. Has mirado en los Terms of use de FilmAffinity si pone algo al respecto?

Solo lo digo por que no te metas en problemas ;)

Solo por curiosidad, los datos los sacas mediante expresiones regulares?

Un saludo y enhorabuena por el curro!!

1 respuesta
n1x3r

#13 Si me leí la política de privacidad y las condiciones de uso, y no dice nada al respecto.
A tu otra pregunta no, no utilizo "regex", buen creo que en dos cosas, pero son sentencias muy simples, tampoco utilizo ninguna técnica de intrusión "haxor" que accede a la base de datos interna ni nada por el estilo. Mas bien un poco de regex como comento, algo de DOM, y mucho ingenio, arrays y objetos diría yo xD.

PD: si encontráis errores (que seguro que existen) me lo comunicáis y lo arreglo, ahora tengo algunos problemas con la exportación en JSON y la codificación, no estoy muy puesto en JSON así que lo solucionare lo antes posible.

16 días después
n1x3r

Tras una leve caída he mejorado y resubido los script ahora se mueve bajo un dominio .tk

Un saludo a todos.

jujoalco

como generas el XML? o sea, no digo como coges la info de la web y eso, me refiero a teniendo los datos, como lo exportas en XML o en JSON, ya que hasta ahora yo siempre lo hacia manualmente(creando el XML/JSON manualmente como cadena de texto)

1 respuesta
n1x3r

#16 el XML de forma manual, ya que aun no me he currado una función para hacerlo de forma automática.

	header("Content-Type: application/xml; charset=ISO-8859-1");
	echo '<?xml version="1.0" encoding="ISO-8859-1"?>';
	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>';	
		

Pero el json si existe una funcion y es esta:

			$datos_b = array_map('htmlentities',$datos['criticas']);
			$datos = array_map('htmlentities',$datos);  
$datos['criticas'] = $datos_b; print_r(json_encode($datos));

Para el json primero codifico el array con htmlentities para que no de problemas al decodificar con los caracteres raros, y después uso la función json_encode (se q te estarás dando de cabezazos contra la pared, lo se) para decodificarlo uso esta funcion q esta mejorada respecto al del post original:

function json_conex($go){
	$resultado = strpos($go, "id=");
	if($resultado !== FALSE){
	$go = explode("=", $go);
	$json = file_get_contents('http://123script.tk/filmaffinity/?d2='.urlencode($go[1]).'&json=1');
	}else{
	$json = file_get_contents('http://123script.tk/filmaffinity/?d1='.urlencode($go).'&json=1');
	}
	$d=json_decode($json); 
	$f = toArray($d);
	$datos = array_map("html_entity_decode", $f); 
	return $datos;}

Esta un poco personalizada pero se entiende bien, esta función te devuelve el array tal cual estba antes de codificarlo con json.

Mas dudas ya sabéis ;)

PD: si alguien necesita un programador php aquí dejo mi web de contacto: http://about.me/danielfs

29 días después
N

Hola.

He estado probándolo y funciona correctamente pero querría comentar algo por si fuese posible mejorarlo y es el tema de la codificación de caracteres.

Hay muchos caracteres que no los pilla bien como en el caso de los títulos.

En el campo de titulo no coge bien los caracteres de este y sin embarco en el campo titulo_original si lo coge bien, cuando entiendo que se harán del mismo modo y se supone que deberían de salir bien ambos.

Aparte de esto solo dar la enhorabuena por este gran trabajo.

1 respuesta
10 días después
n1x3r

#18 Agradecería que me dieses la id de la película para verificarlo, y poder asi solucionar el problema.
La verdad es que he tenido muchos problemas con la codificación y los conectores, es algo que me trae de cabeza ya que la fuente no siempre utiliza una misma codificación :/

10 días después
N

Hola

Desde hace unos días me dejo de funcionar mostrandome el siguiente error:

Forbidden

You don't have permission to access /www/123script.tk/index.php on this server.

Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.

¿Es temporal?

En cuanto a la id de las que me daban fallos de codificación tendría que mirar cual si vuelve a funcionar para ver si podrías corregirlo.

Gracias

n1x3r

La codificación ya la arregle, el servidor esta caido por limite de transferencia, son muchos miles de visitas diarias.
Lo estoy solucionando, en 2 días lo tendré listo.

Un saludo.

12 días después
J

Se sabe para cuando volverá a estar disponible de nuevo?

Gracias y enhorabuena

djtonight

Gran trabajo.
Quizá deberías mirar algun repositorio o algo donde te alojen tu script y así no tener que chupar tu transferencia mensual.

10 días después
n1x3r

Ya lo tengo alojado en otro servidor, espero que en este no se caiga.

Un saludo a todos.

22 días después
A

hola, como estan?
yo he desarrollado una api muy parecida... me sabrias decir como consigues cuando no encuentra nada por lo menos sacarte un resultado parecido?

esta muy bien el desarrollo.

y perdonad por el post ya se que lleva bastante tiempo sin uso
gracias
mi web www.ahaugas.com

1 respuesta
n1x3r

#25 Se realiza una búsqueda general y se selecciona la mas relevante. Generalmente es por la película mas parecida y con fecha mas actual.

Un saludo.

14 días después
N

Hola.

Estoy probando de nuevo el servicio y vuelve a no funcionar. ¿Es algo temporal?

n1x3r

Tengo problemas con el dominio, confié en los .tk pero son una basura, ya que en el momento en el que tienen algo de popularidad te los cierran o lo venden a compañias de publicidad.

El nuevo dominio es: http://script.spaingeek.com/filmaffinity/
Y este será definitivo.

B

http://script.spaingeek.com/filmaffinity/?d1=matrix

Acabo de probar esto, no crees que sería mejor que la crítica y el autor de la misma vayan en el mismo elemento del array?

#30: Esto claramente es subjetivo, pero yo creo que sería mejor tener un array de criticas con dos elementos: autor y contenido.

2 respuestas
n1x3r

#29 Lo he puesto así xq es mas fácil unirlo que separarlo. Yo personalmente lo utilizo separado por temas de diseño.

1 respuesta