Skip to main content

An unofficial Gaana API wrapper

Project description

🎶 GaanaPy

GaanaPy is an unofficial JSON API for Gaana, an Indian music streaming service.

📖 Table Of Contents

🎧 Features

The API provides structured JSON responses for:

  • Tracks – Search and retrieve details for specific tracks.
  • Albums – Search and fetch album information.
  • Artists – Search, view artist details, and find similar artists.
  • Playlists – Retrieve playlist details (search not supported).
  • Top Charts – Curated playlists across all languages.
  • Trending Tracks – Per-language trends.
  • New Releases – Latest music by language.

Example Track Response

[
  {
    "seokey": "tyler-herro",
    "album_seokey": "tyler-herro",
    "track_id": "32408795",
    "title": "Tyler Herro",
    "artists": "Jack Harlow",
    "artist_seokeys": "jack-harlow",
    "artist_ids": "817522",
    "artist_image": "https://a10.gaanacdn.com/gn_img/artists/XYybzrb2gz/Yybzn4Bgb2/size_m_1607927137.webp",
    "album": "Tyler Herro",
    "album_id": "3487503",
    "duration": "156",
    "popularity": "18444~18444",
    "genres": "Hip Hop",
    "is_explicit": true,
    "language": "English",
    "label": "Generation Now/Atlantic",
    "release_date": "2020-10-22",
    "play_count": "<100K",
    "favorite_count": 231,
    "song_url": "https://gaana.com/song/tyler-herro",
    "album_url": "https://gaana.com/album/tyler-herro",
    "images": {
      "urls": {
        "large_artwork": "https://a10.gaanacdn.com/gn_img/albums/4Z9bqo3yQn/Z9bq2AG1Ky/size_l.jpg",
        "medium_artwork": "https://a10.gaanacdn.com/gn_img/albums/4Z9bqo3yQn/Z9bq2AG1Ky/size_m.jpg",
        "small_artwork": "https://a10.gaanacdn.com/gn_img/albums/4Z9bqo3yQn/Z9bq2AG1Ky/size_s.jpg"
      }
    },
    "stream_urls": {
      "urls": {
        "very_high_quality": "https://vodhlsgaana-ebw.akamaized.net/hls/3/3487503/32408795/320.mp4.master.m3u8?hdnts=st=1750835850~exp=1750850250~acl=/*~hmac=ebd312837a89763eb967627048071b22ee619be14219ff402143d023c50cf7bb",
        "high_quality": "https://vodhlsgaana-ebw.akamaized.net/hls/3/3487503/32408795/128.mp4.master.m3u8?hdnts=st=1750835850~exp=1750850250~acl=/*~hmac=ebd312837a89763eb967627048071b22ee619be14219ff402143d023c50cf7bb",
        "medium_quality": "https://vodhlsgaana-ebw.akamaized.net/hls/3/3487503/32408795/64.mp4.master.m3u8?hdnts=st=1750835850~exp=1750850250~acl=/*~hmac=ebd312837a89763eb967627048071b22ee619be14219ff402143d023c50cf7bb",
        "low_quality": "https://vodhlsgaana-ebw.akamaized.net/hls/3/3487503/32408795/16.mp4.master.m3u8?hdnts=st=1750835850~exp=1750850250~acl=/*~hmac=ebd312837a89763eb967627048071b22ee619be14219ff402143d023c50cf7bb"
      }
    }
  }
]

👨‍🔧 Usage

API documentation (when running locally): http://127.0.0.1:8000/docs

Search For Songs: (Requires a search query, limit is optional)

http://127.0.0.1:8000/songs/search?query=<insert-query-here>&limit=<insert-limit-here, eg. 5>

Example: Create a GET request or navigate to http://127.0.0.1:8000/songs/search?query=tyler herro to get a JSON response of song results in return.


Search For Albums: (Requires a search query, limit is optional)

http://127.0.0.1:8000/albums/search?query=<insert-query-here>&limit=<insert-limit-here, eg. 5>

Example: Create a GET request or navigate to http://127.0.0.1:8000/albums/search?query=all over the place to get a JSON response of album results in return.


Search For Artists: (Requires a search query, limit is optional)

http://127.0.0.1:8000/artists/search?query=<insert-query-here>&limit=<insert-limit-here, eg. 5>

Example: Create a GET request or navigate to http://127.0.0.1:8000/artists/search?query=KSI to get a JSON response of artist results in return.


Get Similar Artists: (Requires an Artist ID)

http://127.0.0.1:8000/artists/similar?artist_id=ARTIST_ID

How do I find an artist's ID?:

[
  {
    "artist_ids": "817522", (There may be more than 1 artist ID depending on the number of artists in the song/album.) 
  }
]

Example: Create a GET request or navigate to http://127.0.0.1:8000/artists/similar?artist_id=817522 to get a JSON response of similar artists in return.


Get Song Info: (Requires a SEOKEY)

http://127.0.0.1:8000/songs/info?seokey=SEOKEY

How do I find a song's seokey?:

  • In a URL, for example, https://gaana.com/song/tyler-herro, tyler-herro is the song's seokey.
  • Using Search For Songs, locate:
