Saturday, April 10, 2010

Data mining de IMDB y HKMDB


Si necesitan información de cine encontraran que ni imdb.com ni hkmdb.com proveen un API o similar que permita buscar datos fácil y rápidamente. Esto es una cagada, así que escribí unas funciones en php que usan cURL para minar datos del html directamente.

La aplicación Movies de iPhone permite catalogar películas con gran cantidad de opciones, pero mucho mejor que cargarlas una por una a mano, es la funcionalidad que tiene para importar datos de un xml. En mi caso particular, los datos de mis películas están en una base mySQL propietaria no compatible con Movies. Por este motivo tuve que escribir un php que generara el xml compatible y decidí usar datos de IMDB Y HKMDB para completar los que faltaran en mi base.

http://www.netwalkapps.com/content/movies

En el caso de IMDB pueden buscar por una o más palabras pasándole un string a la función imdb_search(), el string puede contener espacios. Si todo funciona bien la función devolverá un string con el url de un titulo en imdb.com que puede o no ser el que Uds. buscan. Si la búsqueda genera más de un resultado el php tomara la primer opción presentada. Esto no siempre es la mejor opción, pero nadie es perfecto. HKMDB funciona igual con hkmdb_search().

Una vez que tienen un url valido de un titulo en imdb o hkmdb, se lo pasan a la función imdb_get() / hkmdb_get(). Si todo sale bien la función debería devolver un array asociativo con los datos encontrados. Para IMDB estos datos son titulo, año, descripción, director, país, duración, genero, lenguaje, y títulos alternativos. Para HKMDB estos datos son titulo, año, país, genero y director.

IMDB acepta búsquedas por GET. Pero HKMDB hace las búsquedas por POST, y tiene un tema poco amigable con unos redirects. Por eso está incluida una función muy útil que encontré para hacer POST con cURL.

Tomen en cuenta que si HKMDB y/o IMDB modifican la disposición y/o forma de búsqueda las funciones pueden volverse inútiles. Parsear el html depende de tags específicos en un orden especifico.



No comments:

Post a Comment