He actualizado PageRankAlert.com a la beta 6, para dar una solución rápida al tema del baneo por parte de Google.
Parece que efectivamente, a Google no le ha gustado que un sistema automatizado le realizara consultas… Era demasiado obvio, al hacerlas mediante una tarea programada con cron que se ejecutaba cada minuto durante las 24 horas, constantemente… o quizá por permitir que los usuarios añadieran hasta 100 URLs de una sola vez.
Para solucionar el tema, ya que a mi servidor no se le permite realizar consultas de PageRank, he descentralizado la parte de la aplicación que realiza estas consultas. Ahora la aplicación del servidor mantiene la lista de páginas, el historial de PageRank, los usuarios, etc., pero las consultas a Google las hago desde mi portátil, a través de un script ruby que le consulta a PageRankAlert.com cuál es la siguiente página en cola de actualización, posteriormente le consulta a Google el PageRank (desde mi portátil, no desde el servidor), y le devuelve el valor a PageRankAlert.com.
Para no tropezar dos veces con la misma piedra, ahora las actualizaciones se harán más pausadamente, a un ritmo aleatorio respetuoso con Google, y sólo durante el horario en el que mi máquina está encendida.
Por otro lado, cuando los usuarios añaden una nueva página a la aplicación, el PR de ésta no se puede conocer sino que se pone en cola, con un valor de -2. Las páginas en cola son las que tienen prioridad en la actualización que hago desde mi portátil, así que en pocos minutos se actualizarán.
Me motiva esta idea de la descentralización del trabajo, me plantea nuevas posibilidades como convertir esta aplicación en un sistema alimentado por colaboradores que trabajen en modo satélite, pidiendo las URLs en cola de actualización al servidor y enviando los resultados. Esto plantea dificultades como la de fiarse o no de los datos enviados por terceros… se podría solucionar haciendo un tratamiento estadístico y aceptando únicamente los valores que la mayoría envíe… mmm…
7 comments ↓
Hola Jaime, una duda. ¿Cómo se comunica el script de tu portátil con la aplicación Rails, mediante script/runner, backgroundrb o similar?.
Ciao
Hola Antonio… pues lo he hecho de manera rápida y guarra, es un script en Ruby que lanzo en mi portátil y mediante un bucle infinito con una pausa aleatoria a cada vuelta, hace tres cosas en orden:
1.- Pregunta a la aplicación Rails cuál es la siguiente página en cola, y la respuesta es el ID de la página y su URL.
2.- Consulta el PR de esa URL.
3.- Devuelve a la aplicación Rails el ID de la página y su PR.
La comunicación la hago mediante open-uri, para el punto 1 leo un método de un controlador de la aplicación, que devuelve en el body el ID y URL separado por una coma… con eso consulto el PR de la URL y lo devuelvo de nuevo por open-uri, pasando por GET los parámetros ID y PR para que se actualicen.
Si quieres puedo poner ejemplos del código aquí.
Hola Jaime,
Realizar aplicaciones a partir de datos de google cada vez se hace más complicado. En bee.com.es estábamos a punto de lanzar un SERP Tracker (http://bee.com.es/serp_tracker) cuando Google dejó de ofrecer API keys con lo cual para obtener las posiciones por palabra clave de cada usuario tengo que parsear el resultado html que genera google para cada búsqueda. Esto implica violar las condiciones de uso… Con lo cual tenemos que retrasar la salida de nuestro producto. En fin, que me siento identificado con tu problema.
Sería interesante que google permitiese hacer consultas automatizadas desde unas IPs determinadas siempre que sea para generar valor añadido a sus servicios.
Has pensado la opción de utilizar ec2 de amazon? en principio tendrías una IP diferente cada vez que encendieses un servidor.
Un saludo
Hola Sergio, si que es una jodienda lo de las limitaciones de Google, aunque por otra parte lo entiendo para evitar abusos. Por ahora la solución que he tomado de calcularlo usando mi portátil funciona, y como mi IP es dinámica y la actualización la hago a un ritmo humano, no tendré esos problemas, espero.
No había pensado en usar EC2 pero ahora que lo miro tiene muy buena pinta… Se puede usar Ruby según veo, así que podría ser una solución interesante.
Pero vamos, que PageRankAlert es un juguete mío, no un proyecto del que dependa económicamente… Y casi que las limitaciones que me encuentro me motivan más que otra cosa, ya que me presentan nuevos retos a mi imaginación.
Estaría bien que el propio Google ofreciera APIs para desarrolladores con pago por uso o algo, aunque tampoco creo que anden faltos de capacidad de computación…
Hola Jaime, ya me queda claro como lo haces. Una cosilla, creo que no es una buena práctica usar GET para modificar datos en tu aplicación. ¿Cómo manejas el tema de los permisos para actualizar esos datos, HTTP AUTH?
Ciao.
No, desde luego no es buena idea usar GET para modificar datos, porque si alguien conociera esa URL podría actualizarlos con datos chungos… Es una solución temporal y mi única seguridad ahora mismo es que nadie conoce la URL de actualización, pero claro, no es plan de tener eso abierto…
Ando dándole vueltas a cómo proteger esto, estaba pensando pasar una clave como otro parámetro GET, pero seguiría siendo visible… Quizá si la encripto de alguna manera…
¿A tí que se te ocurre?
Pues yo lo haría con net/https y http basic auth, sobre esto último tienes bastante info en la red: http://google.es/search?q=rails+basic+auth
Ciao.
Leave a Comment