Un localizador uniforme de recursos (uniform resource locator) — o, más comúnmente, URL — es la dirección de un contenido en Internet. Las URL suelen incluir la dirección de una página web seguida de una larga cadena de caracteres aparentemente aleatorios. Pueden resultar antiestéticas y poco memorables. Afortunadamente, existen herramientas llamadas acortadores de URL que pueden reducirlos o acortarlos.

Acortar una URL tiene varias ventajas, como que la dirección es más fácil de compartir y es menos probable que los usuarios la escriban incorrectamente. Incluso un solo carácter que falte en una URL puede hacerla completamente inútil, dirigiendo a los usuarios a la página equivocada o a un recurso que ni siquiera existe.

Tomemos el ejemplo de https://example.com/blog-url-shorteners/48bfefiahl9adik acortado a https://example.com/url-shorteners. No es difícil ver cuál sería más propenso a compartir un usuario, o cuál podría dar lugar a más errores al teclear.

Las ventajas de un acortador de URL van más allá de simplificar las URL largas. También pueden ayudar en lo siguiente:

  • Mejorar el posicionamiento en los motores de búsqueda: Los creadores de contenido, las empresas y las start-ups tienen contenido en sus sitios web, blogs o redes sociales. Los motores de búsqueda prefieren enlaces con palabras clave específicas para que puedan posicionarse en consecuencia y generar buenos resultados. Una URL corta generada desde una plataforma conocida puede ayudar a posicionar mejor tu URL.
  • Seguimiento del tráfico de tus enlaces: Los servicios de acortadores de URL de pago, como Bitly, te ayudan a realizar un seguimiento de los usuarios que hacen clic en tus enlaces para que puedas analizar el tráfico entrante y personalizar tu contenido en consecuencia.

Dos Enfoques para un Acortador de URL: Una Librería de Python y una API

Siguiendo las instrucciones de este tutorial, construirás una aplicación web acortadora de URL con Python utilizando dos métodos diferentes:

El módulo pyshorteners lo utilizan los desarrolladores para generar URLs cortas, mientras que el módulo API de Bitly genera URLs cortas y proporciona funciones más robustas como clics por URL, ubicaciones de las URLs en las que se ha hecho clic, personalización de las URLs, etc.

Para completar el tutorial, necesitarás conocimientos básicos de Python, y Python debe estar instalado en tu sistema.

Configurar el Entorno del Proyecto

Antes de crear tu aplicación web acortadora de URL, tienes que configurar el entorno del proyecto, incluyendo la instalación de Flask, un framework ligero que facilita el desarrollo de aplicaciones web en Python.

Comienza con estos pasos:

  • Crea una carpeta de proyecto, quizás con un nombre como url-shortener.
  • Crea un archivo vacío llamado main.py dentro de esa carpeta.
  • Crea un entorno virtual para este proyecto, de forma que cualquier instalación de librerías Python sea independiente de tu sistema. Utiliza el comando python -m venv myenv en tu terminal para crear ese entorno. (En este caso, los archivos de entorno se colocarán en el directorio myenv)
  • Activa el entorno virtual utilizando el comando correspondiente para tu sistema operativo (y donde <myenv> es el nombre del directorio que creaste en el paso anterior).
    • Windows: <myenv>Scriptsactivate.bat
    • Linux/macOS: source <myenv>/bin/activate
  • Instala Flask utilizando el comando pip install flask.
  • Crea una carpeta llamada templates en la carpeta del proyecto. (Flask recuperará las plantillas HTML de este directorio)

Tu trabajo en el terminal hasta ahora tendrá este aspecto:

Comandos introducidos en el terminal para crear el entorno del proyecto Python.
El proyecto Python hasta ahora en un terminal de macOS.

Utilizando la Librería pyshorteners para Crear una Aplicación Web de Acortadores de URL

Con el entorno del proyecto configurado, ahora crearás tu primer acortador de URL utilizando la librería pyshorteners.

Instala la librería pyshorteners con el siguiente comando:

pip install pyshorteners

Creando una Interfaz de Usuario Básica para la Aplicación Web

A continuación, crearás un formulario básico en HTML con etiquetas y campos de entrada, donde introducirás una URL larga y generarás otra más corta.

Crea un archivo form.html en la carpeta de templates, luego introduce el siguiente código en ese archivo y guárdalo:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>URL Shortener</title>
</head>
<body>
  <h1>URL Shortener</h1>
  <form method="post" action="/">
    <label for="url">Enter an https:// URL:</label>
    <input type="url"
      name="url"
      id="url"
      placeholder="https://www.xyz.com"
      pattern="https://.*" size="50"
        value="{{old_url}}"
      required  
    >
    <button type="submit" value="submit">Submit</button>
    <br>
    <label>Generated URL: </label>
    <input name="generated_url" value="{{new_url}}" style="margin-top: 10px; margin-left:35px" size="50"></input>
  </form>
