Acortador de enlaces con flask
Veamos como implementar un servicio para acortar enlaces, como el que puedes ver en redes sociales o webs. Acortar enlaces permite ahorrar caracteres en tus mensajes y permite pasar:
- 👖 De una URL larga
https://www.ejemplo.com/con/url/muy/larga/y/muchos/parametros
- 🩳 A una URL corta
http://servidor:5000/6231aa1
.
Para que esto funcione es necesario un servicio que recuerde la relación entre ambas URL. Es decir, que cuando alguien intente acceder a la corta, se redirija a la larga.
- El servidor almacena la relación 🩳
→
👖.
En este ejemplo vamos a implementar un servicio web con flask
que nos permita acortar URL. Tendremos dos endpoints:
acorta
: Dada una URL larga, nos devuelve una corta y almacena la relación./
: Dada una URL corta, usando la relación almacenada, nos redirige a la larga.
from flask import Flask, request, redirect
import hashlib
app = Flask(__name__)
url_map = {}
@app.route('/acorta', methods=['POST'])
def shorten_url():
url_larga = request.form['url']
url_corta = acorta_url(url_larga)
url_map[url_corta] = url_larga
return f'Acortada: {url_larga} -> {url_corta}'
@app.route('/<url_corta>')
def corta_a_larga(url_corta):
url_larga = url_map.get(url_corta)
if url_larga:
return redirect(url_larga)
else:
return 'No encontrada!', 404
def acorta_url(full_url):
hashed = hashlib.sha256(full_url.encode()).hexdigest()
return hashed[:7]
if __name__ == '__main__':
app.run(debug=True)
Veamos el ejemplo en acción. Si instalas curl
puedes hacer lo siguiente. Esto realiza una petición a tu aplicación indicando que quieres acortar la dirección de Google. Y almacena la URL corta 253d142
.
curl -X POST -d "url=http://www.google.com" http://localhost:5000/acorta
# Acortada: http://www.google.com -> 253d142
Ahora en tu navegador si pones http://localhost:5000/253d142
podrás ver como te redirige a Google.
✏️ Ejercicios:
- Usa el paquete
sqlite3
para persistir la información deurl_map
si la aplicación se reinicia. Es decir, tal como está ahora si se reinicia la aplicación se perderán las URL acortadas. Persiste esa información en disco y cárgala al iniciar.