Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SilvaExtreme

Melhorando o sistema de estatísticas de Gustavo Faelli

Recommended Posts

Salve salve Galera, até que enfim, depois de um ano, sobrou um tempinho e eu voltei a postar alguma coisa.

 

O sistema de estatísticas original está no site do IMASTERS nos dois links seguintes:

Parte I

Parte II

 

Se você não conhece o sistema, é interessante que entre nos links acima para se interar e assim entender o que estamos tratando aqui. Um sistema muito bom e completo por sinal, porem fiz algumas adequações a ele, pra se tornar mais econômico de recursos e também para abranger mais itens nas estatísticas.

 

A primeira mudança que fiz, foi migrar o banco de dados de ACCESS para MYSQL, com isso o banco se torna mais robusto e ágil.

 

Depois disso inseri um Java script para capturar a resolução da tela do internauta, uma vez que hoje a resolução 800/600, mais utilizada pelos desenvolvedores, não é a mais usada pelos internautas, a partir daí você pode saber qual a resolução mais adequada pra cada projeto. (Acrescentei ao banco a tabela resolucao)

 

No quesito Browser, declarei outros que estão sendo muito usados no momento.

 

Na referencia de onde o internauta vem, criei algumas condições, a primeira foi declarar quando o internauta digita o endereço e não clica em um link. No sistema original, cada nova visita criava um novo registro no banco, isso pode não parecer nada, mas para sites que tenham 10.000 por dia, são 10.000 diariamente no final do mês 300.000 e assim você segue contando. Com a condição que criei, verifico se aquela referência já existe, se sim, somo uma visita a ele, se não faço o insert. O numero de registros reduz drasticamente.

 

A mesma condição eu apliquei ao IP.

 

Ao final acrescentei o contador de visitas, ele insere um registro por dia, com isso posso contar as visitas da data atual, o total de visitas desde que o contador foi habilitado, fazer uma média, ou apresentar todos os registros.

 

Segue os códigos,

 

SQL do banco de dados

-- phpMyAdmin SQL Dump
-- version 2.11.0
--
-- Estrutura da tabela `acessos`
--

