Trouver musique sur Youtube en Node.JS avec usetube

Bonjour à tous,
Plusieurs d’entre vous m’ont demandés comment rechercher une musique sur Youtube en Node.JS.
J’avais prévu initialement de vous expliquer comment le faire en passant par l’API de google mais je viens de découvrir ce petit paquet npm qui cache bien son jeu, voici donc usetube !

Ce paquet npm va crawler les pages de résultat Youtube afin d’en extraire les données sous un format JSON. Cela est très pratique car l’api de Google n’est pas utilisée et donc aucune clé n’est nécessaire !

Tout de suite place à la pratique!

La pratique

Tout d’abord installons ce paquet npm:

npm install usetube

Maintenant, créons un fichier index.js et copions le contenu suivant à l’intérieur:

const usetube = require('usetube');

const myArgs = process.argv.slice(2);

usetube.searchVideo(myArgs[0]).then(tube => console.log(tube));

Tout d’abord on importe notre librairie usetube dans une constante.
Ensuite on récupère la liste des arguments passés à notre script node avec la variable d’environnement process.
Et enfin on lance la recherche avec le premier paramétre passé à notre script.

Faisons un test:

node index.js javascript

On obtiens les résultats suivants:

{
  videos: [
    {
      id: 'QB1DTl7HFnc',
      original_title: '[Cours Javascript #0] Débuter Javascript de zéro, apprendre les bases',
      title: '[Cours Javascript #0] Débuter Javascript de zéro, apprendre les bases',
      artist: '',
      duration: 120,
      publishedAt: 2021-01-06T13:31:18.609Z
    },
    {
      id: 'XkvrHQNmigs',
      original_title: 'TUTO JS - #0 BASES DU JAVASCRIPT ET PRÉ-REQUIS',
      title: 'REQUIS',
      artist: 'TUTO JS - #0 BASES DU JAVASCRIPT ET PRÉ',
      duration: 1317,
      publishedAt: 2018-05-30T13:31:18.610Z
    },
  [...]
    {
      id: 'uEZLmx1wimA',
      original_title: 'Les tendances du JavaScript en 2021 - Front / Back / etc...',
      title: 'Front / Back / etc...',
      artist: 'Les tendances du JavaScript en 2021',
      duration: 980,
      publishedAt: 2021-02-03T13:31:18.614Z
    },
    {
      id: 'c-I5S_zTwAc',
      original_title: 'Learn JAVASCRIPT in just 5 MINUTES (2020)',
      title: 'Learn JAVASCRIPT in just 5 MINUTES (2020)',
      artist: '',
      duration: 315,
      publishedAt: 2020-04-01T13:31:18.614Z
    },
    {
      id: 'bG2BmmYr9NQ',
      original_title: 'The Easiest Javascript Game Ever',
      title: 'The Easiest Javascript Game Ever',
      artist: '',
      duration: 514,
      publishedAt: 2020-06-24T13:31:18.614Z
    }
  ],
  didyoumean: '',
  token: ''
}

Conclusion

Vous savez donc maintenance rechercher des vidéos sur Youtube à l’aide de usetube. Vous pouvez également intégrer cela à un bot discord comme celui créé dans un de mes précédent articles.

Sources


Articles récents

Trouver musique sur Youtube en Node.JS avec usetube

4 commentaires sur “Trouver musique sur Youtube en Node.JS avec usetube

  1. Bonjour,
    Tout d’abord bravo pour vos articles, ils sont supers et intuitif.
    J’aurais cependant une question :
    Ayant été plus loin avec ce module, je voudrais savoir si vous savez comment faire pour que, dès que je déclenche la commande « search », le bot peut prendre en compte ensuite le numéro que j’indique et ensuite balancer la musique.

    Je vois comment faire la dernière musique cependant je ne vois pas comment je peux faire pour lui dire « Si cette commande est activé et que le prochain message est un numéro alors… »

    Merci encore !

    1. Bonjour Nico,
      Merci beaucoup pour ton commentaire !!
      Je suis très heureux que cela te plaise et t’aide 🙂
      Pour répondre à ta question, normalement tu devrais pouvoir « splitter » le message reçu par discord js de la façon suivante :

      const args = message.content.split( » « )

      Là on récupère tous les arguments séparés par des espaces, il suffit juste ensuite de récupérer le paramètre comme ceci (si c’est le premier paramètre par exemple) :

      Dans discord : &search nom_de_musique

      Dans le code, args[1] sera égal à nom_de_musique.

      J’espère que j’ai répondu à ta question, mais si ce n’est pas le cas n’hésite surtout pas à le dire et on verra ensemble ton code si tu le souhaites :).

      Encore merci pour ton message !

      1. Merci pour ta réactivité !

        Alors non, ça le $search nom de la musique il est déjà programmer et il me renvoie bien les 20 premiers résultats.

        Ce que je souhaite, c’est qu’après cette commande, si l’utilisateur veut la 4ème musique il envoie « 4 » et la 4ème musique part.
        Sauf que je ne peut pas faire un « message.content » par exemple, car l’utilisateur va faire « search nom_de_la_musique » et ensuite quand il va choisir le numéro le bot va pas le détecter.

        Ce que je me demande et que je n’ai pas encore trouvé, c’est est-ce qu’il y a une méthode pour faire une intervalle de type (Si la commande search est activé, alors dans les 30 secondes, si il y a un numéro qui est envoyé, alors tu envoie la musique correspondant à ce numéro ».
        (Pas très claire, désolé )

        1. Ah d’accord j’ai compris ! 🙂
          Ce que tu peux faire par exemple c’est dans la fonction qui gère ta commande search, déclarer un nouveau « écouteur d’événement » pour l’événement message de l’objet client dans discordjs:

          client.on(« message », message => {});

          Juste avant tu récupère le timestamp courant et dans ta fonction tu compare le timestamp que tu as récupéré avant la fonction à celui du moment où ta fonction est déclenchée et si c’est inférieur à 4000 (pour 4s), tu lance l’action que tu veux, sinon tu ne fais rien.
          Et dans tous les cas tu peux ensuite détruire cet event handler (écouteur d’événement) comme ça: Doc nodejs

          ça doit te donner un truc comme ça au final:

          const start = Date.now();

          client.on("message", message => {

          if(Date.now() - start) < 4000){
          // Ton action
          }

          client.removeListener("message", this); // Je ne suis pas sûr pour l'emploie de this ici, je te laisse me faire un retour si ça ne fonctionne pas
          });

          J’espère que ça pourra t’aider 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut