lunes, 7 de noviembre de 2011

Distinguir entre el acceso de un buscador y de una persona en .NET

Problema:
Queremos detectar cuando es un robot (bot, crawler,...etc) el que accede a nuestra aplicación web.
Solución 1 :
Usar:   if (request.browser.crawler = true) then ....
Precauciones:
En versiones anteriores la definición de browsers figuraba en el web.config y quedaban obsoletas rapidamente. A partir de la versión 2 del Framework se introdujeron los ficheros .browser que ademas por lo que veo en mis maquinas se actualizan por windows update.
La propiedad crawler se determina en la linea

del fichero gateway.browser
Personalmente esta linea me perece muy pobre.
Solucion 2:
Mantienes tu propia lista de palabras clave para detectar los crawlers.
Por ejemplo:

Dim BOTS = {"TEOMA",
"ALEXA",
"FROOGLE",
"INKTOMI",
"LOOKSMART",
"URL_SPIDER_SQL",
"FIREFLY",
"NATIONALDIRECTORY",
"ASK JEEVES",
"TECNOSEEK",
"INFOSEEK",
"WEBFINDBOT",
"GIRAFABOT",
"CRAWLER",
"WWW.GALAXY.COM",
"GOOGLEBOT",
"SCOOTER",
"SLURP",
"APPIE",
"FAST",
"WEBBUG",
"SPADE",
"ZYBORG",
"RABAZ",
"IISBOT"} 
dim Robots=From b In bots Where pagina.Request.UserAgent.ToUpper Like "*" + b + "*"
If robots.count then
  'codigo para robots
else
'codigo para personas
end if
Solución 3

Similar a la solución 2, pero en lugar de una variable BOTS en código almacenar en base de datos los patrones de crawler, leerlos y almacenarlos en caché. Algo así como esto:

Const rob = "robots"
Dim bots As String() = {""}

If pagina.Cache(rob) Is Nothing Then
  Dim servicio = New IdirectorioClient
  bots = servicio.traeBots()
  servicio.Close()
  pagina.Cache.Add(rob, bots, Nothing,
         Caching.Cache.NoAbsoluteExpiration,
         Caching.Cache.NoSlidingExpiration,
         CacheItemPriority.Default,
         Nothing)
Else
  bots = CType(pagina.Cache(rob), String())
End If
Dim busqueda = From b In bots Where pagina.Request.UserAgent.ToUpper Like "*" + b + "*"
If busqueda.Count > 0 Then ......

Pruebas:
Para hacer pruebas es interesane este add-in de Firefoz que permite suplantar a un crawler:
https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/

No hay comentarios: