yandex_music 1.2.2 copy "yandex_music: ^1.2.2" to clipboard
yandex_music: ^1.2.2 copied to clipboard

A powerlibrary for accessing Yandex Music API (api.music.yandex.net).

example/lib/example.dart

import 'package:yandex_music/yandex_music.dart';

final String token = 'token';

YandexMusic yandexMusic = YandexMusic(token: token);

void main() async {
  try {
    await yandexMusic.init();
    SearchResult result = await yandexMusic.search.search('i want brek free'); // misspell
    printSearchResultDetails(result);
  } on YandexMusicException catch (e) {
    switch (e.type) {
      case YandexMusicExceptionType.network:
        print('Network error: ${e.message}');
        break;
      case YandexMusicExceptionType.unauthorized:
        print('Token invalid: ${e.code} ${e.message}');
        break;
      case YandexMusicExceptionType.wrongRevision:
        print('Playlist revision mismatch');
        break;
      default:
        print('Other error: ${e.message}');
    }
  }
}

void accountInfo(YandexMusic yandexMusic) async {
  int accountID = await yandexMusic.account.getAccountID();
  // OR another one
  accountID = yandexMusic.accountID;
  // Email
  String email = await yandexMusic.account.getEmail();
  // Account login
  String login = await yandexMusic.account.getLogin();
  // Full username
  String fullName = await yandexMusic.account.getFullName();
  // Account pseudonym
  String displayName = await yandexMusic.account.getDisplayName();
  // Checks if you have a PLUS subscription. False or Null if it doesn't exist.
  bool? plusSubscription = await yandexMusic.account.hasPlusSubscription();

  print('Email: $email');
  print('Login: $login');
  print('Full name: $fullName');
  print('Account ID: $accountID');
  print('Display name: $displayName');
  print('Plus subscription state: $plusSubscription');
}

void trackExamples(YandexMusic yandexMusic) async {
  // Getting track information
  Track track = (await yandexMusic.tracks.getTracks(['330765']))[0];
  print('Track: ${track.title} by ${track.artists.map((a) => a.title).join(', ')}');

  // Downloading a track (MP3 320)
  var bytes = await yandexMusic.tracks.download('330765');
  print('Downloaded ${bytes.length} bytes');

  // Downloading to lossless, medium or low quality
  var losslessBytes = await yandexMusic.tracks.download('330765', quality: AudioQuality.lossless);
  print('Lossless size: ${losslessBytes.length} bytes');

  // Getting lyrics
  Lyrics lyrics = await yandexMusic.tracks.getLyrics('330765');
  print('Lyrics: ${lyrics.downloadUrl}');

  // Similar tracks
  List<Track> similar = await yandexMusic.tracks.getSimilar('330765');
  print('Similar tracks: ${similar.length}');
}


void albumExamples(YandexMusic yandexMusic) async {
  // Receiving the album
  Album album = await yandexMusic.albums.getInformation(3389005);
  print('Album: ${album.title} by ${album.artists.map((a) => a.title).join(', ')}');

  // Several albums
  List<Album> albums = await yandexMusic.albums.getAlbums([3389005]);
  print('Fetched ${albums.length} albums');
}


void playlistExamples(YandexMusic yandexMusic) async {
  // Getting all user playlists
  List<Playlist> playlists = await yandexMusic.playlists.getUsersPlaylists();
  print('User has ${playlists.length} playlists');

  // Create a new playlist
  Playlist newPlaylist = await yandexMusic.playlists.createPlaylist('My Cool Playlist', yandexMusic.playlists.publicPlaylist);
  print('Created playlist: ${newPlaylist.title} (kind: ${newPlaylist.kind})');

  // Adding a track
  await yandexMusic.playlists.insertTrack(newPlaylist.kind, '1234567', '7654321');
  print('Track added');

  // Renaming
  await yandexMusic.playlists.renamePlaylist(newPlaylist.kind, 'Even Cooler Playlist');

  // Removal
  await yandexMusic.playlists.deletePlaylist(newPlaylist.kind);
  print('Playlist deleted');
}


