Crear un acortador de URLs con PHP y MySQL

Supongo que, como la mayoría de nosotros/as, alguna vez has ido a enviar un enlace pero la URL no era precisamente amigable y habrás tenido que recurrir a un acortador de URLs como, por ejemplo, Google URL Shortener o Bitly. ¿Y por qué no crear un acortador de URLs con tu propio dominio y medir los clics con Google Analytics?

Hace un tiempo, respondiendo a esa pregunta, me puse a crear un acortador de URLs muy sencillo basado en PHP y MySQL como tecnología de programación y, gracias al protocolo de medición, Google Analytics como herramienta de medición de visitas. A continuación te muestro cómo lo hice para que puedas utilizarlo si quieres.

El proyecto consta de tres partes:

  • Código PHP
  • .htaccess
  • Base de datos

Código PHP

El código php en cuestión es el siguiente:

[php]

$url=$_GET[‘url’];
$dominio=$_SERVER[‘HTTP_HOST’];

// Configuración de la base de datos

$direccion_servidor=»;
$usuario_bd=»;
$clave_bd=»;
$base_datos=»;

// Configuración del evento que se registrará en Google Analytics

$categoria_evento=»; // Ejemplo: $categoria_evento=$dominio;
$accion_evento=»; // Ejemplo: $accion_evento=’visita’;
$etiqueta_evento=»; // Ejemplo: $etiqueta_evento=$url;

// Conexión a la base de datos

$db=mysqli_connect($direccion_servidor, $usuario_bd, $clave_bd, $base_datos);
mysqli_set_charset($db, ‘utf8’);

// Consulta a la base de datos

if (!empty($url)){
$sql="SELECT id, destino, UA, contador FROM destinos WHERE url=’$url’";
$result=mysqli_query($db, $sql);
while ($row=mysqli_fetch_array($result)) {
$cid=$row[‘id’];
$destino=$row[‘destino’];
$UA=$row[‘UA’];
$contador=$row[‘contador’]+1;
$sql_contador="UPDATE destinos SET contador=’$contador’ WHERE url=’$url’";
mysqli_query($db, $sql_contador);
}
}

if (!empty($UA) && !empty($destino)){
$curl=curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => "http://www.google-analytics.com/collect?v=$version&tid=$UA&cid=$cid&t=event&ec=$categoria_evento&ea=$accion_evento&el=$etiqueta_evento",
CURLOPT_USERAGENT => $dominio,
));
$resp=curl_exec($curl);
curl_close($curl);
}

// Redirección

header("Location: $destino");
[/php]

.htaccess

El código del .htaccess es muy sencillo ya que tan solo es una simple redirección:

[html]
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^([a-z0-9-]+)/?$ index.php?url=$1 [R=301,L]
</IfModule>
[/html]

Base de datos

La base de datos tampoco es nada complicada, tan solo una tabla donde guardar las URLs, los destinos y la UA de Google Analytis.

[html]
CREATE TABLE `destinos` (
`id` int(10) NOT NULL,
`url` tinytext NOT NULL,
`destino` tinytext NOT NULL,
`UA` tinytext NOT NULL,
`contador` int(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
[/html]

Test final

Una vez que tenemos estas tres partes implementadas bastará con insertar un registro en la base de datos ir ver qué todo funcione correctamente:

[html]

INSERT INTO `destinos` (`id`, `url`, `destino`, `UA`, `contador`) VALUES (‘1’, ‘test’, ‘https://dfriasruiz.es’, ‘UA-48485354-1’, ‘0’);

[/html]

Así pues, si todo está correcto, al acceder a la URL http://mi-dominio.com/test tendríamos ir ser redirigidos a https://dfriasruiz.es.

Como ves, crear un acortador de URLs es bastante sencillo. Como siempre, ésta solo es mi propuesta pero hay otras formas de hacerlo. Si quieres aportar algo no dudes en dejar un comentario.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio