Creando un módulo de estadísticas con ASP
El presente artículo explica como crear un módulo de estadísticas. El módulo permite capturar todos los movimientos que se están realizando en su sitio web y programar los reportes según sus necesidades.
La lógica del módulo puede ser portada a cualquier otro lenguaje. El artículo está dividido en tres secciones principales:
- Modelo de datos: en donde se explica las tablas necesarias para el módulo.
- Desarrollo: en donde se explica la programación.
- Generar reportes: en donde se explica como utilizar el modulo.
Modelo de datos
Primero debemos crear dos tablas: la tabla de conceptos, en donde se guardarán las páginas que van a ser monitoreadas, y la tabla de estadísticas en donde se guardarán todos los registros de movimientos.
Statistics (Tabla Estadisticas)
StatisticsConcepts (Tabla Conceptos)
Cargar los datos
Antes de comenzar a utilizar nuestro módulo de estadísticas debemos configurarlo, esto significa cargar los datos correspondientes para que funcione. La tabla de Estadísticas no requiere carga de datos, ya que en ésta tabla se guardarán las acciones de nuestros visitantes.
En la tabla de Conceptos debemos cargar las páginas que deseamos nuestro módulo de estadísticas monitoree.
Desarrollo
A continuación se dividirá el desarrollo de las funciones para el módulo de estadísticas en dos apartados:
Frontend: en donde explicaré las funciones de registro
Backend: en donde explicaré como armar los reportes
Front-end
Acceso a datos
Primero vamos a establecer la conexión que utilizaremos tanto para registrar los acciones de los visitantes como así también para mostrar los reportes:
Set cn = Server.CreateObject("ADODB.Connection") cn.Open "driver={SQL Server};server=localhost;uid=user;pwd=pass;database=ohstudio"
Por supuesto la cadena de conexión corresponde a donde tengan alojada la base de datos. En éste caso se trata de una base de datos de mssql server. Esta cadena de conexión puede ser puesta al comienzo de la página o en un include.
Función para registrar movimientos
La functión doStatistics grabará todos los movimientos que realizará el visitantes en nuestro sitio web.
La información entre las páginas de cualquier sitio web fluyen por variables POST o variables GET. Esta información es la que capturará la función.
Además la función capturará información del visitante de nuestro sitio web: ip, navegador y módulo operativo (éstos dos últimos valores son traídos desde la misma variable de servidor).
<% ' Función: doStatistics ' Descripción: ' Registra los movimientos de un usuario Function doStatistics () ' Declara las variables dim lsUserInfo, lsActionsQS, lsActionsPost dim lsVisitedPage, liSearchConcept dim lrsStatisticConcept, lrsInsertStatics, lsSQL ' Instancia los objetos Set lrsInsertStatics = Server.CreateObject("ADODB.Recordset") Set lrsStatisticConcept = Server.CreateObject("ADODB.Recordset") ' Recupera la pagina visitada para luego buscar su concepto lsVisitedPage = trim(Request.ServerVariables("SCRIPT_NAME")) ' Recupera las acciones lsActionsQS = Request.QueryString lsActionsPost = Request.Form ' Consulta los conceptos lsSQL = "SELECT * FROM StatisticsConcepts" Set lrsStatisticConcept = cn.Execute(lsSQL) if not lrsStatisticConcept.EOF then do while not lrsStatisticConcept.EOF ' Busca el concepto para la página visitada liSearchConcept = InStr(1, lsVisitedPage, trim(lrsStatisticConcept.Fields("Pagina").Value)) ' Si encuentra el concepto registra los datos if liSearchConcept <> 0 then lsSQL = "INSERT INTO Statistics (IP, DateLog, Concept, BrowserOS, Querystring, Form) lsSQL = lsSQL & "VALUES ("lsSQL = lsSQL & "'" & Request.ServerVariables("Remote_Addr") & "', " lsSQL = lsSQL & "'" & Now & "', " lsSQL = lsSQL & lrsStatisticConcept.Fields("Id").Value & ", " lsSQL = lsSQL & "'" & Request.ServerVariables("HTTP_USER_AGENT") & "', " lsSQL = lsSQL & "'" & lsActionsQS & "', " lsSQL = lsSQL & "'" & lsActionsPost & "') " cn.Execute(lsSQL) end if lrsStatisticConcept.MoveNext loop end if Set lrsInsertStatics = nothing Set lrsStatisticConcept = nothing End Function %>
Lo más recomendable es que ésta función se guarde en un include y luego este include se incorpore a las páginas donde deseamos registrar movimientos.
Una vez disponible ésta función, hay que llamarla. La llamada puede ser dentro de una condición, donde comienza la página, donde termina la página, depende de en qué momento deseamos que comience a registrar los movimientos.
Es importante cargar en la tabla de Conceptos (StatisticsConcepts) todas las páginas asp que deseamos monitorear y luego agregar la siguiente llamada en las mismas:
<%Call doStatistics()%>
Listo!!! Nuestro sitio ya comenzó a registrar cada movimiento que realizan los visitantes. Ahora pasemos a analizar dichos movimientos…
Back-end
Reportes
Nuestro sitio ya ha comenzado a acumular información sobre los navegantes y sus movimientos. Es tiempo de idear una manera de mostrar dicha información. Los reportes nos ayudarán a enfocarnos en los puntos en donde nuestro sitio es más fuerte, para luego darles prioridad a la hora de actualizar el sitio web.
Funciones para generar reportes
Para generar reportes utilizaremos dos funciones: buildReport y getValue4QS.
La función buildReport es la que nos permitirá construir las consultas a la tabla de estadísticas. La función getValue4QS es la que nos permitirá filtrar por un valor que deseemos buscar en un conjunto de variables de post o get, que como ya sabemos se guardarán gracias a la función doStatistics en nuestra tabla de estadísticas.
<% ' Función: buildReport ' Descripción: ' Genera reportes ' Parámetros: ' concept: id de concepto de estadísticas ' variables: array de variables que se quiere discriminar para una estadística en particular, ej. moneda ' values: array de valores para las variables declaradas arriba ' form: true si se tiene que buscar en las acciones del request.form - false en la de request.querystring ' start_date: fecha de comienzo para el filtro ' end_date: fecha de fin para el filtro ' count: true devuelve la cantidad de registros - false devuelve recordset con los registros function buildReport(concept, variables(), values(), form, start_date, end_date, count) dim lsSQL, lrsRecordset, lsActionSel dim i, liCounter Set lrsRecordset = Server.CreateObject("ADODB.Recordset") ' Comienza a armar la consulta: ' Devuelve la cantidad o todos los registros if count then lsSQL = "SELECT COUNT(*) as total FROM Statistics WHERE Id <> 0 " else lsSQL = "SELECT * FROM Statistics WHERE Id <> 0 " end if ' Si no viene el concepto filtrar por todos if concept <> "" then lsSQL = lsSQL & "AND concept = " & concept end if ' Discrimina acciones de querystring o post if form then lsActionSel = "Form" else lsActionSel = "Querystring" end if ' Agrega todos los criterios de búsqueda for i = 0 to ubound(variables) lsSQL = lsSQL & "AND " & lsActionSel & " LIKE '%" & variables(i) & "=" & values(i) & "%' " next ' Filtra por rango de fechas if start_date <> "" and end_date <> "" then lsSQL = lsSQL & "AND cast(floor(cast(Fecha as float)) as datetime) between " lsSQL = lsSQL & " CONVERT(datetime, '" & start_date & "', 101) and CONVERT(datetime, '" & end_date & "', 101) " else if start_date <> "" then lsSQL = lsSQL & "AND cast(floor(cast(Fecha as float)) as datetime) between " lsSQL = lsSQL & "CONVERT(datetime, '" & start_date & "', 101) and CONVERT(datetime, GETDATE(), 101) " end if if end_date <> "" then lsSQL = lsSQL & "AND cast(floor(cast(Fecha as float)) as datetime) between " lsSQL = lsSQL & "CONVERT(datetime, '" & end_date & "', 101) and CONVERT(datetime, GETDATE(), 101) " end if end if Set lrsRecordset = cn.Execute(lsSQL) ' Devuelve la cantidad de registros o los registros mismos if count then liCounter = cint(lrsRecordset.Fields("total").value) buildArrowReport = liCounter else set buildArrowReport = lrsRecordset end if set lrsRecordset = nothing end function ' Función: getValue4QS ' Descripción: ' Recupera el valor de una variable en una cadena de formato querystring ' Parámetros: ' value: cadena de formato querystring ' variable: variable a buscar dentro de la cadena de formato querystring function getValue4QS(value, variable) Dim arrActions, arrTemp, i, j if Trim(value) <> "" then arrActions = split(value, "&") for i = 0 to ubound(arrActions) arrTemp = split(arrActions(i), "=") for j = 0 to ubound(arrTemp) if arrTemp (0) = variable then returnValue4QS = arrTemp (1) end if next next else getValue4QS = "" end if end function %>
Generar reportes
Esponja
Revisemos el siguiente escenario:
- Tenemos un sitio web de catálogo de productos de limpieza.
- Dentro de nuestro sitio web tenemos un buscador de productos.
- El buscador consta de un campo de texto llamado “SearchString”.
- Cuando un visitante realiza una búsqueda se envia por post los datos del campo “SearchString” a la páginas “search.asp”.
Primero debemos cargar la página search.asp en nuestra tabla de conceptos de estadísticas StatisticsConcepts. Supongamos que el código de este nuevo registro es 2.
Deseamos saber cuantas búsquedas se realizaron con la palabra “Esponja” y quienes la realizaron. Para ello debemos hacer simplemente una llamada a la función buildReport y mostrar los resultados…
Llamamos a la función:
Como la función nos devolverá un conjunto de registros hacemos un set a una variable que previamente seteamos como tipo recordset. También es posible que la función sólo devuelve la cantidad, para ello en el último parámetro debemos indicarle que sea false y sacar la instrucción set, ya que no se seteará ningún objeto, solamente devolverá un entero.
<% Dim rs Set rs = Server.CreateObject("ADODB.Recordset") Set rs = buildReport(2, array("buscar"), array(""), true, f_i, f_f, false) %> Para mostrar los registros simplemente nos queda recorrer el recordset. <table> <% if not rs.EOF then %> <tr> <td>Fecha</td> <td>Búsqueda realizada</td> </tr> <% do while not rstotal.EOF %> <tr> <td><%=(rs.Fields("DateLog").value)%></td> <td><%=getValue4QS(rs.Fields("Form").value, "buscar")%></td> </tr> <% rstotal.MoveNext() loop end if set rs = nothing %> </table>
Supongamos ahora que deseamos saber la cantidad de veces que accedió el robot de Google a nuestro sitio. En este caso no necesitamos utilizar la función buildReport(), solamente debemos consultar a la tabla de estadísticas. La consulta tendría que ser de la siguiente manera:
<% Dim lsSQL lsSQL = "SELECT COUNT(*) as Total FROM Statistics WHERE BrowserOS like '%google%'" Set lrsRecordset = cn.Execute(lsSQL) %>
Sólo nos resta mostrar el valor del campo Total y tendremos la cantidad de veces que accedió el robot de Google a nuestro sitio web.
Conclusión
En este artículo hemos visto una manera de monitorear los accesos y movimientos de sus visitantes. Además como tratar dicha información recolectada. A fin de conocer el comportamiento de sus visitantes es importante realizar un análisis de los lugares que acceden y que acciones realizan. De ésta manera usted podrá mejorar constantemente su sitio web a fin de que sea mucho más útil podrá presentar el crecimiento que ha tenido para capturar más audiencia.
Por hacer:
Estas son algunas de las tareas que se podrían realizar para expandir el funcionamiento del módulo…
- ABM de Conceptos
- Tabla de Excepciones
- Clases de php, o componente del COM+
Implementado en:
Estos son los sitios en los que fue implementado el servicio de estadística.
- 3Gcommerce:
- Cordón Turístico: (implementado en php)
Agradecimientos:
Este artículo fue publicado originalmente en ohstudio.com.ar por Alberto Celis.
Este articulo tiene un problemita e algunos datos que estan mal escritos, pero en realidad muy buen articulo para principiantes mi email de contacto es [email protected] estoy buscando webmaster para una organizacion de una web que de seguro sera famosisima
no hay uno para php? \\\’\’
Necesito uno para php… o por lo menos un ejemplo
///que bueno me apunto mi correo: [email protected]
Yo también quiero uno para Php.