rapgenius-js

A client that queries the RapGenius (www.rapgenius.com) website

npm install rapgenius-js
1 downloads in the last day
3 downloads in the last week
20 downloads in the last month

RapGenius-JS Build Status

rapgenius-js is a simple client that enables you to query RapGenius(www.rapgenius.com) and retrieve information about rap and rock artists and songs.

Rationale

This project was created because RapGenius do currently not support a node.js API.

Installation

$ npm install rapgenius-js

Usage

The API is very simple to use and currently enables you to perform the following:

Model objects

Artist

Artist
  - name: String
  - link: String
  - popularSongs: Array (of String)
  - songs: Array (of String)

Song

Song
  - name: String
  - artists: String
  - link: String

Lyrics

Verses
  - id: int
  - content: String
  - explanation: String

Section
  - name: String
  - content: String
  - verses: Array (of Verses)

Lyrics
  - songId: int
  - songTitle: String
  - mainArtist: String
  - featuringArtists: Array (of String)
  - producingArtists: Array (of String)
  - sections: Array (of Section)

Search for an artist:

var rapgeniusClient = require("rapgenius-js");

rapgeniusClient.searchArtist("GZA", "rap", function(err, artist){
  if(err){
    console.log("Error: " + err);
  }else{
    console.log("Rap artist found [name=%s, link=%s, popular-songs=%d]",
                artist.name, artist.link, artist.popularSongs.length);

  }
});

//Example for a rock artist
rapgeniusClient.searchArtist("Bruce Springsteen", "rock", function(err, artist){
  if(err){
    console.log("Error: " + err);
  }else{
    console.log("Rap artist found [name=%s, link=%s, popular-songs=%d]",
                artist.name, artist.link, artist.popularSongs.length);

  }
});

Search for a song:

var rapgeniusClient = require("rapgenius-js");

rapgeniusClient.searchSong("Liquid Swords", "rap", function(err, songs){
  if(err){
    console.log("Error: " + err);
  }else{
    console.log("Songs that matched the search query were found" +
                "[songs-found=%d, first-song-name=%s", songs.length, songs[0].name);
  }
});

Search for the lyrics of a song along with their meaning:

var rapgeniusClient = require("rapgenius-js");

var lyricsSearchCb = function(err, lyricsAndExplanations){
    if(err){
      console.log("Error: " + err);
    }else{
      //Printing lyrics with section names
      var lyrics = lyricsAndExplanations.lyrics;
      var explanations = lyricsAndExplanations.explanations;
      console.log("Found lyrics for song [title=%s, main-artist=%s, featuring-artists=%s, producing-artists=%s]",
        lyrics.songTitle, lyrics.mainArtist, lyrics.featuringArtists, lyrics.producingArtists);
      console.log("**** LYRICS *****\n%s", lyrics.getFullLyrics(true));

      //Now we can embed the explanations within the verses
      lyrics.addExplanations(explanations);
      var firstVerses = lyrics.sections[0].verses[0];
      console.log("\nVerses:\n %s \n\n *** This means ***\n%s", firstVerses.content, firstVerses.explanation);
    }
};

var searchCallback = function(err, songs){
  if(err){
    console.log("Error: " + err);
  }else{
    if(songs.length > 0){
      //We have some songs
      rapgeniusClient.searchLyricsAndExplanations(songs[0].link, "rap", lyricsSearchCb);
    }
  }
};

rapgeniusClient.searchSong("Liquid Swords", "rap", searchCallback);

Additional features

I will work on the following features when I get the time:

  • Refactor code base
  • Improve performance

Licence

MIT (Make It Tremendous)

npm loves you