[
  {
    "seokey": "tyler-herro", 
  }
]

Example: Create a GET request or navigate to http://127.0.0.1:8000/songs/info?seokey=tyler-herro to get a JSON response of the song's info in return.


Get Album Info: (Requires a SEOKEY)

http://127.0.0.1:8000/albums/info?seokey=ALBUM_SEOKEY

How do I find an albums's seokey?:

  • In a URL, for example, https://gaana.com/album/tyler-herro, tyler-herro is the albums's seokey.
  • Using Search For Albums, locate:
[
  {
    "seokey": "tyler-herro", 
  }
]
[
  {
    "album_seokey": "tyler-herro", 
  }
]

Example: Create a GET request or navigate to http://127.0.0.1:8000/albums/info?seokey=tyler-herro to get a JSON response of the album's info in return.


Get Artist Info: (Requires a SEOKEY)

http://127.0.0.1:8000/artists/info?seokey=SEOKEY

How do I find an artist's seokey?:

[
  {
    "artist_seokeys": "jack-harlow", (There may be more than 1 seokey depending on the number of artists in the song/album.) 
  }
]

Example: Create a GET request or navigate to http://127.0.0.1:8000/artists/info?seokey=jack-harlow to get a JSON response of the artist's info in return.


Get Playlist Info: (Requires a SEOKEY)

http://127.0.0.1:8000/playlists/info?seokey=SEOKEY

How do I find a playlists's seokey?:

  • In a URL, for example, https://gaana.com/playlist/gaana-dj-gaana-international-top-50, gaana-dj-gaana-international-top-50 is the playlist's seokey.

Example: Create a GET request or navigate to http://127.0.0.1:8000/playlists/info?seokey=gaana-dj-gaana-international-top-50 to get a JSON response of the playlist's info in return.


Get Trending Tracks: (Requires a LANGUAGE)

http://127.0.0.1:8000/trending?lang=LANGUAGE

Language Options: English, Hindi, Punjabi, Telugu, Tamil etc. (Warning: Case sensitive!). Defaults to Hindi if no language is provided or if an invalid language is entered.

Example: Create a GET request or navigate to http://127.0.0.1:8000/trending?lang=English to get a JSON response of the trending English songs in return.


Get New Releases: (Requires a language)

http://127.0.0.1:8000/newreleases?lang=LANGUAGE

Language Options: English, Hindi, Punjabi, Telugu, Tamil etc. (Warning: Case sensitive!). Defaults to Hindi if no language is provided or if an invalid language is entered.

Example: Create a GET request or navigate to http://127.0.0.1:8000/newreleases?lang=English to get a JSON response of both new English songs and English albums in return.


Get Charts (Returns a list of popular playlists):

http://127.0.0.1:8000/charts

Example: Create a GET request or navigate to http://127.0.0.1:8000/charts to get a JSON response of the top charts.

📦 Installation

You can install GaanaPy directly via pip:

pip install gaanapy

👨‍🔧 Local Development & Usage

1. Run the API Server

After installation, you can launch the API server using the built-in command:

gaanapy-api --host 127.0.0.1 --port 8000

Alternatively, from the source directory:

python3 -m uvicorn gaanapy.app:app --reload

2. Using as a Library

You can also integrate GaanaPy into your own Python applications:

import asyncio
from gaanapy import GaanaPy

async def main():
    gaana = GaanaPy()
    results = await gaana.search_songs("Tyler Herro", limit=5)
    print(results)
    await gaana.aiohttp.close()

if __name__ == "__main__":
    asyncio.run(main())

Navigate to: http://127.0.0.1:8000/docs to see the full API documentation after starting the server.

🐳 Docker Deployment

Deploy the API locally using the following Docker-Compose stack:

services:
  gaanapy:
    image: zingytomato/gaanapy:main
    container_name: gaanapy
    ports:
      - 8000:8000 # External port can be changed
    restart: unless-stopped

Navigate to: http://SERVER_IP:8000 to get started.

🏥 Contributing

Feel free to create an issue if you encounter any bugs or would like to suggest something!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gaanapy-0.1.0.tar.gz (27.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gaanapy-0.1.0-py3-none-any.whl (27.0 kB view details)

Uploaded Python 3

File details

Details for the file gaanapy-0.1.0.tar.gz.

File metadata

  • Download URL: gaanapy-0.1.0.tar.gz
  • Upload date:
  • Size: 27.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for gaanapy-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a5d047d4cbc70e25618688277240ea64419462e6ccb17994b8694cda6b66400e
MD5 0cb13da31498ae56fee87ff767b33604
BLAKE2b-256 99d4637425fe7257d65d9822fe53e26c41e50eb9f0f75171c4fb4bc2be7a46a3

See more details on using hashes here.

File details

Details for the file gaanapy-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: gaanapy-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 27.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for gaanapy-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 17683f6e2b172d37108a0dabd7e18497ff21d8ae951ca3e495d8085f38aa2074
MD5 3336bdbc83cca5d10b88432bca54cd4a
BLAKE2b-256 a6f41c81f69e7380f3c24cf6fc76b6eb92b695c7377e86561c25b782ff0ea6bd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page