Subir imágenes a Imgur usando un bot de Telegram en Nodejs
Dado que subir imagenes a Imgur una a una es un trabajo costoso y una perdida de tiempo involuntaria, vamos a automatizar esta tarea para que al responder a una imagen con un comando, automáticamente se suba de manera anónima a Imgur y posteriormente nos devuelva el link de la foto.
Índice
Generando Token de Imgur
Para crear esta función en nuestro bot, necesitaremos lo siguiente:
- Estar registrados en Imgur, posteriormente nos dirigimos a Imgur API e iniciamos sesión si lo requiere, ya sea con la cuenta de Google o vía Email.
Nos pedirá una serie de datos como:
- El nombre de la aplicación. Da igual que nombre le des.
- En Authorization Type, seleccionamos la segunda opción. De esta manera no nos pedira una direccion URL.
- Añadiriamos nuestro correo electrónico y una breve descripción.
Resolvemos la Captcha y pulsamos en "Submit".
Una vez hecho esto, nos deberá mostrar nuestro ClientID y SecretID que posteriormente utilizaremos. Anotalos en un papel o en un archivo .txt
API y creación del código
La API que utilizaremos es imgur-node-api. Pese a que tenga alguna que otra vulnerabilidad, no es alarmante ya que la API solo se dedica a subir imágenes a Imgur desde Telegram.
Para instalarla solo debemos escribir en nuestro terminal: npm install imgur-node-api --save
Ahora ya podemos trabajar en la parte del código.
// Importamos la libreria
const imgur = require('imgur-node-api');
// Creamos el comando
bot.onText(/^\/imgur/, function(msg){
// Recogemos el chatId donde se realiza la petición-
var chatId = msg.chat.id;
/*
Obligamos de alguna manera a que el usuario tenga que responder a una imagen que previamente haya sido enviada
para poder obtener los datos que necesitamos para obtener el enlace de los servidores de Telegram.
*/
// Le indicamos que si no respondemos a la imagen, no haga nada.
if (msg.reply_to_message == undefined){
return;
}
/*
Visualizando el contenido mediante console.log(msg), se puede observar los parámetros de la imagen.
Habitualmente suele devolver un Array con 3 resultados.
Como recomendación, deja marcada por defecto la posición [2] del array,
principalmente por la calidad de la imagen.
*/
var photo = msg.reply_to_message.photo[2].file_id
// Con esto obtendríamos el id del archivo de los servidores de Telegram.
bot.getFileLink(photo).then(function(enlace){
// "enlace", devuelve la url de la imagen subida en Telegram
console.log(enlace);
})
})
- Con esto, obtendríamos la imagen de los servidores de Telegram. Ahora haremos que dicha imagen se suba a Imgur y nos devuelva la url de la misma de la siguiente manera:
/*
Debemos dar nuestro clientId que previamente hemos solicitado para de alguna manera identificarnos.
La subida de imagenes son totalmente anonimas.
*/
var clientId = 'TuClientId'
// Establecemos el cliente y procedemos a la subida
imgur.setClientID(clientId)
// Pasamos como parametro "enlace"
imgur.upload(enlace, function(err, res){
// "res.data.link" devuelve la url de la imagen ya subida a Telegram
console.log(res.data.link)
var link = res.data.link;
// Y por último, enviaremos el enlace en un mensaje
bot.sendMessage(chatId, "Enlace de la imagen subida a Imgur: \n" + link)
})
- Aquí, hemos creado una variable que aloja nuestro token de Imgur, posteriormente hemos establecido nuestro clientId para poder subir la imagen, pasandole como parámetro el enlace de la imagen subida a Telegram.
- Una vez que esté subida a Imgur, el bot se encargará de devolvernos la url de la imagen finalmente subida a Imgur, quedando como resultado lo siguiente:
Si tienes dudas o no entiendes alguna parte del código, puedes unirte a nuestro grupo de Telegram donde te podemos ayudar.