diff options
Diffstat (limited to 'lib/network/music_api.dart')
-rw-r--r-- | lib/network/music_api.dart | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/network/music_api.dart b/lib/network/music_api.dart new file mode 100644 index 0000000..490c51d --- /dev/null +++ b/lib/network/music_api.dart @@ -0,0 +1,32 @@ +import 'dart:convert'; + +import 'package:http/http.dart' as http; +import 'package:pmsna1/models/album.dart'; +import 'package:pmsna1/models/artist.dart'; + +class MusicApi { + Uri artistUri(String artistId) => Uri.parse( + 'https://musicbrainz.org/ws/2/artist/$artistId?inc=release-groups&fmt=json'); + + Uri releaseGroupUri(String releaseGroupId) => Uri.parse( + 'https://musicbrainz.org/ws/2/release-group/$releaseGroupId?inc=artists&fmt=json'); + + Future<List<Album>?> getAlvvaysAlbums() async { + String id = '99450990-b24e-4132-bb68-235f8c3e2564'; + http.Response result = await http.get(artistUri(id)); + var list = jsonDecode(result.body)['release-groups'] as List; + if (result.statusCode != 200) { + return null; + } + return list.map((map) => Album.fromMap(map)).toList(); + } + + Future<List<Artist>?> getAlbumArtists(String id) async { + http.Response result = await http.get(releaseGroupUri(id)); + var list = jsonDecode(result.body)['artist-credit'] as List; + if (result.statusCode != 200) { + return null; + } + return list.map((map) => Artist.fromMap(map["artist"])).toList(); + } +} |