4
n1x3r
 
n1x3r
 
#1 30 abr 12, 21:02
#1 30 abr 12, 21:02

Nueva API para extraer contenido de filmaffinity

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/filmaff...matrix&xml=1
Ejemplo: http://script.spaingeek.com/filmaff...932476&xml=1

Activa JSON:
Añadir "&json=1" al final de la URL sin las comillas
Ejemplo: http://script.spaingeek.com/filmaff...atrix&json=1
Ejemplo: hhttp://script.spaingeek.com/filmaff...32476&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.
Mensaje editado 9 veces. Última edición 11 sep 12, 16:37
 
Metaza
 
Metaza
 
#2 30 abr 12, 21:52
#2 30 abr 12, 21:52
Yo haría que devolviese un JSON.

Un saludo.
 
n1x3r
 
n1x3r
 
#3 30 abr 12, 22:13
#3 30 abr 12, 22:13
#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...atrix&json=1
Ejemplo: http://www.infopelicula.nixiweb.com...32476&json=1


Gracias por el aviso
 
Metaza
 
Metaza
 
#4 30 abr 12, 22:29
#4 30 abr 12, 22:29
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.
 
n1x3r
 
n1x3r
 
#5 30 abr 12, 22:37
#5 30 abr 12, 22:37
#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
 
#6 1 may 12, 01:09
#6 1 may 12, 01:09
#1 Ajax. Creo que era una de tus dudas vamos.

http://www.bloogie.es/tecnologia/pr...mplo-paso-a-paso
 
n1x3r
 
n1x3r
 
#7 1 may 12, 01:29
#7 1 may 12, 01:29
#6 Ajax interactua con JSON y este ya lo tengo implementado, ajax y jquery ya es cosa del cliente, no del servidor.
 
TaiCHoKe
 
#8 1 may 12, 02:19
#8 1 may 12, 02:19
#7 Pensaba que estabas atascado ahi endendi mal.

La unica duda es que devolver? Tu usa JSON que es una maravilla
 
n1x3r
 
n1x3r
 
#9 1 may 12, 14:26
#9 1 may 12, 14:26
Tenéis algún ejemplo de conector para JSON? que reconstruya el array a partir del JSON.
Un saludo.
 
DarkSoldier
 
#10 1 may 12, 17:37
#10 1 may 12, 17:37
ehmm se puede saber como la has hecho? filmaffinity tiene API para desarrolladores? xD
 
n1x3r
 
n1x3r
 
#11 1 may 12, 18:41
#11 1 may 12, 18:41
#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
 
#12 1 may 12, 18:49
#12 1 may 12, 18:49
#10 Échale un ojo a http://search.cpan.org/~stepanov/IM...lib/IMDB/Film.pm

Igual te da pistas.
 
tracker086
 
#13 2 may 12, 18:41
#13 2 may 12, 18:41
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!!
 
n1x3r
 
n1x3r
 
#14 2 may 12, 20:07
#14 2 may 12, 20:07
#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.
Mensaje editado 2 veces. Última edición 2 may 12, 20:17
 
n1x3r
 
n1x3r
 
#15 18 may 12, 22:23
#15 18 may 12, 22:23
Tras una leve caída he mejorado y resubido los script ahora se mueve bajo un dominio .tk

Un saludo a todos.
 
jujoalco
 
#16 21 may 12, 12:49
#16 21 may 12, 12:49
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)
 
n1x3r
 
n1x3r
 
#17 21 may 12, 18:03
#17 21 may 12, 18:03
#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/?d...9;.urlencode($go[1]).'&json=1');
}else{
$json = file_get_contents('http://123script.tk/filmaffinity/?d...p;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
 
neon2004
 
#18 20 jun 12, 09:28
#18 20 jun 12, 09:28
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.
 
n1x3r
 
n1x3r
 
#19 30 jun 12, 17:36
#19 30 jun 12, 17:36
#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 :/
 
neon2004
 
#20 11 jul 12, 15:29
#20 11 jul 12, 15:29
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
 
n1x3r
 
#21 11 jul 12, 23:45
#21 11 jul 12, 23:45
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.
 
juanpecm
 
#22 24 jul 12, 12:57
#22 24 jul 12, 12:57

Servidor caido

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

Gracias y enhorabuena
 
djtonight
fap caster
djtonight
fap caster
#23 24 jul 12, 14:03
#23 24 jul 12, 14:03
Gran trabajo.
Quizá deberías mirar algun repositorio o algo donde te alojen tu script y así no tener que chupar tu transferencia mensual.
 
n1x3r
 
n1x3r
 
#24 4 ago 12, 12:32
#24 4 ago 12, 12:32
Ya lo tengo alojado en otro servidor, espero que en este no se caiga.

Un saludo a todos.
 
ahaugas
 
ahaugas
 
#25 26 ago 12, 15:45
#25 26 ago 12, 15:45
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 http://www.ahaugas.com
 
n1x3r
 
n1x3r
 
#26 28 ago 12, 15:30
#26 28 ago 12, 15:30
#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.
 
neon2004
 
#27 11 sep 12, 16:03
#27 11 sep 12, 16:03
Hola.

Estoy probando de nuevo el servicio y vuelve a no funcionar. ¿Es algo temporal?
 
n1x3r
 
n1x3r
 
#28 11 sep 12, 16:36
#28 11 sep 12, 16:36
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.
 
_oip_
 
_oip_
 
#29 12 sep 12, 15:04
#29 12 sep 12, 15:04
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.
Mensaje editado 2 veces. Última edición 12 sep 12, 15:56
 
n1x3r
 
n1x3r
 
#30 12 sep 12, 15:55
#30 12 sep 12, 15:55
#29 Lo he puesto así xq es mas fácil unirlo que separarlo. Yo personalmente lo utilizo separado por temas de diseño.
12
Favoritos
4


Este hilo es una pasada

Si te registras tendrás una carpeta personal con tus hilos favoritos para poder vigilarlos como hacen los mejores paranoicos.

Regístrate ahora! Sólo son 10 segundos!
x