CREATE TABLE IF NOT EXISTS `acessos` (
  `id` int(11) NOT NULL auto_increment,
  `Data` varchar(10) NOT NULL,
  `Acessos` int(10) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;

-- --------------------------------------------------------

--
-- Estrutura da tabela `browsers`
--

CREATE TABLE IF NOT EXISTS `browsers` (
  `Id` int(11) NOT NULL auto_increment,
  `Browser` varchar(255) default NULL,
  `Acessos` int(11) default '0',
  KEY `Id` (`Id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6;

--
-- Extraindo dados da tabela `browsers`
--

INSERT INTO `browsers` (`Id`, `Browser`, `Acessos`) VALUES
(1, 'Internet Explorer', 0),
(2, 'Firefox', 0),
(3, 'Opera', 0),
(4, 'Netscape', 0),
(5, 'Outro navegador', 0);

-- --------------------------------------------------------

--
-- Estrutura da tabela `horas`
--

CREATE TABLE IF NOT EXISTS `horas` (
  `Id` int(11) NOT NULL auto_increment,
  `Hora` varchar(50) default NULL,
  `Acessos` int(11) default '1',
  KEY `Id` (`Id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=25;

--
-- Extraindo dados da tabela `horas`
--

INSERT INTO `horas` (`Id`, `Hora`, `Acessos`) VALUES
(1, '0', 0),
(2, '1', 0),
(3, '2', 0),
(4, '3', 0),
(5, '4', 0),
(6, '5', 0),
(7, '6', 0),
(8, '7', 0),
(9, '8', 0),
(10, '9', 0),
(11, '10', 1),
(12, '11', 0),
(13, '12', 0),
(14, '13', 0),
(15, '14', 0),
(16, '15', 0),
(17, '16', 0),
(18, '17', 0),
(19, '18', 0),
(20, '19', 0),
(21, '20', 0),
(22, '21', 0),
(23, '22', 0),
(24, '23', 0);

-- --------------------------------------------------------

--
-- Estrutura da tabela `hosts`
--

CREATE TABLE IF NOT EXISTS `hosts` (
  `Id` int(11) NOT NULL auto_increment,
  `Host` varchar(255) default NULL,
  `Acessos` int(11) NOT NULL,
  KEY `Id` (`Id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=14;

-- --------------------------------------------------------

--
-- Estrutura da tabela `meses`
--

CREATE TABLE IF NOT EXISTS `meses` (
  `Id` int(11) NOT NULL auto_increment,
  `Mes` varchar(50) default NULL,
  `Acessos` int(11) default '1',
  KEY `Id` (`Id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=13;

--
-- Extraindo dados da tabela `meses`
--

INSERT INTO `meses` (`Id`, `Mes`, `Acessos`) VALUES
(1, 'Janeiro', 0),
(2, 'Fevereiro', 0),
(3, 'Março', 0),
(4, 'Abril', 0),
(5, 'Maio', 0),
(6, 'Junho', 0),
(7, 'Julho', 0),
(8, 'Agosto', 0),
(9, 'Setembro', 0),
(10, 'Outubro', 0),
(11, 'Novembro', 0),
(12, 'Dezembro', 0);

-- --------------------------------------------------------

--
-- Estrutura da tabela `referencias`
--

CREATE TABLE IF NOT EXISTS `referencias` (
  `Id` int(11) NOT NULL auto_increment,
  `Referencia` varchar(255) default NULL,
  `Acessos` int(11) default '0',
  KEY `Id` (`Id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=11;


-- --------------------------------------------------------

--
-- Estrutura da tabela `resolucao`
--

CREATE TABLE IF NOT EXISTS `resolucao` (
  `id` int(11) NOT NULL auto_increment,
  `Resolucao` varchar(16) NOT NULL,
  `Acessos` int(10) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;

--
-- Extraindo dados da tabela `resolucao`
--

INSERT INTO `resolucao` (`id`, `Resolucao`, `Acessos`) VALUES
(1, '640x480', 0),
(2, '800x600', 0),
(3, '1024x768', 0),
(4, 'Outra Resolução', 0);

Config.asp

<%
strConnection = "driver={MySQL ODBC 3.51 Driver}; server=seu_server; uid=seu_usuario; pwd=sua_senha; database=seu_banco;option=NUM"
set db = Server.CreateObject("ADODB.Connection")
db.Open strConnection
%>

Índex.asp

<%
RESOLUCAO = REQUEST.QUERYSTRING("resolucao")
IF RESOLUCAO = "" THEN %>
<script language="JavaScript">
switch(screen.width){
case 640:
location="?resolucao=640";
break;
case 800:
location="?resolucao=800";
break;
case 1024:
location="?resolucao=1024";
break;
case 1152:
location="?resolucao=1152";
break;
case 1280:
location="?resolucao=1280";
break;
}
</script>
<%
ELSE
SESSION("RESOLUCAO") = RESOLUCAO
END IF
'****************************************************************
'Apago a página do cache, caso haja
'****************************************************************
Session.LCID = 1046
Response.Expiresabsolute = Now() - 2
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
'****************************************************************
'Seleciono o navegador do internauta
'****************************************************************
browser = Request.ServerVariables("HTTP_USER_AGENT") 
IF InStr(browser,"MSIE") Then
browser =  "Internet Explorer"
ElseIF InStr(browser,"Firefox") Then
browser =  "Firefox"
ElseIF InStr(browser,"Opera") Then
browser =  "Opera"
ElseIF InStr(browser,"Netscape") Then
browser =  "Netscape"
ELSE
browser = "Outro navegador"
END IF
'Conto mais uma visita para o navegador
SQL_Browser = "update browsers set acessos = acessos + 1 Where browser = '"&browser&"' "
Set RS_Browser = db.Execute(SQL_Browser)
'****************************************************************
'Gravo de onde o internauta veio
'****************************************************************
historico = request.servervariables("http_referer")
if historico ="" then
historico = "Endereço Digitado"
end if
SQL_Historico = "SELECT * FROM Referencias Where Referencia = '"&historico&"' "
set RS_Historico = db.Execute(SQL_Historico)
If RS_Historico.EOF Then
'se não existir a referencia insiro ela no banco
SQL_Historico = "insert into referencias(referencia, Acessos) values('"&historico&"', '1')"
Set RS_Historico = db.Execute(SQL_Historico)
'caso já exista a referencia, somo uma visita à ela.
else
SQL_Historico = "update referencias set acessos = acessos + 1 Where Referencia = '"&historico&"'"
Set RS_Historico = db.Execute(SQL_Historico)
end if
'****************************************************************
'Vamos fazer a mesma condição para o IP
'****************************************************************
ip = Request.ServerVariables("REMOTE_ADDR") 
if ip = "" then
ip = "Ip Oculto"
end if
SQL_IP = "SELECT * FROM hosts Where Host = '"&ip&"' "
set RS_IP = db.Execute(SQL_IP)
If RS_IP.EOF Then
'se não existir o ip insiro ele no banco
SQL_IP = "insert into hosts(host, Acessos) values('"&ip&"', '1')"
Set RS_IP = db.Execute(SQL_IP)
'caso já exista o ip, somo uma visita à ele.
else
SQL_IP = "update hosts set acessos = acessos + 1 Where host = '"&ip&"'"
Set RS_IP = db.Execute(SQL_IP)
end if
'****************************************************************
'aqui eu gravo a resolução da tela
'****************************************************************
If Resolucao = "640" then 
Resolucao =  "640x480"
ElseIF Resolucao = "800" then
Resolucao =  "800x600"
ElseIF Resolucao = "1024" then
Resolucao =  "1024x768"
ELSE
Resolucao = "Outra Resolução"
END IF
Response.write Resolucao
'Conto mais uma visita para a rersolução
SQL_Resolucao = "update Resolucao set acessos = acessos + 1 Where Resolucao = '"&Resolucao&"' "
Set RS_Resolucao = db.Execute(SQL_Resolucao)
'****************************************************************
'Aqui eu gravo a hora da visita
'****************************************************************
hora = Hour(Now) 
SQL_Hora = "update horas set acessos = acessos + 1 Where id = "&hora&" "
Set RS_Hora = db.Execute(SQL_Hora)
'****************************************************************
'Aqui eu gravo o dia da semana da visita
'****************************************************************
semana = Weekday(Now)
SQL_Semana = "update semana set acessos = acessos + 1 Where id = "&semana&" "
Set RS_Semana = db.Execute(SQL_Semana)
'****************************************************************
'Aqui eu gravo o mês da visita
'****************************************************************
mes = Month(Now)
SQL_Mes = "update meses set acessos = acessos + 1 Where id = "&mes&" "
Set RS_Mes = db.Execute(SQL_Mes)
'****************************************************************
'Aqui monto a data
'****************************************************************
if Day(Now) < 10 Then
Dia = "0" & Day(Now)
else
Dia = Day(Now) 
end if
if Month(Now) < 10 Then
Mes = "0" & Month(Now)
else
Mes = Month(Now) 
end if
Ano = Year(Now)
Hora = Hour(Now) - 2
if Hora < 10 Then
Hora = "0" & Hora
else
Hora = Hora 
end if
if Minute(Now) < 10 Then
Minutos = "0" & Minute(Now)
else
Minutos = Minute(Now) 
end if
if Second(Now) < 10 Then
Segundos = "0" & Second(Now)
else
Segundos = Second(Now) 
end if
Data	= Dia & "/" & Mes & "/" & Ano
SQL_Data = "SELECT * FROM Acessos Where data = '"&data&"'"
set RS_Data = db.Execute(SQL_Data)
If RS_Data.EOF Then
'se não existir a data  insiro ela no banco
SQL_Data = "insert into Acessos(Data, Acessos) values('"&data&"', '1')"
Set RS_Data = db.Execute(SQL_Data)
'caso já exista a data, somo uma visita à ela.
else
SQL_Data = "update Acessos set Acessos = Acessos + 1 Where data = '"&data&"'"
Set RS_Data = db.Execute(SQL_Data)
end if
'****************************************************************
'Feito a contagem, redireciono para o site
'****************************************************************
response.Redirect("/default.asp")
%>

Não estou postando a página que lista os dados, caso a galera ache que que seja útil digam que eu posto.

Peço desculpas ao Gustavo Faelli pois não pedi autorização para tais mudanças, fiz, partindo do pressuposto que o código seria livre. Caso fira direitos autorais ou regras do Forum, por favor deletem este tópico.

 

Cido Silva

Desenvolvimento de sites, softwares e aplicações para web

www.cidosilva.com.br

Compartilhar este post


Link para o post
Compartilhar em outros sites

É interessante você colocar o código que é pertencente ao Gustavo, e uma outra observação que foi atualizado/otimizado por você.Para assim garantirmos os direitos e boa prática de conduta na internet.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá xanburzum, não entendi sua mensagem:

 

É interessante você colocar o código que é pertencente ao Gustavo, e uma outra observação que foi atualizado/otimizado por você.Para assim garantirmos os direitos e boa prática de conduta na internet.

Os códigos do Faeli estão nos links no topo do artigo, mas como eu disse, caso fira as normas do forum, pode deletar o topico.

 

Att,

Cido Silva

Compartilhar este post


Link para o post
Compartilhar em outros sites

não há necessiadade de excluí-lo, porem uma sugestão seria , para você colocar como comentário no código, que foi atualizado por você.entendeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.