Simple querying API for RapGenius
JavaScript Makefile
Latest commit 2adcfa7 Jul 4, 2015 @kenshiro-o Merge pull request #8 from brandly/patch-1
Update URLs to "genius.com" and fix tests
Permalink
Failed to load latest commit information.
examples
src fix selector for featured artists Nov 30, 2014
test
.gitignore Commit of JS files Jan 18, 2013
.npmignore It is now possible to obtain lyrics from a song link. Jan 27, 2013
.travis.yml
History.md Fixed broken tests Jun 28, 2014
Makefile
README.md Puts installation in code block Jun 30, 2014
package.json jk here is how you actually specify a node version Nov 30, 2014

README.md

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 does 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)