Utilizou algum servidor para hospedar essa solução aonde? Foi algum host free? PErgunto porque fiquei na dúvida como fez para implantar essa solução de agendador, que rodasse uma vez por dia.
Cron Jobs, qualquer servidor simples com Linux permite implementar, isso inclui qualquer hospedagem simples, seja compartilhada ou não. Embora existam soluções mais adequadas, é amplamente usada pelos iniciantes e até devs mais experientes que querem algo rapido.
Tenho uma máquina um pouco mais antiga em casa mesmo que deixei rodando o script, geralmente utilizo ela com o ubuntu server para pequenos projetos pessoais, para executar 1x por dia tem várias abordagens, você pode agendar via cron ou então deixar o código todo em um loop e e adicionar um sleep de 24 horas. Que foi a abordagem que eu utilizei, inclusive com uma pequena lógica de retry em caso de falhas, não é uma das melhores mas para o meu caso está mais do que suficiente.
Por exemplo:
async function main() {
const allVideosFromChannel = await getAllVideosByChannelUrlAsync('https://www.youtube.com/@canal_escolhido_aqui')
await saveOnlyNewVideos(allVideosFromChannel);
await transcribeVideos();
await postProcessingTranscription();
await publishPosts();
}
while(true) {
// 1 minute -> 60 seconds
// 1 hour -> 3600 seconds
// 1 day -> 86400 seconds
const sleepingTimeInSeconds = 86400;
let tentative = 1;
const initialSleepingTimeToRetry = 60;
const retry = 3;
try {
await main();
console.log('Waiting to check for new videos...');
await new Promise(resolve => setTimeout(resolve, sleepingTimeInSeconds));
tentative = 1;
} catch (error) {
console.log(error);
if (tentative === retry) {
console.log('Max retries reached. Waiting to check for new videos...');
await new Promise(resolve => setTimeout(resolve, sleepingTimeInSeconds));
tentative = 1;
}
const backoffTime = initialSleepingTimeToRetry * (initialSleepingTimeToRetry * (2 ** (retry - 1)));
console.log(`Retrying in ${backoffTime} seconds... (Attempt ${tentative} of ${retry})`);
await new Promise(resolve => setTimeout(resolve, backoffTime * 1000));
tentative++;
}
}