</body>
</html>

El código anterior crea un formulario con dos etiquetas, dos campos de entrada y un botón.

El primer campo de entrada, llamado url, es para escribir la URL larga, y el otro campo es para generar la URL corta.

El campo de entrada url tiene los siguientes atributos:

  • name: Para identificar el elemento (por ejemplo, URL)
  • placeholder: Para mostrar un ejemplo de URL
  • pattern: Para especificar el patrón de una URL que es https://.*
  • required: Para introducir una URL antes de enviarla
  • value: Para ver la URL antigua

El segundo campo de entrada tiene un atributo value establecido en new_url. new_url es una URL corta generada por la librería pyshorteners a partir del archivo main.py (que se muestra en la siguiente sección).

El formulario de entrada se muestra en la siguiente captura de pantalla:

Captura de pantalla de un formulario web para acortar URLs.
Un formulario web para el acortador de URL.

Código del Acortador de URL Utilizando pyshorteners

Ahora que has creado el formulario, puedes añadirle alguna funcionalidad utilizando Python y pyshorteners.

Añadirás código para procesar la URL larga en una corta y ejecutar la aplicación web. Navega hasta el archivo main.py que has creado antes, introduce el siguiente código y guárdalo:

from flask import Flask, render_template, request
import pyshorteners
app = Flask(__name__)
 
@app.route("/", methods=['POST', 'GET'])
def home():
  if request.method=="POST":
    url_received = request.form["url"]
    short_url = pyshorteners.Shortener().tinyurl.short(url_received)
    return render_template("form.html", new_url=short_url, old_url=url_received)
  else:
    return render_template('form.html')
 
if __name__ == "__main__":
 app.run() 

El código anterior importa la librería pyshorteners y los siguientes módulos del framework Flask, todos los cuales necesitarás para acortar URLs:

  • Flask: El propio framework Flask, que se introdujo anteriormente.
  • render_template: Un paquete de renderizado de plantillas utilizado para generar la salida de los archivos HTML de la carpeta templates.
  • request: Un objeto del framework Flask que contiene todos los datos que un usuario envía desde el frontend al backend como parte de una petición HTTP.

A continuación, crea una función llamada home() que toma una URL enviada en el formulario y emite una URL corta. El decorador app.route() se utiliza para vincular la función a la ruta URL específica para ejecutar la aplicación, y los métodos POST/GET gestionan las peticiones.

En la función home(), hay una declaración condicional if-else.

Para la sentencia if, si request.method=="POST", una variable llamada url_received se establece en request.form["url"], que es la URL enviada en el formulario. Aquí, url es el nombre del campo de entrada definido en el formulario HTML creado anteriormente.

A continuación, una variable llamada short_url se establece en pyshorteners.Shortener().tinyurl.short(url_received).
Aquí se utilizan dos métodos de la librería pyshorteners: .Shortener() y .short(). La función .Shortener() crea una instancia de la clase pyshorteners y la función .short() toma la URL como argumento y la acorta.

La función short(), tinyurl.short(), es una de las muchas API de la librería pyshorteners. osdb.short() es otra API que también puede utilizarse con el mismo fin.

La función render_template() se utiliza para renderizar el archivo HTML template form.html y enviar URLs de vuelta al formulario a través de argumentos. El argumento new_url se establece en short_url y old_url se establece en url_received. El ámbito de la declaración if termina aquí.

Para la sentencia else, si el método de solicitud es distinto de POST, sólo se mostrará la plantilla HTML form.html.

Demostración de la Aplicación Web Acortadora de URL Creada con la Librería pyshorteners

Para demostrar la aplicación acortadora de URL pyshorteners, navega a la ruta por defecto de la aplicación, http://127.0.0.1:5000/, después de ejecutar la aplicación.

Pega un enlace de tu elección en el primer campo del formulario web:

Captura de pantalla de la URL a acortar pegada en el formulario web.
Probando el acortador de URL utilizando la librería pyshorteners.

Pulsa el botón Enviar para que aparezca una URL corta con tinyurl como dominio en el campo URL generada:

Captura de pantalla que muestra la URL abreviada devuelta en el formulario web.
Resultado del acortador de URL utilizando la librería pyshorteners.

Utilizando el Módulo API de Bitly para Crear una Aplicación Web Acortadora de URL

En esta sección, desarrollarás una aplicación acortadora de URL utilizando la API de Bitly. Como se ha mencionado, el módulo API de Bitly es otro método para acortar URLs y también proporciona analíticas detalladas sobre clics, ubicación y tipo de dispositivo utilizado (como escritorio o móvil).

Instala la API de Bitly utilizando el siguiente comando:

pip install bitly-api-py3

Necesitas un token de acceso para utilizar la API de Bitly, que puedes obtener registrándote en Bitly.

Tras completar el proceso de registro, inicia sesión en Bitly para ver tu panel de control:

Captura de pantalla del panel de control de Bitly.

Haz clic en Configuración en la barra lateral izquierda y, a continuación, haz clic en la sección API que se encuentra en Configuración de desarrollador.

Genera un token de acceso introduciendo tu contraseña en el campo situado encima del botón Generar token, como se muestra en la imagen siguiente, y guarda el token para utilizarlo en el código de tu aplicación:

Captura de pantalla de la generación del token de acceso para la API de Bitly
Generar un token de acceso para la API de Bitly.

Código de Acortamiento de URL Utilizando la API de Bitly

Ahora que tienes el token de Bitly, puedes programar la aplicación web para acortar la URL utilizando la API de Bitly.

Utilizarás el mismo formulario que creaste para la sección pyshorteners, pero con algunos cambios en el archivo main.py:

from flask import Flask, render_template, request
import bitly_api
app = Flask(__name__)
 
bitly_access_token = "37b1xxxxxxxxxxxxxxxxxxxxxxxxxx"
 
@app.route("/", methods=['POST', 'GET'])
def home():
  if request.method=="POST":
    url_received = request.form["url"]
    bitly = bitly_api.Connection(access_token=bitly_access_token)
    short_url = bitly.shorten(url_received)
    return render_template("form.html", new_url=short_url.get('url'), old_url=url_received)
  else:
    return render_template('form.html')
 
if __name__ == "__main__":
 app.run() 

Como puedes ver en el código anterior, bitly_api se importa utilizando import bitly_api. A continuación, el token de acceso se guarda en una variable llamada bity_access_token, como en bitly_access_token = "37b1xxxxxxxxxxxxxxxxxxxxxxxx".

La función home() acorta la URL y contiene una sentencia condicional if-else.

Para la sentencia if, si el método o la solicitud es POST, entonces la URL enviada en el formulario se establece en la variable url_received.

La función bitly_api.Connection(access_token=bitly_access_token) se conecta a la API de Bitly y le pasa como argumento el token de acceso que guardaste anteriormente.

Para acortar la URL, se utiliza la función bitly.shorten() pasando la variable url_received como argumento y guardándola en una variable llamada short_url.

Por último, se renderiza el formulario creado y se envían las URL para que se muestren en el formulario utilizando la función render_template(). La declaración if se completa aquí.

Para la sentencia else, el formulario se renderiza utilizando la función render_template().

Demostración de la Aplicación Web Acortadora de URL Creada con la API de Bitly

Para demostrar la aplicación acortadora de URL de la API de Bitly, navega a la ruta por defecto de la aplicación, http://127.0.0.1:5000/, después de ejecutar la aplicación.

Pega un enlace de tu elección en el primer campo del formulario web:

Captura de pantalla del formulario web para la API del acortador de URL Bitly.
Probando el acortador de URL utilizando la API de Bitly.

Haz clic en Enviar para generar una URL corta con bit.ly como dominio en el segundo campo de la aplicación web:

Captura de pantalla de la URL acortada devuelta por la API de Bitly.
Resultado del acortador de URL utilizando la API de Bitly.

Utilizar la API de Bitly para acortar URLs en tu aplicación Python es así de sencillo.

Resumen

Los acortadores de URL te proporcionan URLs cortas que son fáciles de compartir, tienen un aspecto más limpio y ocupan menos espacio. En este artículo, has aprendido sobre los acortadores de URL y sus ventajas, así como a crear una aplicación web acortadora de URL con Python utilizando pyshorteners y la API de Bitly. La librería pyshorteners proporciona URLs cortas, mientras que la API de Bitly proporciona análisis detallados además de URLs cortas.

Puesto que ya has creado una aplicación impresionante, ¿por qué no llevarla al siguiente nivel y alojarla en el servicio de Alojamiento de Aplicaciones Web de Kinsta? Para ayudarte a poner en marcha una aplicación Python como esta en nuestra plataforma, explora nuestro tutorial de inicio rápido de Flask.

Adarsh Chimnani

Adarsh is a web developer (MERN stack), passionate about game-level designing (Unity3D), and an anime enthusiast. He enjoys absorbing knowledge just out of curiosity, implementing what he has learned in the real world, and sharing that knowledge with others.