Kaamelott twitt bot

On en a gros !

@About me

let benjamin = {
  age:        28,
  city:       'Versailles',
  company:    'Companeo',
  job: 'lead dev js',
  dev:        ['Javascript', 'AngularJs', 'Node.js', 'C#', 'Unity3D'],
  devSince:   '2012-08-01'
}

l'idée V0.1

télécharger un mp3 au hasard

poster le mp3 généré sur twitter

en résumé

une demie-journée tranquille et hop j'aurai fini #EASY

Réalisation v0.1

SETUP DU PROJET

{
  "engines": {
    "node": ">=8.5"
  },
  "languages":"ES2016",
  "dependencies": {
   "no fucking ideas":"0.1"
  }
}

STEP 1:

télécharger un mp3?

réalisation Théorique

cherio parse le retour html de request

extraire du dom toutes les urls pour en faire un tableau 

request get kaamelott-soundboard pour télécharger le dom

télécharger un mp3 de la liste

réalisation

cherio parse le retour html de request

extraire du dom toutes les urls pour en faire un tableau 

request get kaamelott-soundboard pour télécharger le dom

télécharger un mp3 de la liste

réalisation

request get kaamelott-soundboard pour télécharger le dom

IMPOSSIBLE CAR SINGLE PAGE APP ANGULAR...

Open source je t'aime.

kaamelott soundboard hébergé sur github !!!!

réalisation ++

cherio parse le retour html de request

extraire du dom toutes les urls pour en faire un tableau 

request get kaamelott-soundboard github  pour télécharger le dom

télécharger un mp3 de la liste

réalisation ++

let currentItem;
let htmlPage = await request('https://github.com/2ec0b4/kaamelott-soundboard/tree/master/sounds')
.then((data)=> {
    return data;
});
// create jquery like selector based on dom
const $ = new cheerio.load(htmlPage);
// exctraction de la liste des sons
let songList = $('tr.js-navigation-item>td.content>span>a').toArray();
let currentSong = songList[random(songList)];
{
"engines": {
    "node": ">=8.5"
  },
  "languages":"ES2016",
  "dependencies": {
   "request-promise-native": "1.0.4",
   "cheerio": "git://github.com/cheeriojs/cheerio.git",
  }
}

STEP 2:

Upload de mp3 sur twitter

twitter et mp3 #nope

plan B ?

#mp4 #video #COMMENTjE fAIS

mp3 > mp4

ffmpeg n'est pas ton ami...

ffmpeg()
    .on('error', (err, stdout, stderr) => {
        console.log(err.stack);
        console.log('--- ffmpeg stdout ---');
        console.log(stdout);
        console.log('--- ffmpeg stderr ---');
        console.log(stderr);
        console.log('\n');
        secondDeferred.reject(false);
    })
    .on('end', (err, stdout, stderr) => {
        console.log('--- ffmpeg end generation ---');
        console.log('\n');
        if (isSlack) {
            secondDeferred.resolve(videoPath);
        } else {
            secondDeferred.resolve(currentSong);
        }
    }).on('start', (err, stdout, stderr) => {
    console.log('--- ffmpeg start generation ---');
    console.log('\n');
    })
    .addOption('-strict', 'experimental')
    .addInput(songPath)
    .withAudioBitrate('64k')
    .withVideoBitrate('768k')
    .withSize('640x360')
    .outputOptions(['-r 1/5', '-vcodec h264', '-pix_fmt yuv420p', '-strict -2', '-acodec aac', '-t 00:05:00'])
    .output(videoPath)
    .run();

STEP 3:

{
"engines": {
    "node": ">=8.5"
  },
  "languages":"ES2016",
  "dependencies": {
   "request-promise-native": "1.0.4",
   "q": "1.5.0",
   "cheerio": "git://github.com/cheeriojs/cheerio.git",
   "fluent-ffmpeg": "2.1.2"
  }
}

UPLOAD DE
 MP3  MP4

SUR TWITTER

pour de vrai cette fois.

upload media sur twitter

const twittBot = require('./twittBot').twittBot;
const moment = require('moment');

function postTweetWithMediaText(mp3Name, soundsList) {
    let filePath = __dirname + '/../current.mp4';
    
    // upload du media
    
    twittBot.postMediaChunked({file_path: filePath}, async function (err, data, response) {
        
        // réalisation du tweet avec le media associé.
        
        twittBot.post('statuses/update', {
            status: '',
            media_ids: [data.media_id_string]
        }).then(function (resp) {         

            // logging pour server    
            console.log('tweet created at:',
                (moment(resp.data.created_at, 'ddd MMM DD HH:mm:ss +Z YYYY')
                 .format('DD-MM-YYYY HH:mm'))
            );
            console.log('\n');
            console.log('tweet created text: ' + resp.data.text);
        });
    });
}

Réalisation v0.1

en résumé

télécharger un mp3 au hasard

poster le mp3 généré sur twitter

Idée :

réalité :

télécharger un mp3 au hasard

poster le media généré sur twitter

le transformer en mp4

Réalisation v0.1

en résumé

Idée :

réalité :

une demie-journée tranquille et hop j'aurai fini #EASY

Une journée et demie de taff pour un poc

STEP 4:

{
"engines": {
    "node": ">=8.5"
  },
  "languages":"ES2016",
  "dependencies": {
   "request-promise-native": "1.0.4",
   "q": "1.5.0",
   "cheerio": "git://github.com/cheeriojs/cheerio.git",
   "fluent-ffmpeg": "2.1.2",
   "twit": "2.2.9"
  }
}

déploiement EN PROD

olala trop de choix

merci aux copains

clever cloud demo TIME!

Réalisation v1

en résumé

  • Vérifier l'heure actuelle et regardez si elle correspond à l'heure de publication spécifiée.
     
  • Télécharger aléatoirement un mp3 du soundboard opensource (via webscrapping avec cheerio npm).
     
  • Vérifier à l'intérieur de la liste des tweets du compte courant si le futur mp4 généré éxiste déjà.
     
  • Générer un nouveau mp4 à partir de l'intro mp3 et du mp3 téléchargé ainsi que l'image de fond.
     
  • Upload media sur twitter.
     
  • Poster le tweet sur twitter avec le media associé.
     
  • Effacer du file system, les fichiers générés (mp3/mp4).

REMERCIEMENTS

kaamelott-twitt-bot

By ben080989

kaamelott-twitt-bot

kaamelott twitt bot is a nodejs program based.

  • 395