Skip to main content

Plugin for beets (http://beets.io) to replace stock beatport plugin which is not yet compatible with Beatport API v4.

Project description

http://img.shields.io/pypi/v/beets-beatport4.svg

Plugin for beets to replace stock beatport plugin and use Beatport API v4 as an autotagger source.

As Beatport had killed their API v3, the stock beatport plugin does not work anymore. It is also currently not possible to request the access to the API “normal” way (by using your client credentials or API token generated by Beatport), so I have found workaround that uses public API client id used for Beatport docs frontend and updated the code to use the new specification.

For more info, see the discussion on this issue: https://github.com/beetbox/beets/issues/3862

I have also opened a pull request in the official beets repository (https://github.com/beetbox/beets/pull/4477), so if it gets merged, I am probably going to take down this plugin.

Installation

Install this plugin with

$ pip install beets-beatport4

and add beatport4 to the plugins list in your beets config file.

Beatport Authorization

There are two ways of acquiring user access token to the Beatport v4 API using this plugin.

Method 1: username and password

This method is fully automatic and relies on holding your Beatport username and password inside your beets config file. It will authorize to the Beatport API using authorization_code grant type and client_id provided by beatport for the sake of their swagger-ui frontend in which you can test their API: https://api.beatport.com/v4/docs/ By default, client_id is scrapped automatically from the above URL. Alternatively, you can also pass it via plugin configuration.

Steps:

  1. Add beatport4 plugin to your beets/config.yaml plugins list

  2. Add below configuration and fill your credentials

beatport4:
    art: yes
    art_overwrite: no
    username: <YOUR_BEATPORT_USERNAME>
    password: <YOUR_BEATPORT_PASSWORD>

Method 2. copy token from the browser

You will probably want to use this method if you don’t want to store your credentials unencrypted within the config file. Also, it will be helpful if for any reason something goes wrong during the username/password authorization process.

This is also a fallback method if you provide wrong credentials in the config.

Steps:

  1. Add beatport4 plugin to your beets/config.yaml plugins list

  2. When the first import with plugin enabled happens, you will be prompted to paste the access token JSON

  3. Visit https://api.beatport.com/v4/docs/

  4. Open Network tab in your browser and start capturing the traffic

  5. Login with your Beatport account

  6. Search for the following request: https://api.beatport.com/v4/auth/o/token/

  7. Copy the response (whole JSON structure)

  8. Paste it to the terminal (or beatport_token.json file next to your beets/config.yaml - you can check the path by running beet config --paths command)

  9. If the token expires, you will be prompted again and required to repeat above steps

Fetching and embedding an art

Additionally, this plugin has implemented separate art fetching and embedding. Unlike fetchart plugin, it handles both singletons, but it will not work if you choose candidate source other than Beatport. Also, it does not require enabling fetchart or embedart plugins, as it uses beets.art module shipped with the core library.

Under the hood, it uses image URL for the track’s release, exposed by the Beatport API.

You can enable this feature via configuration (it is disabled by default):

beatport4:
    art: yes

By default, if a track already contains an art, it will not be overwritten. Again, you can force such behaviour via configuration:

beatport4:
    art: yes
    art_overwrite: yes

Image size

Original images from Beatport might have big resolution and size, but thanks to Beatport’s dynamic image URIs, it is possible to fetch image already resized by Beatport backend, saving the bandwidth and resources on resizing images locally. To specify the dynamic width and height, just pass it via configuration:

beatport4:
    art: yes
    art_width: 250 # don't specify or 0 to disable
    art_height: 250 # don't specify or 0 to disable
  • if you specify just one dimension, the other will be set to the same value, so the aspect ratio is 1:1

  • if you don’t specify any dimension, original art will be downloaded

  • if you specify both dimensions, they will be used in the dynamic URI, but they usually (always?) return images in 1:1 aspect ratio using lower dimension anyway

Plugin configuration

beatport4:
    art: no
    art_overwrite: no
    art_width: <WIDTH_PX>
    art_height: <HEIGHT_PX>
    username: <YOUR_BEATPORT_USERNAME>
    password: <YOUR_BEATPORT_PASSWORD>
    client_id: <BEATPORT_API_CLIENT_ID> # optional, you can set it, but it should be scrapped automatically from the docs

Apart from the above, plugin should work exactly the same way as the stock one, so please refer to the official documentation

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

beets-beatport4-0.3.4.tar.gz (11.8 kB view details)

Uploaded Source

Built Distribution

beets_beatport4-0.3.4-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file beets-beatport4-0.3.4.tar.gz.

File metadata

  • Download URL: beets-beatport4-0.3.4.tar.gz
  • Upload date:
  • Size: 11.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for beets-beatport4-0.3.4.tar.gz
Algorithm Hash digest
SHA256 82cb784efe1c2d51ed0b05fce5e1314f5719070d45a4dbfb5e339ed5eaa56bf1
MD5 85ebcf066ce0d7c7599d3168b0b3d8ca
BLAKE2b-256 d37f50caf9168e89009811afdda92eca5a2faba1a2b475b0d051300c099c3228

See more details on using hashes here.

File details

Details for the file beets_beatport4-0.3.4-py3-none-any.whl.

File metadata

File hashes

Hashes for beets_beatport4-0.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 261839f49378ae2064dec2fa1ac18e506f94cc744534a1444eb3b0dc32ddadb0
MD5 fdcf5a6e2ab9930837cb58f4a06e05c3
BLAKE2b-256 40c059b015b995fcf45e1316a6f6fbcb4c5cc6b9adf08b3242f83bc1789aedfa

See more details on using hashes here.

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