void likeExamples(YandexMusic yandexMusic) async {
  // Like the track
  await yandexMusic.usertracks.like(['330765']);
  print('Track liked');

  // Getting liked tracks
  // ! A list with ShortTrack will only return tracks with their ID.
  // To get all the information, use the getTracks method from the tracks class
  List<ShortTrack> liked = await yandexMusic.usertracks.getLiked();
  print('Liked tracks: ${liked.length}');

  // Dislike
  await yandexMusic.usertracks.unlike(['330765']);
  print('Track unliked');

  // Disliked tracks (rarely used)
  List<dynamic> disliked = await yandexMusic.usertracks.getDisliked();
  print('Disliked tracks: ${disliked.length}');
}

void searchExamples(YandexMusic yandexMusic) async {
  // Search tracks
  List<Track> tracks = await yandexMusic.search.tracks('Pink Floyd');
  print('Found ${tracks.length} tracks');

  // Album Search
  List<Album> albums = await yandexMusic.search.albums('Pink Floyd');
  print('Found ${albums.length} albums');

  // Search for performers
  List<Artist> artists = await yandexMusic.search.artists('Pink Floyd');
  print('Found ${artists.length} artists');

  // Universal search
  var all = await yandexMusic.search.search('Pink Floyd');
  printSearchResultDetails(all);
}

void vibeExamples(YandexMusic yandexMusic) async {
  // Available settings
  List<VibeSetting> settings = await yandexMusic.myVibe.getWaves();
  print('Available vibe settings: ${settings.length}');

  // Creating a Wave
  Wave wave = await yandexMusic.myVibe.createWave(settings.take(2).toList());
  print('Wave created: ${wave.batchId}');

  // Sending feedback
  List<Track> queue = wave.tracks;
  await yandexMusic.myVibe.sendFeedback(
    wave,
    SkipFeedback(
      queue: queue,
      track: wave.tracks[0],
      totalPlayedSeconds: 10.5,
    ),
  );
  print('Skip feedback sent');
}

void uploadExamples(YandexMusic yandexMusic) async {
  // Downloading the file
  File file = File('my_track.mp3');
  String trackId = await yandexMusic.usertracks.uploadUGCTrack(3, file); // 3 = kind of playlist "I like"
  print('Uploaded track ID: $trackId');

  // Renaming
  bool renamed = await yandexMusic.usertracks.renameUGCTrack(trackId, 'My Track', 'Me');
  print('Renamed: $renamed');
}


