Gostaria de informar que o LURL (Little URL) ou conhecido por Tiny-URL na sessão Code. Pretendo dedicar um pouco do tempo livre que eu não tenho ao desenvolvimento desse “Programa”.
Aproveitei e terminei a versão para PHP5, re-estruturei algumas classes. Também corrigi uns erros da versão do PHP4 e da versão PHP5. Criei o mesmo sobre a licença GPL.
Caso você possua alguma dúvida sobre como utilizar o LURL, encontrar um Bug, fizer melhorias, por favor entre em contato.
Na primeira versão do LURL (Tiny-URL), o usuário João, sugeriu que em vez de eu gerar um identificador aleatório, que poderia causar problemas quando o banco de dados se tornasse muito grande, eu poderia utilizar o campo ID, pois o mesmo é Auto Increment, e por isso ele se auto incrementa, não permitindo que existam dois campos com o mesmo identificador.
Já pensava em acatar a idéia do João a bastante tempo mas sempre estava com preguiça, até que alguns dias atrás uma amiga pediu ajuda para fazer um script para conversão de números entre bases. Após ajudar a mesma, ficou fácil. Só passar o código para PHP, modificar algumas funções antigas e pronto.
Ontem adicionei controle de estatísticas no Tiny URL, criei 2 tabelas para isso. Porém para consultar você precisava acessar o banco de dados manualmente. Resolvi fazer algo mais decente e criar uns gráficos de acessos dos últimos 30 dias. Pensei em utilizar a Chart API do Google mas ai me lembrei dos gráficos que eram gerados pelo WordPress Stats, dando uma olhada nele descobri o Open Flash Chart. Achei ele mais bonito e com as mesmas funcionalidades do Chart do Google. Então decidi implementar o gráfico com ele.
As novas funções implementadas foram:
getAccess($id) – Tem por função retornar um Array associativo com os números de acessos por data e o total de acessos.
formatData($data) – Recebe os acessos do getAccess e transforma em um array numérico. (Formato necessário para o chart ser gerado)
criarLabels() – Cria os labels para exibição na parte inferior do gráfico.
Para acessar as informações ainda não fiz uma página com a listagem dos domínios, você deve acessar manualmente o endereço http://www.seusite.com/diretorio/chart.php?id=ID onde ID é o UID da tabela URLS. Assim você obterá um gráfico de acessos ao domínio do UID nos últimos 30 dias.
Esse post é mais uma dica do que um artigo, já que não entra em detalhes da configuração do mesmo e na verdade utiliza as opções padrões do Ubuntu. Está instalação foi realizada com sucesso no Ubuntu 9.04 desktop.
Instalar o apache com:
$ sudo apt-get install apache2
Algum tempo atrás eu mostrei como criar um sistema próprio de Tiny-URL, estava curioso para saber como andavam os acessos aos meus links distribuidos por outros endereços, decidi implementar um sistema simples de controle de acessos.
Inicialmente você precisa adicionar estas duas tabelas em seu banco de dados:
CREATETABLE access (
aid INTEGER UNSIGNEDNOTNULLAUTO_INCREMENT,
urls_uid INTEGER UNSIGNEDNOTNULL,
information_iid INTEGER UNSIGNEDNOTNULL,
date DATE NULL, PRIMARYKEY(aid), INDEX access_FKIndex1(information_iid), INDEX access_FKIndex2(urls_uid) );
CREATETABLE information (
iid INTEGER UNSIGNEDNOTNULLAUTO_INCREMENT,
ip VARCHAR(255)NULL, PRIMARYKEY(iid) );
Após isso você deve fazer umas alterações no seu function-little-url.php mais especificamente no take_url($ur) deixe-o da seguinte maneira:
function take_lurl($lurl){ global$link; $q="SELECT * FROM `urls` WHERE `unique_chars` = ‘".$lurl."’"; $r=mysql_query($q,$link);// Realiza consulta. if(mysql_num_rows($r)>0){ $info=mysql_fetch_array($r); $url=$info["url"];// Pega endereço real $uid=$info["uid"];// Pega ID do endereço $ip=$_SERVER[‘REMOTE_ADDR’];// Pega IP do usuário $qr="select iid from `information` where ip = ‘".$ip."’"; $rr=mysql_query($qr,$link);// Procura se este IP já está no banco de dados if(mysql_num_rows($rr)>0){// Caso esteja insere somente um acesso novo proveniente deste IP $iid=mysql_result($rr,0,"iid"); mysql_query("INSERT INTO `access` (urls_uid,information_iid,date) values (".$uid.", ".$iid.", now())",$link); }else{// Caso não esteja, cria um registro com este IP e após cria um acesso. $qr=mysql_query("INSERT INTO `information` (ip) values (‘".$ip."’)",$link); $iid=mysql_insert_id($qr); mysql_query("INSERT INTO `access` (urls_uid,information_iid,date) values (".$uid.", ".$iid.", now())",$link); } }else{ echo"Sorry, link not found!"; } return$url; }
Neste sistema, existe uma tabela de IPs que já acessaram as URLs, quando uma nova URL é consultada, ele verifica se o IP já está cadastrado, caso esteja cria somente um novo acesso para esse IP no endereço X, caso não esteja cadastra este IP e cria o acesso para este IP no endereço X.
PS: Para consultar os acessos você deve acessar seu banco de dados e realizar consultas manualmente.
PS2: Para seu Tiny URL funcionar, você deve adicionar algumas regras de Rewriting. Você pode ver elas em Criar um sistema próprio de Tiny-URL
Edit: Corrigido erro que não adicionava a data e hora quando o IP já estava na tabela.
Ontem pela madrugada estava pensando no Twitter e que ele reduz urls grandes automaticamente para um sistema escolhidos por eles. Então, estava a pensar em como fazer o meu próprio sistema criação de urls pequenas (tiny url) e pesquisei um pouco no Google. Achei várias referências que utilizei como base para elaboração do meu e os links das mesmas você poderá encontrar no final deste post.
Primeiramente você deve criar uma tabela em seu banco de dados com as seguintes características:
# CREATE TABLE IF NOT EXISTS `urls` (
# `uid` int(11) NOT NULL auto_increment,
# `url` text default NULL,
# `unique_chars` varchar(25) BINARY NOT NULL,
# PRIMARY KEY (`uid`),
# UNIQUE KEY `unique_chars` (`unique_chars`)
# );
Este código foi pego do Abhise no seu post “Create your own tinyurl with php and mySQL” que foi minha maior referência, da mesma peguei várias funções mas realizei algumas alterações para melhor eficiência e também tradução para você. Como no código acima foi adicionado o ‘BINARY’ para o unique reconhecer diferença entre AAAA e aaaa, por exemplo.
O Abhise diz para criarmos tais e tais arquivos, eu particularmente, criei um arquivo de funções onde adicionei as diversas funções utilizadas e simplesmente chamei as mesmas nos seus respectivos arquivos.
—- Para ler o artigo inteiro acesse o link abaixo. Read more »