All Projects → oknozor → musicbrainz_rs

oknozor / musicbrainz_rs

Licence: MIT License
A wrapper around the musicbrainz API

Programming Languages

rust
11053 projects
shell
77523 projects

Projects that are alternatives of or similar to musicbrainz rs

MusicBrainz
Implementation MusicBrainz API 2.0 (C#)
Stars: ✭ 60 (+252.94%)
Mutual labels:  musicbrainz, musicbrainz-api
Beets
music library manager and MusicBrainz tagger
Stars: ✭ 10,522 (+61794.12%)
Mutual labels:  music-library, musicbrainz
Tauonmusicbox
The Linux desktop music player from the future! 🌆
Stars: ✭ 494 (+2805.88%)
Mutual labels:  music-library, musicbrainz
libdiscid
C library for creating MusicBrainz DiscIDs from audio CDs
Stars: ✭ 39 (+129.41%)
Mutual labels:  musicbrainz
vue-music-player
🎵 basic music player, keeps your favorite musics
Stars: ✭ 77 (+352.94%)
Mutual labels:  music-library
google-music-manager-uploader
Google Music Manager Uploader module / Easily upload MP3 (folder) to Google Music
Stars: ✭ 21 (+23.53%)
Mutual labels:  music-library
Note-Art
🎸 Music Theory in Code.
Stars: ✭ 25 (+47.06%)
Mutual labels:  music-library
I dropped my phone the screen cracked
web audio, cracked.
Stars: ✭ 245 (+1341.18%)
Mutual labels:  music-library
mpdq
Automatic MPD "smart playlist" creator with minimal but hackable setup.
Stars: ✭ 18 (+5.88%)
Mutual labels:  music-library
x-play
🎼 🎶 🎵 🎹 🎻 🎷 🎺 🎸
Stars: ✭ 23 (+35.29%)
Mutual labels:  music-library
odio
A Simple Utility to Download Music (.m4a) From Youtube Links Using Only Clipboard/PasteBoard
Stars: ✭ 32 (+88.24%)
Mutual labels:  music-library
musicbrainz-android
The Official App of MusicBrainz
Stars: ✭ 80 (+370.59%)
Mutual labels:  musicbrainz
Spontini
A text-combined-with-graphic music editor for creating professional scores with LilyPond
Stars: ✭ 43 (+152.94%)
Mutual labels:  music-library
design-system
A Storybook project for UI development of React components for the MetaBrainz projects
Stars: ✭ 19 (+11.76%)
Mutual labels:  musicbrainz
discoverweekly.dev
The playlists made by devs, every Wednesday.
Stars: ✭ 18 (+5.88%)
Mutual labels:  music-library
react-native-track-player
A fully fledged audio module created for music apps. Provides audio playback, external media controls, chromecast support, background mode and more!
Stars: ✭ 2,348 (+13711.76%)
Mutual labels:  music-library
Spotitube
Synchronize your Spotify collections downloading from external providers
Stars: ✭ 250 (+1370.59%)
Mutual labels:  music-library
Userscripts
A collection of scripts that make spending time on the web easy.
Stars: ✭ 52 (+205.88%)
Mutual labels:  musicbrainz
flutter-tunein
Dynamically themed Music Player built with flutter
Stars: ✭ 108 (+535.29%)
Mutual labels:  music-library
digitalmusicstand
web based music sheet viewer (go, pdfjs) as a single binary
Stars: ✭ 22 (+29.41%)
Mutual labels:  music-library

MusicBrainz Rust  

Latest Version Build Status codecov GitHub tag (latest by date) Conventional Commits License

MusicBrainz rust is a utility crate for the the MusicBrainz API.


you may be looking for :

Features

Fetch query

To perform a lookups via fetch queries, you need to import the Fetch trait. This can be done using musicbrainz_rs::prelude

extern crate musicbrainz_rs;

use musicbrainz_rs::entity::artist;
use musicbrainz_rs::entity::artist::*;
use musicbrainz_rs::prelude::*;

fn main() {
    let nirvana = Artist::fetch()
        .id("5b11f4ce-a62d-471e-81fc-a69a8278c7da")
        .execute();

    assert_eq!(nirvana.unwrap().name, "Nirvana".to_string());
}

Include parameters

You can also use includes to get more detail about a resource :

Every Musicbrainz resource has allowed include parameters.

extern crate musicbrainz_rs;

use musicbrainz_rs::entity::label::*;
use musicbrainz_rs::prelude::*;

fn main() {
    let ninja_tune = Label::fetch()
        .id("dc940013-b8a8-4362-a465-291026c04b42")
        .with_tags()
        .with_ratings()
        .execute()
        .unwrap();

    assert!(ninja_tune
        .tags
        .unwrap()
        .iter()
        .any(|tag| tag.name == "independent"));

    assert!(ninja_tune.rating.is_some());
}

CoverArt query

Release and ReleaseGroup entities in MusicBrainz also allow you to make CoverArt queries on them:

extern crate musicbrainz_rs;

use musicbrainz_rs::entity::release::*;
use musicbrainz_rs::entity::CoverartResponse;
use musicbrainz_rs::prelude::*;
use musicbrainz_rs::FetchCoverart;

fn main() {
    // CoverArt Query for a Release.
    let in_utero_coverart = Release::fetch_coverart()
        .id("76df3287-6cda-33eb-8e9a-044b5e15ffdd")
        .execute()
        .expect("Unable to get cover art");

    if let CoverartResponse::Json(coverart) = in_utero_coverart {
        assert!(!coverart.images[0].back);
        assert_eq!(
            coverart.images[0].image,
            "http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/829521842.jpg"
        );
    } else {
        assert!(false);
    }

    let in_utero = Release::fetch()
        .id("76df3287-6cda-33eb-8e9a-044b5e15ffdd")
        .execute()
        .expect("Unable to get release");

    // Calling `get_coverart()` method on an already fetched Release entity.
    let in_utero_coverart = in_utero
        .get_coverart()
        .execute()
        .expect("Unable to get coverart");

    if let CoverartResponse::Json(coverart) = in_utero_coverart {
        assert!(!coverart.images[0].back);
        assert_eq!(
            coverart.images[0].image,
            "http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd/829521842.jpg"
        );
    } else {
        assert!(false);
    }

    // CoverArt Query Builder to fetch a specific resource.
    let in_utero_500px_front_coverart = Release::fetch_coverart()
        .id("76df3287-6cda-33eb-8e9a-044b5e15ffdd")
        .res_500()
        .back()
        .execute()
        .expect("Unable to get cover art");

    if let CoverartResponse::Url(coverart_url) = in_utero_500px_front_coverart {
        println!("{}", coverart_url);
    } else {
        assert!(false);
    }
}

Browse query

Use musicbrainz_rs::Browse or bring it in scope using musicbrainz_rs::prelude to perform a browse query. Just like Include every muscibrainz resource has allowable linked entities for such queries.

extern crate musicbrainz_rs;

use musicbrainz_rs::entity::artist;
use musicbrainz_rs::entity::artist::Artist;
use musicbrainz_rs::prelude::*;

fn main() {
    let artists_on_in_utero_release = Artist::browse()
        .by_release("18d4e9b4-9247-4b44-914a-8ddec3502103")
        .execute();

    let artists_on_in_utero_release = artists_on_in_utero_release.unwrap();

    artists_on_in_utero_release
        .entities
        .iter()
        .for_each(|artist| println!("{:?}", artist.name));
}

Search query

Use musicbrainz_rs::Search to perform a search query.

extern crate musicbrainz_rs;

use musicbrainz_rs::entity::artist::Artist;
use musicbrainz_rs::prelude::*;

fn main() {
    musicbrainz_rs::config::set_user_agent("my_awesome_app/1.0");

    let query = Artist::query_builder()
        .artist("Miles Davis")
        .and()
        .country("US")
        .build();

    let query_result = Artist::search(query).execute().unwrap();
    let query_result: Vec<String> = query_result.entities
        .iter()
        .map(|artist| artist.name.clone()).collect();

    assert!(query_result.contains(&"Miles Davis".to_string()));
    assert!(query_result.contains(&"Miles Davis Quintet".to_string()));
}

Custom user agent

You can set your application user-agent as recommended in the musicbrainz documentation :

extern crate musicbrainz_rs;

use musicbrainz_rs::entity::artist::Artist;
use musicbrainz_rs::prelude::*;

fn main() {
    musicbrainz_rs::config::set_user_agent("my_awesome_app/1.0");

    let nirvana = Artist::fetch()
        .id("5b11f4ce-a62d-471e-81fc-a69a8278c7da")
        .execute();

    assert_eq!(nirvana.unwrap().name, "Nirvana".to_string());
}

Examples

To see what is currently implemented in the crate you can look at the tests directory.

You can run examples with cargo run --example example_name

Contributing

All contributions are welcome, if find a bug or have a feature request don't hesitate to open an issue!

Credits

Most of this crate documentation is taken from the official MusicBrainz doc, thanks to the MetaBrainz Foundation and its sponsors and supporters. Cover Art provided by the Cover Art Archive.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].