Binbox es un servicio que permite acortar links y crear pastes, ambas cosas generan dinero para el usuario final. Desde hace mucho he querido usar su API pero no entendía nada de REST, ni de las peticiones POST, GET, etcétera.
Así que lo olvidé por unos meses o años, y ayer recordé que nunca pude hacerlo. Lo intenté de nuevo y ahora sí pude hacerlo. Además, lo implementé en Python, ya que hacerlo en Javascript es muy fácil (ellos proveen la librería y las capas de abstracción superiores).
Lo que me pareció más difícil es que (y no sé la razón) los datos se deben encriptar usando la librería sjcl. Eso es fácil si estás en javascript, ¿pero y en Python? así que me puse a investigar y al final encontré una que tenía un error, el cual solucioné aquí.
Una vez teniendo la librería, tuve que decodificar los datos. Ya que la librería los devolvía con una b al inicio. Es decir, eran bytes. Por lo que regresaba algo como b’hola mundo’ en lugar de un simple ‘hola mundo’. Para solucionarlo, decodifiqué cada cosa codificada: el vector, el texto cifrado y la sal
texto_encriptado = SJCL().encrypt(texto, sal) texto_encriptado['ct'] = texto_encriptado['ct'].decode('utf-8') texto_encriptado['iv'] = texto_encriptado['iv'].decode('utf-8') texto_encriptado['salt'] = texto_encriptado['salt'].decode('utf-8')
Una vez hecho eso, me enfrenté a que el objeto JSON no debería tener espacios en blanco, y debía usar comillas dobles ” en lugar de comillas simples ‘. Para ello modifiqué los separadores y los mandé como argumento a json.dumps, quedando así:
texto_encriptado_como_json = json.dumps(texto_encriptado, separators=(',', ':'))
Ahora, para terminar, tenía que codificar los datos en base64:
texto_como_json_codificado = b64encode(texto_encriptado_como_json.encode('utf-8'))
Debido a que base64 devuelve un objeto codificado, tuve que, de nuevo, decodificarlo para remover la b al inicio:
texto_base64_decodificado = texto_como_json_codificado.decode('utf-8')
Y ahora sí pude hacer la petición:
datos = { 'data': texto_base64_decodificado, 'title': titulo, } peticion = requests.post(self.url_api, data = datos)
Para crear links no encontré ningún problema, ya que los datos se mandan en texto plano.
Finalmente para ahorrar dolores de cabeza a alguien que quiera usar la api desde Python, hice una pequeña clase que puede crear pastes y links acortados.
Es fácil de usar. Simplemente creas una instancia con tu nombre de usuario. Luego, puedes llamar a crear_paste o acortar_link. Ambos métodos devolverán el link del paste junto con la clave de acceso y el link acortado respectivamente.
Para probar el código, podemos usar esto:
""" Ejemplos """ binbox = BB("parzibyte") link_paste = binbox.crear_paste("Paste desde parzibyte.me!", "Hola. Este es un paste que fue creado en parzibyte.me/blog :)") link_acortado = binbox.acortar_link("https://parzibyte.me/", "Link acortado desde parzibyte.me") print("El link del paste: {}".format(link_paste)) print("El link acortado: {}".format(link_acortado))
Aquí la captura:
Con el link acortado pasa lo mismo:
Y así fue como pude implementar la api de binbox.io en Python, sin muchas complicaciones más que las que ofrece la librería sjcl.
La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…
Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…
El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…
El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…
En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…
Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…
Esta web usa cookies.