# LyricsGenius: a Python client for the Genius.com API
[![Build Status](https://travis-ci.org/johnwmillr/LyricsGenius.svg?branch=master)](https://travis-ci.org/johnwmillr/LyricsGenius)
[![Documentation Status](https://readthedocs.org/projects/lyricsgenius/badge/?version=master)](https://lyricsgenius.readthedocs.io/en/latest/?badge=master)
[![PyPI version](https://badge.fury.io/py/lyricsgenius.svg)](https://pypi.org/project/lyricsgenius/)
[![Python version](https://img.shields.io/badge/python-3.x-brightgreen.svg)](https://pypi.org/project/lyricsgenius/)
[![Donate](https://img.shields.io/badge/Support%20this%20project-grey.svg?logo=github%20sponsors)](https://github.com/sponsors/johnwmillr)
`lyricsgenius` provides a simple interface to the song, artist, and lyrics data stored on [Genius.com](https://www.genius.com).
The full documentation for `lyricsgenius` is available online at [Read the Docs](https://lyricsgenius.readthedocs.io/en/master/).
## Setup
Before using this package you'll need to sign up for a (free) account that authorizes access to [the Genius API](http://genius.com/api-clients). The Genius account provides a `access_token` that is required by the package. See the [Usage section](https://github.com/johnwmillr/LyricsGenius#usage) below for examples.
## Installation
`lyricsgenius` requires Python 3.
Use `pip` to install the package from PyPI:
```bash
pip install lyricsgenius
```
Or, install the latest version of the package from GitHub:
```bash
pip install git+https://github.com/johnwmillr/LyricsGenius.git
```
## Usage
Import the package and initiate Genius:
```python
import lyricsgenius
genius = lyricsgenius.Genius(token)
```
If you don't pass a token to the `Genius` class, `lyricsgenus` will look for an environment variable called `GENIUS_ACCESS_TOKEN` and attempt to use that for authentication.
```python
genius = Genius()
```
Search for songs by a given artist:
```python
artist = genius.search_artist("Andy Shauf", max_songs=3, sort="title")
print(artist.songs)
```
By default, the `search_artist()` only returns songs where the given artist is the primary artist.
However, there may be instances where it is desirable to get all of the songs that the artist appears on.
You can do this by setting the `include_features` argument to `True`.
```python
artist = genius.search_artist("Andy Shauf", max_songs=3, sort="title", include_features=True)
print(artist.songs)
```
Search for a single song by the same artist:
```python
song = artist.song("To You")
# or:
# song = genius.search_song("To You", artist.name)
print(song.lyrics)
```
Add the song to the artist object:
```python
artist.add_song(song)
# the Artist object also accepts song names:
# artist.add_song("To You")
```
Save the artist's songs to a JSON file:
```python
artist.save_lyrics()
```
Searching for an album and saving it:
```python
album = genius.search_album("The Party", "Andy Shauf")
album.save_lyrics()
```
There are various options configurable as parameters within the `Genius` class:
```python
genius.verbose = False # Turn off status messages
genius.remove_section_headers = True # Remove section headers (e.g. [Chorus]) from lyrics when searching
genius.skip_non_songs = False # Include hits thought to be non-songs (e.g. track lists)
genius.excluded_terms = ["(Remix)", "(Live)"] # Exclude songs with these words in their title
```
You can also call the package from the command line:
```bash
export GENIUS_ACCESS_TOKEN="my_access_token_here"
python3 -m lyricsgenius --help
```
Search for and save lyrics to a given song and album:
```bash
python3 -m lyricsgenius song "Begin Again" "Andy Shauf" --save
python3 -m lyricsgenius album "The Party" "Andy Shauf" --save
```
Search for five songs by 'The Beatles' and save the lyrics:
```bash
python3 -m lyricsgenius artist "The Beatles" --max-songs 5 --save
```
## Example projects
- [Trucks and Beer: A textual analysis of popular country music](http://www.johnwmillr.com/trucks-and-beer/)
- [Neural machine translation: Explaining the Meaning Behind Lyrics](https://github.com/tsandefer/dsi_capstone_3)
- [What makes some blink-182 songs more popular than others?](http://jdaytn.com/posts/download-blink-182-data/)
- [Sentiment analysis on hip-hop lyrics](https://github.com/Hugo-Nattagh/2017-Hip-Hop)
- [Does Country Music Drink More Than Other Genres?](https://towardsdatascience.com/does-country-music-drink-more-than-other-genres-a21db901940b)
- [49 Years of Lyrics: Why So Angry?](https://towardsdatascience.com/49-years-of-lyrics-why-so-angry-1adf0a3fa2b4)
## Contributing
Please contribute! If you want to fix a bug, suggest improvements, or add new features to the project, just [open an issue](https://github.com/johnwmillr/LyricsGenius/issues) or send me a pull request.
Raw data
{
"_id": null,
"home_page": "https://github.com/johnwmillr/lyricsgenius",
"name": "lyricsgenius",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "genius api genius-api music lyrics artists albums songs",
"author": "John W. Miller",
"author_email": "john.w.millr+lg@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/d5/a0/e7b84192aebf36cace6ee9d063293fc8f48e8f742343fd0ab9bc7ea14986/lyricsgenius-3.2.0.tar.gz",
"platform": null,
"description": "# LyricsGenius: a Python client for the Genius.com API\n[![Build Status](https://travis-ci.org/johnwmillr/LyricsGenius.svg?branch=master)](https://travis-ci.org/johnwmillr/LyricsGenius)\n[![Documentation Status](https://readthedocs.org/projects/lyricsgenius/badge/?version=master)](https://lyricsgenius.readthedocs.io/en/latest/?badge=master)\n[![PyPI version](https://badge.fury.io/py/lyricsgenius.svg)](https://pypi.org/project/lyricsgenius/)\n[![Python version](https://img.shields.io/badge/python-3.x-brightgreen.svg)](https://pypi.org/project/lyricsgenius/)\n[![Donate](https://img.shields.io/badge/Support%20this%20project-grey.svg?logo=github%20sponsors)](https://github.com/sponsors/johnwmillr)\n\n`lyricsgenius` provides a simple interface to the song, artist, and lyrics data stored on [Genius.com](https://www.genius.com).\n\nThe full documentation for `lyricsgenius` is available online at [Read the Docs](https://lyricsgenius.readthedocs.io/en/master/).\n\n## Setup\nBefore using this package you'll need to sign up for a (free) account that authorizes access to [the Genius API](http://genius.com/api-clients). The Genius account provides a `access_token` that is required by the package. See the [Usage section](https://github.com/johnwmillr/LyricsGenius#usage) below for examples.\n\n## Installation\n`lyricsgenius` requires Python 3.\n\nUse `pip` to install the package from PyPI:\n\n```bash\npip install lyricsgenius\n```\n\nOr, install the latest version of the package from GitHub:\n\n```bash\npip install git+https://github.com/johnwmillr/LyricsGenius.git\n```\n\n## Usage\nImport the package and initiate Genius:\n\n```python\nimport lyricsgenius\ngenius = lyricsgenius.Genius(token)\n```\n\nIf you don't pass a token to the `Genius` class, `lyricsgenus` will look for an environment variable called `GENIUS_ACCESS_TOKEN` and attempt to use that for authentication.\n\n```python\ngenius = Genius()\n```\n\nSearch for songs by a given artist:\n\n```python\nartist = genius.search_artist(\"Andy Shauf\", max_songs=3, sort=\"title\")\nprint(artist.songs)\n```\nBy default, the `search_artist()` only returns songs where the given artist is the primary artist.\nHowever, there may be instances where it is desirable to get all of the songs that the artist appears on.\nYou can do this by setting the `include_features` argument to `True`.\n\n```python\nartist = genius.search_artist(\"Andy Shauf\", max_songs=3, sort=\"title\", include_features=True)\nprint(artist.songs)\n```\n\nSearch for a single song by the same artist:\n\n```python\nsong = artist.song(\"To You\")\n# or:\n# song = genius.search_song(\"To You\", artist.name)\nprint(song.lyrics)\n```\n\nAdd the song to the artist object:\n\n```python\nartist.add_song(song)\n# the Artist object also accepts song names:\n# artist.add_song(\"To You\")\n```\n\nSave the artist's songs to a JSON file:\n\n```python\nartist.save_lyrics()\n```\n\nSearching for an album and saving it:\n\n```python\nalbum = genius.search_album(\"The Party\", \"Andy Shauf\")\nalbum.save_lyrics()\n```\n\nThere are various options configurable as parameters within the `Genius` class:\n\n```python\ngenius.verbose = False # Turn off status messages\ngenius.remove_section_headers = True # Remove section headers (e.g. [Chorus]) from lyrics when searching\ngenius.skip_non_songs = False # Include hits thought to be non-songs (e.g. track lists)\ngenius.excluded_terms = [\"(Remix)\", \"(Live)\"] # Exclude songs with these words in their title\n```\n\nYou can also call the package from the command line:\n\n```bash\nexport GENIUS_ACCESS_TOKEN=\"my_access_token_here\"\npython3 -m lyricsgenius --help\n```\n\nSearch for and save lyrics to a given song and album:\n\n```bash\npython3 -m lyricsgenius song \"Begin Again\" \"Andy Shauf\" --save\npython3 -m lyricsgenius album \"The Party\" \"Andy Shauf\" --save\n```\n\nSearch for five songs by 'The Beatles' and save the lyrics:\n\n```bash\npython3 -m lyricsgenius artist \"The Beatles\" --max-songs 5 --save\n```\n\n## Example projects\n\n - [Trucks and Beer: A textual analysis of popular country music](http://www.johnwmillr.com/trucks-and-beer/)\n - [Neural machine translation: Explaining the Meaning Behind Lyrics](https://github.com/tsandefer/dsi_capstone_3)\n - [What makes some blink-182 songs more popular than others?](http://jdaytn.com/posts/download-blink-182-data/)\n - [Sentiment analysis on hip-hop lyrics](https://github.com/Hugo-Nattagh/2017-Hip-Hop)\n - [Does Country Music Drink More Than Other Genres?](https://towardsdatascience.com/does-country-music-drink-more-than-other-genres-a21db901940b)\n - [49 Years of Lyrics: Why So Angry?](https://towardsdatascience.com/49-years-of-lyrics-why-so-angry-1adf0a3fa2b4)\n\n## Contributing\nPlease contribute! If you want to fix a bug, suggest improvements, or add new features to the project, just [open an issue](https://github.com/johnwmillr/LyricsGenius/issues) or send me a pull request.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Download lyrics and metadata from Genius.com",
"version": "3.2.0",
"project_urls": {
"Homepage": "https://github.com/johnwmillr/lyricsgenius"
},
"split_keywords": [
"genius",
"api",
"genius-api",
"music",
"lyrics",
"artists",
"albums",
"songs"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "ccad74a447e5946a16d38968139e2fd8945ff415ba49191884c09f273968b5c9",
"md5": "ed6fdd431c42ffe05d4e6ca98ad372b0",
"sha256": "84fe8dff973ec85182d023bc3b86fb1b8432c2ed8c2bb99dbb64ced7d14c389b"
},
"downloads": -1,
"filename": "lyricsgenius-3.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ed6fdd431c42ffe05d4e6ca98ad372b0",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 45051,
"upload_time": "2024-12-22T03:34:19",
"upload_time_iso_8601": "2024-12-22T03:34:19.472750Z",
"url": "https://files.pythonhosted.org/packages/cc/ad/74a447e5946a16d38968139e2fd8945ff415ba49191884c09f273968b5c9/lyricsgenius-3.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d5a0e7b84192aebf36cace6ee9d063293fc8f48e8f742343fd0ab9bc7ea14986",
"md5": "e70bbb5ffe7405c058a084b1f2c8bf90",
"sha256": "5ab7f117259fdb75563138fd423a2905a512f1381b384f063558d41908b2a12e"
},
"downloads": -1,
"filename": "lyricsgenius-3.2.0.tar.gz",
"has_sig": false,
"md5_digest": "e70bbb5ffe7405c058a084b1f2c8bf90",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 40825,
"upload_time": "2024-12-22T03:34:23",
"upload_time_iso_8601": "2024-12-22T03:34:23.708401Z",
"url": "https://files.pythonhosted.org/packages/d5/a0/e7b84192aebf36cace6ee9d063293fc8f48e8f742343fd0ab9bc7ea14986/lyricsgenius-3.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-22 03:34:23",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "johnwmillr",
"github_project": "lyricsgenius",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "lyricsgenius"
}