void printSearchResultDetails(SearchResult searchResult) {
  print('šŸ” Query: ${searchResult.query}');
  print('šŸ”¢ Total: ${searchResult.total}');
  print('šŸ“„ Per Page: ${searchResult.perPage}');
  print('šŸ”š Last Page: ${searchResult.lastPage}');
  print('šŸ”¤ Misspell Corrected: ${searchResult.misspellCorrected}');
  if (searchResult.misspellResult != null) {
    print('šŸ”¤ Suggested: ${searchResult.misspellResult}');
  }

  if (searchResult.bestTrack != null) {
    final t = searchResult.bestTrack!;
    print('\n⭐ BEST TRACK:');
    print('  Title: ${t.title}');
    print('  ID: ${t.id}');
    print('  Real ID: ${t.realId ?? 'N/A'}');
    print('  Duration: ${t.durationMs != null ? '${t.durationMs}s' : 'N/A'}');
    print('  Available: ${t.available ?? false}');
    print('  Source: ${t.trackSource.name}');
    if (t.coverUri != null) {
      print('  Cover (500x500): https://${t.coverUri!.replaceAll('%%', '500x500')}');
    }
    if (t.ogImage != null) {
      print('  OG Image: ${t.ogImage}');
    }
    if (t.artists.isNotEmpty) {
      print('  Artists:');
      for (final artist in t.artists) {
        if (artist is OfficialArtist) {
          print('    - ${artist.title} (ID: ${artist.id}, '
              'various: ${artist.various}, composer: ${artist.composer}, '
              'available: ${artist.available})');
          if (artist.coverUri != null) {
            print('      Cover: https://${artist.coverUri!.replaceAll('%%', '100x100')}');
          }
        }
      }
    }
    if (t.albums.isNotEmpty) {
      print('  Albums:');
      for (final album in t.albums) {
        print('    - ${album.title} (ID: ${album.id}, year: ${album.year}, '
            '${album.trackCount} tracks)');
        print('      Cover: https://${album.coverUri.replaceAll('%%', '300x300')}');
        if (album.likesCount != null) {
          print('      Likes: ${album.likesCount}');
        }
      }
    }
    if (t.matchedTrack != null) {
      print('  āš ļø Matched Track (recognized UGC):');
      print('    Title: ${t.matchedTrack!.title}, ID: ${t.matchedTrack!.id}');
    }
  } else {
    print('\nāŒ No best track.');
  }

  if (searchResult.bestArtist != null) {
    final a = searchResult.bestArtist!;
    print('\n⭐ BEST ARTIST:');
    print('  Name: ${a.name}');
    print('  ID: ${a.id}');
    print('  Likes: ${a.likesCount ?? 'N/A'}');
    print('  Trailer Available: ${a.trailerAvailable ?? 'unknown'}');
    print('  Cover: https://${a.coverUri.replaceAll('%%', '400x400')}');
    print('  Cover Color: #${a.coverColor}');
  } else {
    print('\nāŒ No best artist.');
  }

  if (searchResult.bestAlbum != null) {
    final al = searchResult.bestAlbum!;
    print('\n⭐ BEST ALBUM:');
    print('  Title: ${al.title}');
    print('  ID: ${al.id}');
    print('  Available: ${al.available ?? 'unknown'}');
    print('  Cover: https://${al.coverUri.replaceAll('%%', '500x500')}');
    print('  Cover Color: #${al.coverColor}');
    if (al.contentWarning != null) {
      print('  Content Warning: ${al.contentWarning}');
    }
    if (al.disclaimers != null && al.disclaimers!.isNotEmpty) {
      print('  Disclaimers: ${al.disclaimers!.join(', ')}');
    }
    print('  Artists:');
    for (final artist in al.artists) {
      if (artist is OfficialArtist) {
        print('    - ${artist.name} (ID: ${artist.id})');
      }
    }
  } else {
    print('\nāŒ No best album.');
  }

  if (searchResult.bestConcert != null) {
    final c = searchResult.bestConcert!;
    print('\n⭐ BEST CONCERT:');
    print('  Title: ${c.concertTitle}');
    print('  ID: ${c.id}');
    print('  City: ${c.city}');
    print('  Place: ${c.place}');
    print('  Address: ${c.address}');
    print('  Date & Time: ${c.dateTime}');
    print('  Min Price: ${c.minPrice} ${c.priceCurrencySymbol} (${c.priceCurrency})');
    print('  Afisha URL: ${c.afishaUrl}');
    print('  Image: ${c.imageUrl}');
    print('  Rating: ${c.contentRaiting}');
    if (c.images.isNotEmpty) {
      print('  Extra Images: ${c.images.length} items');
    }
  } else {
    print('\nāŒ No best concert.');
  }

  print('\nšŸŽµ TRACKS LIST (${searchResult.tracks.length}):');
  if (searchResult.tracks.isEmpty) {
    print('  (No tracks)');
  } else {
    for (Track tr in searchResult.tracks) {
      print('${tr.title} ${tr.albums[0].title} ${tr.artists[0].title}');
    }
  }
}
3
likes
140
points
24
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A powerlibrary for accessing Yandex Music API (api.music.yandex.net).

Repository (GitHub)
View/report issues

License

GPL-3.0 (license)

Dependencies

crypto, dio, mime, path, xml

More

Packages that depend on yandex_music