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:
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:
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>
Google
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
Implementado en:
Estos son los sitios en los que fue implementado el servicio de estadística.
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.
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: http://3gbyte.sytes.net:1034/
- Cordón Turístico: http://www.cordonturistico.com.ar (implementado en php)
Leonardo Alberto Celis