Bot Telegram pubblica automaticamente i nuovi video di un canale Youtube

Bot Telegram pubblica automaticamente i nuovi video di un canale Youtube

Ciao, ho creato un bot Telegram che pubblica in automatico un messaggio ogni volta che creo un nuovo contenuto su Youtube.

Presto farò un video in questione, per ora ti lascio il codice.

Intanto puoi vederlo in azione nel mio canale Telegram, iscriviti se ti va: https://t.me/ricettedamaker

Iscriviti anche al mio canale Youtube se non l’hai ancora fatto: https://www.youtube.com/c/SimoneDallAsta?sub_confirmation=1

Codice

var https = require('https');
var fs = require('fs');

var API_key = 			"API_key";
var channel_ID = 		"channel_ID";
var bot_token = 		"bot_token";
var telegam_channel = 	"@telegam_channel";

var folder = "elaborati";

//il bot può mandare messaggi solo tra gli orari ora_inizio e ora_fine
var ora_inizio = 8;
var ora_fine = 22;

var files_arr = new Array();
fs.readdir(folder, (err, files) => {
	files.forEach(file => {
		files_arr.push(file)
	});
	
	console.log("Video processati totali: " + files_arr.length);

	setInterval(function(){
		try{
			var now = new Date();

			if(now.getHours() > ora_inizio && now.getHours() < ora_fine)
			{
				console.log("Get data..");
				getDataFromYoutube();
			}
		}catch(err){
			console.error(err);
		}
	  
	}, 10*60*1000);
  
  
  
  
});


function getDataFromYoutube()
{
	var options = {
		host: 'www.googleapis.com',
		port: 443,
		path: '/youtube/v3/search?key=' + API_key + '&channelId=' + channel_ID + '&part=snippet,id&order=date&maxResults=20' ,
		method: 'GET'
	};


	var request = https.request(options, (response) => {
		
		response.setEncoding('utf8');
		let returnData = '';

		response.on('data', (chunk) => {
			returnData += chunk;
		});

		response.on('end', () => {
			try{
				var JSON_resp = JSON.parse(returnData);
				JSON_resp.items.forEach(function(video) {
					var videoId = video.id.videoId;
                                        if(videoId != undefined)
                                        {
					 var title = video.snippet.title;
					 var description = video.snippet.description;
					 var url = "http://www.youtube.com/watch?v=" + videoId;
					 var thumbnails = video.snippet.thumbnails.high.url;
					
					 if(!files_arr.includes(videoId))
					 {
					 	//mando messaggio bot, se esito positivo creo file
					 	sendMessageTelegram(videoId, url, title, description, thumbnails)
					 }
				        }	
				});
			}catch(err){
			  console.error(err);
			}
		});

		response.on('error', (error) => {
		  throw error;
		});
	});

	request.end();

}


function createFile(folder, videoId, url, title, description, thumbnails)
{
	var content = "ID: " + videoId;
	content += "\r\nURL: " + url;
	content += "\r\nTitolo: " + title;
	content += "\r\nDecrizione: " + description;
	content += "\r\nCopertina: " + thumbnails;
	
	fs.writeFile(folder + "/" + videoId, content, function (err) {
	  if (err) throw err;
	  console.log('File ' + videoId + ' Creato correttamente.');
	  files_arr.push(videoId)
	}); 
}

function sendMessageTelegram(videoId, url, title, description, thumbnails)
{
	var content = "Nuovo contenuto disponibile sul canale!! \r\n"
	content += "<b> " + title + " </b> \r\n";
	content += "Ecco il link: " + url + "\r\n";
	content += description + "\r\n\r\n";
	content += "Ricordati di iscriverti al canale se non lo hai già fatto e attiva la campanella. Iscriviti al canale ora: https://www.youtube.com/c/SimoneDallAsta?sub_confirmation=1";

	var options = {
		host: 'api.telegram.org',
		port: 443,
		path: '/bot' + bot_token + '/sendMessage?chat_id=' + telegam_channel + '&text=' + encodeURIComponent(content) + '&parse_mode=html' ,
		method: 'GET'
	};


	var request = https.request(options, (response) => {
		
		response.setEncoding('utf8');
		let returnData = '';

		response.on('data', (chunk) => {
			returnData += chunk;
		});

		response.on('end', () => {
			try{
				var JSON_resp = JSON.parse(returnData);
				
				if(JSON_resp.ok == true)
				{
					createFile(folder, videoId, url, title, description, thumbnails)
				}
				else 
				{
					console.error(JSON_resp);
					var timestamp = new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '')
					var error_message = "id: " + videoId + " - codice errore: " + JSON_resp.error_code + " - descrizione errore: " + JSON_resp.description + " --- " + timestamp + "\r\n" ;
					fs.appendFileSync('errori.txt', error_message);
				}
				
				
				
			}catch(err){
			  console.error(err);
			}
		});

		response.on('error', (error) => {
		  throw error;
		});
	});

	request.end();

}

Share This: