Skip to main content

Python API for vgmusic.com.

Project description

vgmusic.py

Code style: black PyPI - Downloads PyPI - License PyPI PyPI - Python Version Lines of code

(unofficial) Python API for VGMusic. This project is in no way affiliated with or sponsered by Mike Newman or any of the staff at VGMusic.

Usage

Thoughout these examples, we will be using the API object as the api:

import vgmusic

api = vgmusic.API()

It is recommended to close it once you are done:

# do something here...
api.close()

The best way is to use a context manager, a.k.a with statement:

with vgmusic.API() as api:
    # do something here

Note that the API is lazy: It will only retrieve data for a console/system the first time it is queried for it. To override this behaviour, use force_cache (see Module Documentation).

Backends

The API has two backends: dictionary-like (access from Python code) and a REST-based web interface (through Flask, from elsewhere) (WIP). You can also use it from the command-line.

Dictionary/Key

To query songs, you have to provide the name of the system/catagory and the game title:

songs = api["Sony PlayStation 4"]["titles"]["Persona 5"]

You can manipulate the API using standard dictionary methods:

# list all titles for a system
titles = list(api["Nintendo Switch"].keys())  # ['Sonic Mania'], as of 5/1/2021
# count how many songs in total
total = sum(len(songs) for songs in api["Nintendo Switch"]["titles"].values())  # 12, as of 5/1/2021

Anything you can do with a dictionary, it's basically possible with this API.

API index format (all URLs are absolute):

// Any keys starting with '$' are variable.
{
    // The system's name
    "$system_name": {
        // The system's url, i.e https://www.vgmusic.com/music/console/sony/ps4/
        "url": ...,
        // The section's name, i.e Sony
        "section": ...,
        // All the titles available for this system
        "titles": {
            // The game's name.
            "$game_name": [
                // The direct url to the song's MIDI file
                "song_url": ...,
                // The song's title
                "song_title": ...,
                // The song's file size, in bytes (as an int)
                "file_size": ...,
                // Who sequenced the midi
                "sequenced_by": ...,
                // url to comments
                "comments_url": ...,
            ]
        },
        // When the system's page was last updated (as a Unix timestamp as int)
        "last_updated": ...,
        // Used to track page revisions
        "_etag": ...,
        // Version of the VGMusic indexer.
        "indexer_version": ...
    }
}

CLI

Install the CLI first:

pip install vgmusic[cli]

And then run with

vgmusic

On first run, it might take a while to initally cache all the systems. Maybe grab a cup of tea or two.

Once parsing is done, it will download all the MIDI files by default.

To fliter out songs using regex, use the -s/--search option:

vgmusic -s "Sony PlayStation \d::Persona \d::.*"

This downloads all songs from the system Sony PlayStation \d and the game Persona \d which has any name.

-s/--search maps directly to API.search_by_regex().

Help is always useful:

vgmusic --help

REST/Flask

NOTE: This is WIP, it has not been finished yet. Make sure you have installed the Flask extension:

pip install vgmusic[REST]

License

MIT.

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

vgmusic-0.1.1a3.tar.gz (10.2 kB view hashes)

Uploaded Source

Built Distribution

vgmusic-0.1.1a3-py3-none-any.whl (10.7 kB view hashes)

Uploaded Python 3

Supported by

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