RapGenius-JS

Simple querying API for RapGenius

  • Owner: kenshiro-o/RapGenius-JS
  • Platform:
  • License::
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

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)

Main metrics

Overview
Name With Ownerkenshiro-o/RapGenius-JS
Primary LanguageJavaScript
Program languageJavaScript (Language Count: 2)
Platform
License:
所有者活动
Created At2013-01-18 23:12:29
Pushed At2017-06-22 13:17:56
Last Commit At2017-06-22 14:17:52
Release Count0
用户参与
Stargazers Count124
Watchers Count13
Fork Count18
Commits Count47
Has Issues Enabled
Issues Count5
Issue Open Count1
Pull Requests Count4
Pull Requests Open Count2
Pull Requests Close Count0
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private