├── lambda_console
├── getTest.json
├── createTest.json
├── get.js
└── create.js
├── static-site
├── error.html
├── main.css
├── index.html
└── formlogic.js
└── dynamodb
├── dataWriter.js
├── dataDeleter.js
└── musicData.json
/lambda_console/getTest.json:
--------------------------------------------------------------------------------
1 | {
2 | "body": "{\"Artist\":\"TestArtist\",\"SongTitle\":\"Test Song\"}"
3 | }
--------------------------------------------------------------------------------
/lambda_console/createTest.json:
--------------------------------------------------------------------------------
1 | {
2 | "body": "{\"Artist\":\"TestArtist\",\"SongTitle\":\"Test Song\",\"AlbumTitle\":\"TestAlbum\",\"CriticRating\":\"8.9\",\"Genre\":\"Classical\",\"Price\":\"1.99\"}"
3 | }
--------------------------------------------------------------------------------
/static-site/error.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | This page was not found. Sorry! Did you mean to go to the home page?
8 |
9 |
--------------------------------------------------------------------------------
/dynamodb/dataWriter.js:
--------------------------------------------------------------------------------
1 | var AWS = require("aws-sdk");
2 | AWS.config.update({region: "us-east-1"});
3 | var documentClient = new AWS.DynamoDB.DocumentClient();
4 |
5 | var fs = require("fs");
6 |
7 | var sleep = require("sleep");
8 |
9 | var musicData = fs.readFileSync("musicData.json");
10 | var jsonContent = JSON.parse(musicData);
11 |
12 | for (entry in jsonContent) {
13 | console.log("THIS IS THE ENTRY")
14 | console.log(jsonContent[entry])
15 |
16 | var params = {
17 | TableName : "PrometheonMusic",
18 | Item: jsonContent[entry]
19 | };
20 |
21 | documentClient.put(params, function(err, data) {
22 | if (err) console.log(err);
23 | else console.log(data);
24 | });
25 | sleep.msleep(300)
26 | }
--------------------------------------------------------------------------------
/dynamodb/dataDeleter.js:
--------------------------------------------------------------------------------
1 | var AWS = require("aws-sdk");
2 | AWS.config.update({region: "us-east-1"});
3 | var documentClient = new AWS.DynamoDB.DocumentClient();
4 |
5 | var fs = require("fs");
6 |
7 | var sleep = require("sleep");
8 |
9 | var counter = 0
10 |
11 | while (counter < 15) {
12 | console.log("Deleting item with SongTitle of test" + counter.toString())
13 |
14 | var params = {
15 | TableName : "PrometheonMusic",
16 | Key: {
17 | Artist: "Stephen James",
18 | SongTitle: "test"+counter.toString()
19 | }
20 | };
21 |
22 | documentClient.delete(params, function(err, data) {
23 | if (err) console.log(err);
24 | else console.log(data);
25 | });
26 | sleep.msleep(300)
27 | counter++
28 | }
--------------------------------------------------------------------------------
/lambda_console/get.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const AWS = require('aws-sdk');
4 | AWS.config.update({region:'us-east-1'});
5 |
6 | const dynamoDb = new AWS.DynamoDB.DocumentClient();
7 |
8 | module.exports.get = (event, context, callback) => {
9 | const data = JSON.parse(event.body);
10 |
11 | const params = {
12 | TableName: 'PrometheonMusic',
13 | Key: {
14 | Artist: data.Artist,
15 | SongTitle: data.SongTitle
16 | },
17 | }
18 |
19 | // fetch item from DynamoDB
20 | dynamoDb.get(params, (error, result) => {
21 | // handle potential errors
22 | if (error) {
23 | console.error(error);
24 | callback(null, {
25 | statusCode: error.statusCode || 501,
26 | headers: { 'Content-Type': 'text/plain' },
27 | body: 'Couldn\'t fetch the todo item.',
28 | });
29 | return;
30 | }
31 |
32 | // create a response
33 | const response = {
34 | statusCode: 200,
35 | body: JSON.stringify(result),
36 | };
37 | callback(null, response);
38 | });
39 | };
--------------------------------------------------------------------------------
/lambda_console/create.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const AWS = require('aws-sdk');
4 | AWS.config.update({region:'us-east-1'});
5 |
6 | const dynamoDb = new AWS.DynamoDB.DocumentClient();
7 |
8 | module.exports.create = (event, context, callback) => {
9 | const data = JSON.parse(event.body);
10 |
11 | const params = {
12 | TableName: 'PrometheonMusic',
13 | Item: {
14 | Artist: data.Artist,
15 | SongTitle: data.SongTitle,
16 | AlbumTitle: data.AlbumTitle,
17 | CriticRating: data.CriticRating,
18 | Genre: data.Genre,
19 | Price: data.Price
20 | },
21 | };
22 |
23 | // write the item to the database
24 | dynamoDb.put(params, (error) => {
25 | // handle potential errors
26 | if (error) {
27 | console.error(error);
28 | callback(null, {
29 | statusCode: error.statusCode || 501,
30 | headers: { 'Content-Type': 'text/plain' },
31 | body: 'Couldn\'t create the item.',
32 | });
33 | return;
34 | }
35 |
36 | // create a response
37 | const response = {
38 | statusCode: 200,
39 | body: JSON.stringify(params.Item),
40 | };
41 | callback(null, response);
42 | });
43 | };
--------------------------------------------------------------------------------
/static-site/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding-top: 40px;
3 | padding-bottom: 40px;
4 | background-color: #eee;
5 | }
6 |
7 | hr {
8 | border-top: solid black;
9 | }
10 |
11 | div #error-message {
12 | color: red;
13 | font-size: 15px;
14 | font-weight: bold;
15 | }
16 |
17 | div #success-message, #results-message {
18 | color: green;
19 | font-size: 15px;
20 | font-weight: bold;
21 | }
22 |
23 | .form-signin {
24 | max-width: 530px;
25 | padding: 15px;
26 | margin: 0 auto;
27 | }
28 | .form-signin .form-signin-heading,
29 | .form-signin .checkbox {
30 | margin-bottom: 10px;
31 | }
32 | .form-signin .checkbox {
33 | font-weight: normal;
34 | }
35 | .form-signin .form-control {
36 | position: relative;
37 | height: auto;
38 | -webkit-box-sizing: border-box;
39 | box-sizing: border-box;
40 | padding: 10px;
41 | font-size: 16px;
42 | }
43 | .form-signin .form-control:focus {
44 | z-index: 2;
45 | }
46 | .form-signin input[type="Artist"] {
47 | margin-bottom: -1px;
48 | border-bottom-right-radius: 0;
49 | border-bottom-left-radius: 0;
50 | }
51 | .form-signin input[type="bottom"] {
52 | margin-bottom: 10px;
53 | border-top-left-radius: 0;
54 | border-top-right-radius: 0;
55 | }
56 |
--------------------------------------------------------------------------------
/static-site/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Prometheon Music Manager
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/static-site/formlogic.js:
--------------------------------------------------------------------------------
1 | // Replace the YOUR_API_ENDPOINT_URL with yours
2 | // It should look something like this:
3 | // https://example1a2s3d.execute-api.us-east-1.amazonaws.com/dev/prometheon
4 |
5 | // Do NOT include the /id but make sure you DO include the /prometheon
6 |
7 | var API_ENDPOINT = 'https://example1a2s3d.execute-api.us-east-1.amazonaws.com/dev/prometheon';
8 |
9 | // Setup divs that will be used to display interactive messages
10 | var errorDiv = document.getElementById('error-message')
11 | var successDiv = document.getElementById('success-message')
12 | var resultsDiv = document.getElementById('results-message')
13 |
14 | // Setup easy way to reference values of the input boxes
15 | function ArtistValue() { return document.getElementById('Artist').value }
16 | function SongTitleValue() { return document.getElementById('SongTitle').value }
17 | function AlbumTitleValue() { return document.getElementById('AlbumTitle').value }
18 | function CriticRatingValue() { return document.getElementById('CriticRating').value }
19 | function GenreValue() { return document.getElementById('Genre').value }
20 | function PriceValue() { return document.getElementById('Price').value }
21 |
22 | function clearNotifications() {
23 | // Clear any exisiting notifications in the browser notifications divs
24 | errorDiv.textContent = '';
25 | resultsDiv.textContent = '';
26 | successDiv.textContent = '';
27 | }
28 |
29 | // Add listeners for each button that make the API request
30 |
31 | document.getElementById('listButton').addEventListener('click', function (event) {
32 | // Prevent the page reloading and clear exisiting notifications
33 | event.preventDefault()
34 | clearNotifications()
35 | // Prepare the appropriate HTTP request to the API with fetch
36 | // list uses the base /prometheon resource path and doesn't require
37 | // a payload or query string paramaters
38 | fetch(API_ENDPOINT, {
39 | method: 'GET',
40 | mode: 'cors'
41 | })
42 | .then((resp) => resp.json())
43 | .then(function(data) {
44 | console.log(data)
45 | successDiv.textContent = 'Success! Check the fetched items below';
46 | resultsDiv.textContent = JSON.stringify(data);
47 | })
48 | .catch(function(err) {
49 | errorDiv.textContent = 'Yikes! There was an error:\n' + err.toString();
50 | console.log(err)
51 | });
52 | });
53 |
54 |
55 | document.getElementById('getButton').addEventListener('click', function (event) {
56 | // Prevent the page reloading and clear exisiting notifications
57 | event.preventDefault()
58 | clearNotifications()
59 | // Prepare the appropriate HTTP request to the API with fetch
60 | // get uses the /prometheon/id resource path and query string paramaters
61 | // The final result is a GET request to something like:
62 | // https://example1a2s3d.execute-api.us-east-1.amazonaws.com/dev/prometheon/id?Artist=Rihanna&SongTitle=Work
63 | fetch(API_ENDPOINT+'/id?Artist='+ArtistValue()+'&SongTitle='+SongTitleValue(), {
64 | headers:{
65 | "Content-type": "application/json"
66 | },
67 | method: 'GET',
68 | mode: 'cors'
69 | })
70 | .then((resp) => resp.json())
71 | .then(function(data) {
72 | console.log(data)
73 | successDiv.textContent = 'Success! Check the fetched item below';
74 | resultsDiv.textContent = JSON.stringify(data);
75 | })
76 | .catch(function(err) {
77 | errorDiv.textContent = 'Yikes! There was an error:\n' + err.toString();
78 | console.log(err)
79 | });
80 | });
81 |
82 |
83 | document.getElementById('deleteButton').addEventListener('click', function (event) {
84 | // Prevent the page reloading and clear exisiting notifications
85 | event.preventDefault()
86 | clearNotifications()
87 | // Prepare the appropriate HTTP request to the API with fetch
88 | // Delete used the /prometheon/id resource path
89 | // It also requires a JSON body payload
90 | fetch(API_ENDPOINT+'/id', {
91 | headers:{
92 | "Content-type": "application/json"
93 | },
94 | method: 'DELETE',
95 | body: JSON.stringify({
96 | 'Artist': ArtistValue(),
97 | 'SongTitle': SongTitleValue()
98 | }),
99 | mode: 'cors'
100 | })
101 | .then((resp) => resp.json())
102 | .then(function(data) {
103 | console.log(data)
104 | successDiv.textContent = 'Success! Check the status of the item below';
105 | resultsDiv.textContent = JSON.stringify(data);
106 | })
107 | .catch(function(err) {
108 | errorDiv.textContent = 'Yikes! There was an error:\n' + err.toString();
109 | console.log(err)
110 | });
111 | });
112 |
113 |
114 | document.getElementById('updateButton').addEventListener('click', function (event) {
115 | // Prevent the page reloading and clear exisiting notifications
116 | event.preventDefault()
117 | clearNotifications()
118 | // Prepare the appropriate HTTP request to the API with fetch
119 | // update uses the /prometheon/id endpoint and requires a JSON payload
120 | fetch(API_ENDPOINT+'/id', {
121 | headers:{
122 | "Content-type": "application/json"
123 | },
124 | method: 'PUT',
125 | body: JSON.stringify({
126 | 'Artist': ArtistValue(),
127 | 'SongTitle': SongTitleValue(),
128 | 'AlbumTitle': AlbumTitleValue(),
129 | 'CriticRating': CriticRatingValue(),
130 | 'Genre': GenreValue(),
131 | 'Price': PriceValue()
132 | }),
133 | mode: 'cors'
134 | })
135 | .then((resp) => resp.json())
136 | .then(function(data) {
137 | console.log(data)
138 | successDiv.textContent = 'Success! Check the updated item below';
139 | resultsDiv.textContent = JSON.stringify(data);
140 |
141 | })
142 | .catch(function(err) {
143 | errorDiv.textContent = 'Yikes! There was an error:\n' + err.toString();
144 | console.log(err)
145 | });
146 | });
147 |
148 |
149 | document.getElementById('createButton').addEventListener('click', function (event) {
150 | // Prevent the page reloading and clear exisiting notifications
151 | event.preventDefault()
152 | clearNotifications()
153 | // Prepare the appropriate HTTP request to the API with fetch
154 | // create uses the root /prometheon endpoint and requires a JSON payload
155 | fetch(API_ENDPOINT, {
156 | headers:{
157 | "Content-type": "application/json"
158 | },
159 | method: 'POST',
160 | body: JSON.stringify({
161 | Artist: ArtistValue(),
162 | SongTitle: SongTitleValue(),
163 | AlbumTitle: AlbumTitleValue(),
164 | CriticRating: CriticRatingValue(),
165 | Genre: GenreValue(),
166 | Price: PriceValue()
167 | }),
168 | mode: 'cors'
169 | })
170 | .then((resp) => resp.json())
171 | .then(function(data) {
172 | console.log(data)
173 | successDiv.textContent = 'Success! Check the created item below';
174 | resultsDiv.textContent = JSON.stringify(data);
175 | })
176 | .catch(function(err) {
177 | errorDiv.textContent = 'Yikes! There was an error:\n' + err.toString();
178 | console.log(err)
179 | });
180 | });
181 |
182 |
183 |
184 |
--------------------------------------------------------------------------------
/dynamodb/musicData.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "Artist": "Post Malone",
4 | "SongTitle": "rockstar",
5 | "AlbumTitle": "Morrow Centers",
6 | "Genre": "Country",
7 | "Price": "13.89",
8 | "CriticRating": "9.9"
9 | },
10 | {
11 | "Artist": "Lil Pump",
12 | "SongTitle": "Gucci Gang",
13 | "AlbumTitle": "Shepherd Ville",
14 | "Genre": "RNB",
15 | "Price": "6.89",
16 | "CriticRating": "9.89"
17 | },
18 | {
19 | "Artist": "Camila Cabello",
20 | "SongTitle": "Havana",
21 | "AlbumTitle": "Collins Ways",
22 | "Genre": "Reggae",
23 | "Price": "8.99",
24 | "CriticRating": "9.88"
25 | },
26 | {
27 | "Artist": "Sam Smith",
28 | "SongTitle": "Too Good At Goodbyes",
29 | "AlbumTitle": "Hayes Plain",
30 | "Genre": "Folk",
31 | "Price": "13.89",
32 | "CriticRating": "9.87"
33 | },
34 | {
35 | "Artist": "Post Malone",
36 | "SongTitle": "I Fall Apart",
37 | "AlbumTitle": "Rachel Creek",
38 | "Genre": "Pop",
39 | "Price": "19.89",
40 | "CriticRating": "9.86"
41 | },
42 | {
43 | "Artist": "21 Savage",
44 | "SongTitle": "Bank Account",
45 | "AlbumTitle": "Christopher Freeway",
46 | "Genre": "Classical",
47 | "Price": "8.99",
48 | "CriticRating": "9.85"
49 | },
50 | {
51 | "Artist": "Logic",
52 | "SongTitle": "1-800-273-8255",
53 | "AlbumTitle": "Ashlee Avenue",
54 | "Genre": "Reggae",
55 | "Price": "5.89",
56 | "CriticRating": "9.84"
57 | },
58 | {
59 | "Artist": "Cardi B",
60 | "SongTitle": "Bodak Yellow",
61 | "AlbumTitle": "Bruce Walks",
62 | "Genre": "Reggae",
63 | "Price": "19.99",
64 | "CriticRating": "9.83"
65 | },
66 | {
67 | "Artist": "21 Savage",
68 | "SongTitle": "Ghostface Killers",
69 | "AlbumTitle": "Joseph Hill",
70 | "Genre": "Country",
71 | "Price": "0.99",
72 | "CriticRating": "9.82"
73 | },
74 | {
75 | "Artist": "Lil Uzi Vert",
76 | "SongTitle": "XO TOUR Llif3",
77 | "AlbumTitle": "Raymond Curve",
78 | "Genre": "Pop",
79 | "Price": "12.99",
80 | "CriticRating": "9.81"
81 | },
82 | {
83 | "Artist": "Khalid",
84 | "SongTitle": "Young Dumb & Broke",
85 | "AlbumTitle": "Andersen Junctions",
86 | "Genre": "RNB",
87 | "Price": "19.89",
88 | "CriticRating": "9.8"
89 | },
90 | {
91 | "Artist": "Maroon 5",
92 | "SongTitle": "What Lovers Do (feat. SZA)",
93 | "AlbumTitle": "Melissa Islands",
94 | "Genre": "Folk",
95 | "Price": "1.89",
96 | "CriticRating": "9.79"
97 | },
98 | {
99 | "Artist": "Migos",
100 | "SongTitle": "MotorSport",
101 | "AlbumTitle": "Hammond Drive",
102 | "Genre": "Country",
103 | "Price": "17.89",
104 | "CriticRating": "9.78"
105 | },
106 | {
107 | "Artist": "G-Eazy",
108 | "SongTitle": "No Limit",
109 | "AlbumTitle": "Obrien View",
110 | "Genre": "Classical",
111 | "Price": "19.89",
112 | "CriticRating": "9.77"
113 | },
114 | {
115 | "Artist": "Gucci Mane",
116 | "SongTitle": "I Get The Bag (feat. Migos)",
117 | "AlbumTitle": "Johnny Trafficway",
118 | "Genre": "Classical",
119 | "Price": "9.89",
120 | "CriticRating": "9.76"
121 | },
122 | {
123 | "Artist": "Selena Gomez",
124 | "SongTitle": "Wolves",
125 | "AlbumTitle": "Kyle Streets",
126 | "Genre": "Reggae",
127 | "Price": "16.99",
128 | "CriticRating": "9.75"
129 | },
130 | {
131 | "Artist": "Post Malone",
132 | "SongTitle": "Congratulations",
133 | "AlbumTitle": "Williams Valley",
134 | "Genre": "Reggae",
135 | "Price": "5.99",
136 | "CriticRating": "9.74"
137 | },
138 | {
139 | "Artist": "Dua Lipa",
140 | "SongTitle": "New Rules",
141 | "AlbumTitle": "Davis Junction",
142 | "Genre": "Rock",
143 | "Price": "12.99",
144 | "CriticRating": "9.73"
145 | },
146 | {
147 | "Artist": "A$AP Ferg",
148 | "SongTitle": "Plain Jane",
149 | "AlbumTitle": "Meza Gateway",
150 | "Genre": "Classical",
151 | "Price": "9.99",
152 | "CriticRating": "9.72"
153 | },
154 | {
155 | "Artist": "Demi Lovato",
156 | "SongTitle": "Sorry Not Sorry",
157 | "AlbumTitle": "Steven Islands",
158 | "Genre": "Country",
159 | "Price": "12.99",
160 | "CriticRating": "9.71"
161 | },
162 | {
163 | "Artist": "Marshmello",
164 | "SongTitle": "Silence",
165 | "AlbumTitle": "Moody Wall",
166 | "Genre": "Folk",
167 | "Price": "11.89",
168 | "CriticRating": "9.7"
169 | },
170 | {
171 | "Artist": "NF",
172 | "SongTitle": "Let You Down",
173 | "AlbumTitle": "Scott Isle",
174 | "Genre": "Pop",
175 | "Price": "17.99",
176 | "CriticRating": "9.69"
177 | },
178 | {
179 | "Artist": "Ed Sheeran",
180 | "SongTitle": "Perfect",
181 | "AlbumTitle": "Brenda Burg",
182 | "Genre": "Pop",
183 | "Price": "14.99",
184 | "CriticRating": "9.68"
185 | },
186 | {
187 | "Artist": "Offset",
188 | "SongTitle": "Ric Flair Drip",
189 | "AlbumTitle": "Jacob Circles",
190 | "Genre": "Rock",
191 | "Price": "18.99",
192 | "CriticRating": "9.67"
193 | },
194 | {
195 | "Artist": "Post Malone",
196 | "SongTitle": "Candy Paint",
197 | "AlbumTitle": "Walker Pass",
198 | "Genre": "Classical",
199 | "Price": "10.99",
200 | "CriticRating": "9.66"
201 | },
202 | {
203 | "Artist": "Lil Uzi Vert",
204 | "SongTitle": "The Way Life Goes (feat. Oh Wonder)",
205 | "AlbumTitle": "Wilson Shoals",
206 | "Genre": "Reggae",
207 | "Price": "12.99",
208 | "CriticRating": "9.65"
209 | },
210 | {
211 | "Artist": "Kendrick Lamar",
212 | "SongTitle": "HUMBLE.",
213 | "AlbumTitle": "Rachel Manor",
214 | "Genre": "Rock",
215 | "Price": "11.99",
216 | "CriticRating": "9.64"
217 | },
218 | {
219 | "Artist": "Portugal. The Man",
220 | "SongTitle": "Feel It Still",
221 | "AlbumTitle": "Tyler Turnpike",
222 | "Genre": "Folk",
223 | "Price": "17.89",
224 | "CriticRating": "9.63"
225 | },
226 | {
227 | "Artist": "French Montana",
228 | "SongTitle": "Unforgettable",
229 | "AlbumTitle": "Kimberly Trail",
230 | "Genre": "Jazz",
231 | "Price": "12.89",
232 | "CriticRating": "9.62"
233 | },
234 | {
235 | "Artist": "Travis Scott",
236 | "SongTitle": "Butterfly Effect",
237 | "AlbumTitle": "Flores Extension",
238 | "Genre": "Folk",
239 | "Price": "8.99",
240 | "CriticRating": "9.61"
241 | },
242 | {
243 | "Artist": "Halsey",
244 | "SongTitle": "Bad At Love",
245 | "AlbumTitle": "Katherine Unions",
246 | "Genre": "Pop",
247 | "Price": "15.99",
248 | "CriticRating": "9.6"
249 | },
250 | {
251 | "Artist": "XXXTENTACION",
252 | "SongTitle": "Jocelyn Flores",
253 | "AlbumTitle": "Thomas Orchard",
254 | "Genre": "Country",
255 | "Price": "15.99",
256 | "CriticRating": "9.59"
257 | },
258 | {
259 | "Artist": "Hailee Steinfeld",
260 | "SongTitle": "\"Let Me Go (with Alesso",
261 | "AlbumTitle": " Florida Georgia Line & watt)\"",
262 | "Genre": "Taylor Summit",
263 | "Price": "Reggae",
264 | "CriticRating": "12.89"
265 | },
266 | {
267 | "Artist": "Taylor Swift",
268 | "SongTitle": "Call It What You Want",
269 | "AlbumTitle": "Henson Turnpike",
270 | "Genre": "RNB",
271 | "Price": "11.99",
272 | "CriticRating": "9.57"
273 | },
274 | {
275 | "Artist": "Travis Scott",
276 | "SongTitle": "goosebumps",
277 | "AlbumTitle": "Johnathan Stream",
278 | "Genre": "Folk",
279 | "Price": "1.99",
280 | "CriticRating": "9.56"
281 | },
282 | {
283 | "Artist": "Sam Smith",
284 | "SongTitle": "Pray",
285 | "AlbumTitle": "Espinoza Fall",
286 | "Genre": "Jazz",
287 | "Price": "6.89",
288 | "CriticRating": "9.55"
289 | },
290 | {
291 | "Artist": "Kodak Black",
292 | "SongTitle": "Roll In Peace (feat. XXXTENTACION)",
293 | "AlbumTitle": "Cruz Roads",
294 | "Genre": "Jazz",
295 | "Price": "5.99",
296 | "CriticRating": "9.54"
297 | },
298 | {
299 | "Artist": "Yo Gotti",
300 | "SongTitle": "Rake It Up",
301 | "AlbumTitle": "Fox Crescent",
302 | "Genre": "Folk",
303 | "Price": "1.99",
304 | "CriticRating": "9.53"
305 | },
306 | {
307 | "Artist": "Bebe Rexha",
308 | "SongTitle": "Meant to Be (feat. Florida Georgia Line)",
309 | "AlbumTitle": "Love Drive",
310 | "Genre": "Reggae",
311 | "Price": "14.89",
312 | "CriticRating": "9.52"
313 | },
314 | {
315 | "Artist": "Migos",
316 | "SongTitle": "Slippery (feat. Gucci Mane)",
317 | "AlbumTitle": "Ross Wall",
318 | "Genre": "Folk",
319 | "Price": "1.99",
320 | "CriticRating": "9.51"
321 | },
322 | {
323 | "Artist": "Khalid",
324 | "SongTitle": "Location",
325 | "AlbumTitle": "Nichols Meadows",
326 | "Genre": "Folk",
327 | "Price": "12.99",
328 | "CriticRating": "9.5"
329 | },
330 | {
331 | "Artist": "A Boogie Wit da Hoodie",
332 | "SongTitle": "Drowning (feat. Kodak Black)",
333 | "AlbumTitle": "Kent Mountain",
334 | "Genre": "Jazz",
335 | "Price": "9.89",
336 | "CriticRating": "9.49"
337 | },
338 | {
339 | "Artist": "Charlie Puth",
340 | "SongTitle": "How Long",
341 | "AlbumTitle": "Morrison Forks",
342 | "Genre": "Country",
343 | "Price": "16.89",
344 | "CriticRating": "9.48"
345 | },
346 | {
347 | "Artist": "Imagine Dragons",
348 | "SongTitle": "Thunder",
349 | "AlbumTitle": "Ayers Way",
350 | "Genre": "Reggae",
351 | "Price": "3.89",
352 | "CriticRating": "9.47"
353 | },
354 | {
355 | "Artist": "XXXTENTACION",
356 | "SongTitle": "Fuck Love (feat. Trippie Redd)",
357 | "AlbumTitle": "Anthony Ways",
358 | "Genre": "Rock",
359 | "Price": "16.99",
360 | "CriticRating": "9.46"
361 | },
362 | {
363 | "Artist": "ZAYN",
364 | "SongTitle": "Dusk Till Dawn - Radio Edit",
365 | "AlbumTitle": "Christopher Lake",
366 | "Genre": "Folk",
367 | "Price": "8.89",
368 | "CriticRating": "9.45"
369 | },
370 | {
371 | "Artist": "Post Malone",
372 | "SongTitle": "Go Flex",
373 | "AlbumTitle": "Christine Plain",
374 | "Genre": "Jazz",
375 | "Price": "8.89",
376 | "CriticRating": "9.44"
377 | },
378 | {
379 | "Artist": "Tay-K",
380 | "SongTitle": "The Race",
381 | "AlbumTitle": "Joseph Spurs",
382 | "Genre": "Folk",
383 | "Price": "18.89",
384 | "CriticRating": "9.43"
385 | },
386 | {
387 | "Artist": "21 Savage",
388 | "SongTitle": "Rap Saved Me",
389 | "AlbumTitle": "Bullock Mountains",
390 | "Genre": "Classical",
391 | "Price": "5.99",
392 | "CriticRating": "9.42"
393 | },
394 | {
395 | "Artist": "21 Savage",
396 | "SongTitle": "My Choppa Hate Niggas",
397 | "AlbumTitle": "Victoria Ridges",
398 | "Genre": "Pop",
399 | "Price": "2.89",
400 | "CriticRating": "9.41"
401 | },
402 | {
403 | "Artist": "Macklemore",
404 | "SongTitle": "Glorious (feat. Skylar Grey)",
405 | "AlbumTitle": "Wallace Stream",
406 | "Genre": "Folk",
407 | "Price": "13.89",
408 | "CriticRating": "9.4"
409 | },
410 | {
411 | "Artist": "Kendrick Lamar",
412 | "SongTitle": "LOVE. FEAT. ZACARI.",
413 | "AlbumTitle": "Diaz Highway",
414 | "Genre": "Folk",
415 | "Price": "10.99",
416 | "CriticRating": "9.39"
417 | },
418 | {
419 | "Artist": "Kygo",
420 | "SongTitle": "Stargazing",
421 | "AlbumTitle": "Peters Village",
422 | "Genre": "Country",
423 | "Price": "12.99",
424 | "CriticRating": "9.38"
425 | },
426 | {
427 | "Artist": "Lil Uzi Vert",
428 | "SongTitle": "Sauce It Up",
429 | "AlbumTitle": "Lowe Springs",
430 | "Genre": "Classical",
431 | "Price": "8.89",
432 | "CriticRating": "9.37"
433 | },
434 | {
435 | "Artist": "Imagine Dragons",
436 | "SongTitle": "Believer",
437 | "AlbumTitle": "Callahan Way",
438 | "Genre": "Country",
439 | "Price": "19.89",
440 | "CriticRating": "9.36"
441 | },
442 | {
443 | "Artist": "J Balvin",
444 | "SongTitle": "Mi Gente",
445 | "AlbumTitle": "Timothy Villages",
446 | "Genre": "Country",
447 | "Price": "14.89",
448 | "CriticRating": "9.35"
449 | },
450 | {
451 | "Artist": "Kodak Black",
452 | "SongTitle": "Transportin'",
453 | "AlbumTitle": "Robbins Meadows",
454 | "Genre": "Reggae",
455 | "Price": "13.89",
456 | "CriticRating": "9.34"
457 | },
458 | {
459 | "Artist": "Playboi Carti",
460 | "SongTitle": "Magnolia",
461 | "AlbumTitle": "Robert Prairie",
462 | "Genre": "Folk",
463 | "Price": "17.99",
464 | "CriticRating": "9.33"
465 | },
466 | {
467 | "Artist": "Taylor Swift",
468 | "SongTitle": "Look What You Made Me Do",
469 | "AlbumTitle": "Angela Loaf",
470 | "Genre": "Classical",
471 | "Price": "9.99",
472 | "CriticRating": "9.32"
473 | },
474 | {
475 | "Artist": "Kendrick Lamar",
476 | "SongTitle": "DNA.",
477 | "AlbumTitle": "Joshua Drive",
478 | "Genre": "Jazz",
479 | "Price": "8.99",
480 | "CriticRating": "9.31"
481 | },
482 | {
483 | "Artist": "SZA",
484 | "SongTitle": "Love Galore",
485 | "AlbumTitle": "Misty Keys",
486 | "Genre": "Pop",
487 | "Price": "2.99",
488 | "CriticRating": "9.3"
489 | },
490 | {
491 | "Artist": "Maroon 5",
492 | "SongTitle": "Wait",
493 | "AlbumTitle": "Rivers Fields",
494 | "Genre": "Classical",
495 | "Price": "1.99",
496 | "CriticRating": "9.29"
497 | },
498 | {
499 | "Artist": "Charlie Puth",
500 | "SongTitle": "Attention",
501 | "AlbumTitle": "Jason Club",
502 | "Genre": "RNB",
503 | "Price": "6.99",
504 | "CriticRating": "9.28"
505 | },
506 | {
507 | "Artist": "J Balvin",
508 | "SongTitle": "Mi Gente (feat. Beyonc��)",
509 | "AlbumTitle": "Hill Tunnel",
510 | "Genre": "Pop",
511 | "Price": "8.89",
512 | "CriticRating": "9.27"
513 | },
514 | {
515 | "Artist": "Future",
516 | "SongTitle": "Mask Off",
517 | "AlbumTitle": "Brown Via",
518 | "Genre": "Jazz",
519 | "Price": "12.89",
520 | "CriticRating": "9.26"
521 | },
522 | {
523 | "Artist": "Lorde",
524 | "SongTitle": "\"Homemade Dynamite (Feat. Khalid",
525 | "AlbumTitle": " Post Malone & SZA) - REMIX\"",
526 | "Genre": "Nancy Terrace",
527 | "Price": "Jazz",
528 | "CriticRating": "4.89"
529 | },
530 | {
531 | "Artist": "Young Thug",
532 | "SongTitle": "Relationship (feat. Future)",
533 | "AlbumTitle": "Amy Landing",
534 | "Genre": "Reggae",
535 | "Price": "5.99",
536 | "CriticRating": "9.24"
537 | },
538 | {
539 | "Artist": "Childish Gambino",
540 | "SongTitle": "Redbone",
541 | "AlbumTitle": "Jillian Courts",
542 | "Genre": "Rock",
543 | "Price": "11.99",
544 | "CriticRating": "9.23"
545 | },
546 | {
547 | "Artist": "Post Malone",
548 | "SongTitle": "White Iverson",
549 | "AlbumTitle": "Jacob Creek",
550 | "Genre": "Rock",
551 | "Price": "2.89",
552 | "CriticRating": "9.22"
553 | },
554 | {
555 | "Artist": "Sam Smith",
556 | "SongTitle": "Burning",
557 | "AlbumTitle": "Hoover Brooks",
558 | "Genre": "Reggae",
559 | "Price": "16.89",
560 | "CriticRating": "9.21"
561 | },
562 | {
563 | "Artist": "2 Chainz",
564 | "SongTitle": "It's A Vibe",
565 | "AlbumTitle": "Soto Lane",
566 | "Genre": "Pop",
567 | "Price": "9.99",
568 | "CriticRating": "9.2"
569 | },
570 | {
571 | "Artist": "Ed Sheeran",
572 | "SongTitle": "Shape of You",
573 | "AlbumTitle": "Victor Divide",
574 | "Genre": "RNB",
575 | "Price": "14.99",
576 | "CriticRating": "9.19"
577 | },
578 | {
579 | "Artist": "Luis Fonsi",
580 | "SongTitle": "Despacito - Remix",
581 | "AlbumTitle": "Nicholas Route",
582 | "Genre": "Jazz",
583 | "Price": "16.99",
584 | "CriticRating": "9.18"
585 | },
586 | {
587 | "Artist": "Sam Hunt",
588 | "SongTitle": "Body Like A Back Road",
589 | "AlbumTitle": "Roberts Ridge",
590 | "Genre": "Reggae",
591 | "Price": "13.89",
592 | "CriticRating": "9.17"
593 | },
594 | {
595 | "Artist": "Chris Brown",
596 | "SongTitle": "Pills & Automobiles",
597 | "AlbumTitle": "Long Camp",
598 | "Genre": "RNB",
599 | "Price": "9.89",
600 | "CriticRating": "9.16"
601 | },
602 | {
603 | "Artist": "Chris Brown",
604 | "SongTitle": "Questions",
605 | "AlbumTitle": "Cynthia Locks",
606 | "Genre": "Jazz",
607 | "Price": "6.99",
608 | "CriticRating": "9.15"
609 | },
610 | {
611 | "Artist": "Big Sean",
612 | "SongTitle": "Pull Up N Wreck (With Metro Boomin)",
613 | "AlbumTitle": "Sarah Springs",
614 | "Genre": "Classical",
615 | "Price": "13.99",
616 | "CriticRating": "9.14"
617 | },
618 | {
619 | "Artist": "Lil Xan",
620 | "SongTitle": "Betrayed",
621 | "AlbumTitle": "Baker Grove",
622 | "Genre": "Classical",
623 | "Price": "14.89",
624 | "CriticRating": "9.13"
625 | },
626 | {
627 | "Artist": "Playboi Carti",
628 | "SongTitle": "wokeuplikethis*",
629 | "AlbumTitle": "Logan Station",
630 | "Genre": "Classical",
631 | "Price": "7.99",
632 | "CriticRating": "9.12"
633 | },
634 | {
635 | "Artist": "Russ",
636 | "SongTitle": "Losin Control",
637 | "AlbumTitle": "Simmons Estates",
638 | "Genre": "Rock",
639 | "Price": "7.89",
640 | "CriticRating": "9.11"
641 | },
642 | {
643 | "Artist": "N.E.R.D",
644 | "SongTitle": "Lemon",
645 | "AlbumTitle": "Walker Villages",
646 | "Genre": "Classical",
647 | "Price": "15.89",
648 | "CriticRating": "9.1"
649 | },
650 | {
651 | "Artist": "YBN Nahmir",
652 | "SongTitle": "Rubbin Off The Paint",
653 | "AlbumTitle": "Hernandez Hills",
654 | "Genre": "Country",
655 | "Price": "14.99",
656 | "CriticRating": "9.09"
657 | },
658 | {
659 | "Artist": "blackbear",
660 | "SongTitle": "do re mi (feat. Gucci Mane)",
661 | "AlbumTitle": "Caitlin Streets",
662 | "Genre": "Country",
663 | "Price": "4.89",
664 | "CriticRating": "9.08"
665 | },
666 | {
667 | "Artist": "Clean Bandit",
668 | "SongTitle": "I Miss You (feat. Julia Michaels)",
669 | "AlbumTitle": "Natalie Green",
670 | "Genre": "Reggae",
671 | "Price": "8.99",
672 | "CriticRating": "9.07"
673 | },
674 | {
675 | "Artist": "21 Savage",
676 | "SongTitle": "Disrespectful",
677 | "AlbumTitle": "Potter Causeway",
678 | "Genre": "Pop",
679 | "Price": "0.89",
680 | "CriticRating": "9.06"
681 | },
682 | {
683 | "Artist": "Taylor Swift",
684 | "SongTitle": "...Ready For It?",
685 | "AlbumTitle": "Kelly Course",
686 | "Genre": "Country",
687 | "Price": "17.99",
688 | "CriticRating": "9.05"
689 | },
690 | {
691 | "Artist": "Sam Smith",
692 | "SongTitle": "Say It First",
693 | "AlbumTitle": "Chelsea Estates",
694 | "Genre": "Country",
695 | "Price": "14.99",
696 | "CriticRating": "9.04"
697 | },
698 | {
699 | "Artist": "Niall Horan",
700 | "SongTitle": "Slow Hands",
701 | "AlbumTitle": "Robinson Forge",
702 | "Genre": "Rock",
703 | "Price": "12.99",
704 | "CriticRating": "9.03"
705 | },
706 | {
707 | "Artist": "Liam Payne",
708 | "SongTitle": "Strip That Down",
709 | "AlbumTitle": "Michael Gardens",
710 | "Genre": "Rock",
711 | "Price": "9.89",
712 | "CriticRating": "9.02"
713 | },
714 | {
715 | "Artist": "Macklemore",
716 | "SongTitle": "Good Old Days (feat. Kesha)",
717 | "AlbumTitle": "Felicia Coves",
718 | "Genre": "Folk",
719 | "Price": "7.99",
720 | "CriticRating": "9.01"
721 | },
722 | {
723 | "Artist": "XXXTENTACION",
724 | "SongTitle": "Everybody Dies In Their Nightmares",
725 | "AlbumTitle": "Hardin Pines",
726 | "Genre": "Country",
727 | "Price": "8.99",
728 | "CriticRating": "9"
729 | },
730 | {
731 | "Artist": "DJ Khaled",
732 | "SongTitle": "I'm the One",
733 | "AlbumTitle": "Jordan Parkway",
734 | "Genre": "Folk",
735 | "Price": "5.89",
736 | "CriticRating": "8.99"
737 | },
738 | {
739 | "Artist": "Taylor Swift",
740 | "SongTitle": "Gorgeous",
741 | "AlbumTitle": "Baird Groves",
742 | "Genre": "Folk",
743 | "Price": "2.99",
744 | "CriticRating": "8.98"
745 | },
746 | {
747 | "Artist": "Cheat Codes",
748 | "SongTitle": "Feels Great (feat. Fetty Wap & CVBZ)",
749 | "AlbumTitle": "Vanessa Heights",
750 | "Genre": "Pop",
751 | "Price": "3.89",
752 | "CriticRating": "8.97"
753 | },
754 | {
755 | "Artist": "Lil Uzi Vert",
756 | "SongTitle": "The Way Life Goes (feat. Nicki Minaj & Oh Wonder) - Remix",
757 | "AlbumTitle": "Michael Way",
758 | "Genre": "RNB",
759 | "Price": "5.89",
760 | "CriticRating": "8.96"
761 | },
762 | {
763 | "Artist": "KYLE",
764 | "SongTitle": "iSpy (feat. Lil Yachty)",
765 | "AlbumTitle": "Olson Lodge",
766 | "Genre": "RNB",
767 | "Price": "15.99",
768 | "CriticRating": "8.95"
769 | },
770 | {
771 | "Artist": "Future",
772 | "SongTitle": "Patek Water",
773 | "AlbumTitle": "Ellis Mountain",
774 | "Genre": "Jazz",
775 | "Price": "17.89",
776 | "CriticRating": "8.94"
777 | },
778 | {
779 | "Artist": "DJ Khaled",
780 | "SongTitle": "Wild Thoughts",
781 | "AlbumTitle": "Robert Flat",
782 | "Genre": "RNB",
783 | "Price": "2.99",
784 | "CriticRating": "8.93"
785 | },
786 | {
787 | "Artist": "Sam Smith",
788 | "SongTitle": "One Last Song",
789 | "AlbumTitle": "David Squares",
790 | "Genre": "Reggae",
791 | "Price": "15.89",
792 | "CriticRating": "8.92"
793 | },
794 | {
795 | "Artist": "Migos",
796 | "SongTitle": "Bad and Boujee (feat. Lil Uzi Vert)",
797 | "AlbumTitle": "Sandra Corners",
798 | "Genre": "Pop",
799 | "Price": "14.99",
800 | "CriticRating": "8.91"
801 | },
802 | {
803 | "Artist": "Sam Smith",
804 | "SongTitle": "Nothing Left For You",
805 | "AlbumTitle": "Brown Square",
806 | "Genre": "Country",
807 | "Price": "8.89",
808 | "CriticRating": "8.9"
809 | },
810 | {
811 | "Artist": "Rich The Kid",
812 | "SongTitle": "New Freezer (feat. Kendrick Lamar)",
813 | "AlbumTitle": "Selena Vista",
814 | "Genre": "Country",
815 | "Price": "8.89",
816 | "CriticRating": "8.89"
817 | },
818 | {
819 | "Artist": "Kane Brown",
820 | "SongTitle": "What Ifs",
821 | "AlbumTitle": "Hahn Branch",
822 | "Genre": "Pop",
823 | "Price": "18.99",
824 | "CriticRating": "8.88"
825 | },
826 | {
827 | "Artist": "Big Sean",
828 | "SongTitle": "Bounce Back",
829 | "AlbumTitle": "Velasquez Brooks",
830 | "Genre": "Country",
831 | "Price": "14.89",
832 | "CriticRating": "8.87"
833 | },
834 | {
835 | "Artist": "Kodak Black",
836 | "SongTitle": "Tunnel Vision",
837 | "AlbumTitle": "Susan Manors",
838 | "Genre": "Jazz",
839 | "Price": "2.89",
840 | "CriticRating": "8.86"
841 | },
842 | {
843 | "Artist": "Offset",
844 | "SongTitle": "Nightmare",
845 | "AlbumTitle": "Ortiz Forks",
846 | "Genre": "Country",
847 | "Price": "18.99",
848 | "CriticRating": "8.85"
849 | },
850 | {
851 | "Artist": "James Arthur",
852 | "SongTitle": "Say You Won't Let Go",
853 | "AlbumTitle": "Kelli Lodge",
854 | "Genre": "Country",
855 | "Price": "13.99",
856 | "CriticRating": "8.84"
857 | },
858 | {
859 | "Artist": "Avicii",
860 | "SongTitle": "Lonely Together (feat. Rita Ora)",
861 | "AlbumTitle": "Adam Manor",
862 | "Genre": "Pop",
863 | "Price": "5.89",
864 | "CriticRating": "8.83"
865 | },
866 | {
867 | "Artist": "Kesha",
868 | "SongTitle": "Praying",
869 | "AlbumTitle": "Robert Burgs",
870 | "Genre": "RNB",
871 | "Price": "16.99",
872 | "CriticRating": "8.82"
873 | },
874 | {
875 | "Artist": "Kendrick Lamar",
876 | "SongTitle": "LOYALTY. FEAT. RIHANNA.",
877 | "AlbumTitle": "Joshua Roads",
878 | "Genre": "Classical",
879 | "Price": "9.99",
880 | "CriticRating": "8.81"
881 | },
882 | {
883 | "Artist": "Bruno Mars",
884 | "SongTitle": "That's What I Like",
885 | "AlbumTitle": "Ellen Unions",
886 | "Genre": "Jazz",
887 | "Price": "18.89",
888 | "CriticRating": "8.8"
889 | },
890 | {
891 | "Artist": "P!nk",
892 | "SongTitle": "What About Us",
893 | "AlbumTitle": "Bell Mission",
894 | "Genre": "Pop",
895 | "Price": "11.99",
896 | "CriticRating": "8.79"
897 | },
898 | {
899 | "Artist": "Miguel",
900 | "SongTitle": "Sky Walker",
901 | "AlbumTitle": "Stanley Locks",
902 | "Genre": "Classical",
903 | "Price": "17.99",
904 | "CriticRating": "8.78"
905 | },
906 | {
907 | "Artist": "21 Savage",
908 | "SongTitle": "Mad Stalkers",
909 | "AlbumTitle": "Henry Bridge",
910 | "Genre": "Jazz",
911 | "Price": "18.89",
912 | "CriticRating": "8.77"
913 | },
914 | {
915 | "Artist": "Sam Smith",
916 | "SongTitle": "Midnight Train",
917 | "AlbumTitle": "Aaron Haven",
918 | "Genre": "Reggae",
919 | "Price": "4.99",
920 | "CriticRating": "8.76"
921 | },
922 | {
923 | "Artist": "Daya",
924 | "SongTitle": "New",
925 | "AlbumTitle": "Gina Trafficway",
926 | "Genre": "Pop",
927 | "Price": "3.89",
928 | "CriticRating": "8.75"
929 | },
930 | {
931 | "Artist": "Niall Horan",
932 | "SongTitle": "Too Much To Ask",
933 | "AlbumTitle": "Duran Row",
934 | "Genre": "Classical",
935 | "Price": "0.89",
936 | "CriticRating": "8.74"
937 | },
938 | {
939 | "Artist": "XXXTENTACION",
940 | "SongTitle": "Look At Me!",
941 | "AlbumTitle": "Madison Freeway",
942 | "Genre": "Pop",
943 | "Price": "0.99",
944 | "CriticRating": "8.73"
945 | },
946 | {
947 | "Artist": "Migos",
948 | "SongTitle": "T-Shirt",
949 | "AlbumTitle": "Johnston Drive",
950 | "Genre": "Jazz",
951 | "Price": "6.99",
952 | "CriticRating": "8.72"
953 | },
954 | {
955 | "Artist": "Sam Smith",
956 | "SongTitle": "HIM",
957 | "AlbumTitle": "James Mews",
958 | "Genre": "Jazz",
959 | "Price": "0.99",
960 | "CriticRating": "8.71"
961 | },
962 | {
963 | "Artist": "Rae Sremmurd",
964 | "SongTitle": "Perplexing Pegasus",
965 | "AlbumTitle": "Tammy Station",
966 | "Genre": "Reggae",
967 | "Price": "3.99",
968 | "CriticRating": "8.7"
969 | },
970 | {
971 | "Artist": "Sam Smith",
972 | "SongTitle": "No Peace",
973 | "AlbumTitle": "Andrew Squares",
974 | "Genre": "Jazz",
975 | "Price": "0.89",
976 | "CriticRating": "8.69"
977 | },
978 | {
979 | "Artist": "Lil Pump",
980 | "SongTitle": "Boss",
981 | "AlbumTitle": "Ashley Plain",
982 | "Genre": "Country",
983 | "Price": "8.89",
984 | "CriticRating": "8.68"
985 | },
986 | {
987 | "Artist": "Thomas Rhett",
988 | "SongTitle": "Unforgettable",
989 | "AlbumTitle": "Kimberly Club",
990 | "Genre": "Country",
991 | "Price": "8.89",
992 | "CriticRating": "8.67"
993 | },
994 | {
995 | "Artist": "Lauv",
996 | "SongTitle": "I Like Me Better",
997 | "AlbumTitle": "White Brooks",
998 | "Genre": "Folk",
999 | "Price": "7.89",
1000 | "CriticRating": "8.66"
1001 | },
1002 | {
1003 | "Artist": "Shawn Mendes",
1004 | "SongTitle": "There's Nothing Holdin' Me Back",
1005 | "AlbumTitle": "Long Place",
1006 | "Genre": "Reggae",
1007 | "Price": "5.99",
1008 | "CriticRating": "8.65"
1009 | },
1010 | {
1011 | "Artist": "Sam Smith",
1012 | "SongTitle": "\"Baby",
1013 | "AlbumTitle": " You Make Me Crazy\"",
1014 | "Genre": "Powell Stream",
1015 | "Price": "Folk",
1016 | "CriticRating": "1.89"
1017 | },
1018 | {
1019 | "Artist": "Travis Scott",
1020 | "SongTitle": "beibs in the trap",
1021 | "AlbumTitle": "Sarah Place",
1022 | "Genre": "Classical",
1023 | "Price": "1.99",
1024 | "CriticRating": "8.63"
1025 | },
1026 | {
1027 | "Artist": "Drake",
1028 | "SongTitle": "Passionfruit",
1029 | "AlbumTitle": "Kelly Cliff",
1030 | "Genre": "Pop",
1031 | "Price": "7.99",
1032 | "CriticRating": "8.62"
1033 | },
1034 | {
1035 | "Artist": "SZA",
1036 | "SongTitle": "The Weekend",
1037 | "AlbumTitle": "Yates Terrace",
1038 | "Genre": "Jazz",
1039 | "Price": "15.89",
1040 | "CriticRating": "8.61"
1041 | },
1042 | {
1043 | "Artist": "21 Savage",
1044 | "SongTitle": "X (feat. Future)",
1045 | "AlbumTitle": "Cathy Views",
1046 | "Genre": "Country",
1047 | "Price": "13.99",
1048 | "CriticRating": "8.6"
1049 | },
1050 | {
1051 | "Artist": "Liam Payne",
1052 | "SongTitle": "Bedroom Floor",
1053 | "AlbumTitle": "Alejandro Spurs",
1054 | "Genre": "RNB",
1055 | "Price": "6.89",
1056 | "CriticRating": "8.59"
1057 | },
1058 | {
1059 | "Artist": "blackbear",
1060 | "SongTitle": "do re mi",
1061 | "AlbumTitle": "John Courts",
1062 | "Genre": "Classical",
1063 | "Price": "13.89",
1064 | "CriticRating": "8.58"
1065 | },
1066 | {
1067 | "Artist": "J. Cole",
1068 | "SongTitle": "No Role Modelz",
1069 | "AlbumTitle": "Wright Motorway",
1070 | "Genre": "Pop",
1071 | "Price": "8.89",
1072 | "CriticRating": "8.57"
1073 | },
1074 | {
1075 | "Artist": "Justin Bieber",
1076 | "SongTitle": "Friends (with BloodPop��)",
1077 | "AlbumTitle": "Jill Underpass",
1078 | "Genre": "Jazz",
1079 | "Price": "4.89",
1080 | "CriticRating": "8.56"
1081 | },
1082 | {
1083 | "Artist": "Rae Sremmurd",
1084 | "SongTitle": "Swang",
1085 | "AlbumTitle": "Joseph Streets",
1086 | "Genre": "RNB",
1087 | "Price": "1.99",
1088 | "CriticRating": "8.55"
1089 | },
1090 | {
1091 | "Artist": "DJ Snake",
1092 | "SongTitle": "A Different Way (with Lauv)",
1093 | "AlbumTitle": "Mitchell Forges",
1094 | "Genre": "Folk",
1095 | "Price": "10.89",
1096 | "CriticRating": "8.54"
1097 | },
1098 | {
1099 | "Artist": "Gucci Mane",
1100 | "SongTitle": "Curve (feat. The Weeknd)",
1101 | "AlbumTitle": "Hayes Plaza",
1102 | "Genre": "Jazz",
1103 | "Price": "6.89",
1104 | "CriticRating": "8.53"
1105 | },
1106 | {
1107 | "Artist": "GoldLink",
1108 | "SongTitle": "Crew",
1109 | "AlbumTitle": "Ryan Crossroad",
1110 | "Genre": "Folk",
1111 | "Price": "8.99",
1112 | "CriticRating": "8.52"
1113 | },
1114 | {
1115 | "Artist": "Famous Dex",
1116 | "SongTitle": "Pick It Up (feat. A$AP Rocky)",
1117 | "AlbumTitle": "Thomas Glens",
1118 | "Genre": "Rock",
1119 | "Price": "16.99",
1120 | "CriticRating": "8.51"
1121 | },
1122 | {
1123 | "Artist": "Amin��",
1124 | "SongTitle": "Caroline",
1125 | "AlbumTitle": "Wilson Ridges",
1126 | "Genre": "Country",
1127 | "Price": "14.89",
1128 | "CriticRating": "8.5"
1129 | },
1130 | {
1131 | "Artist": "DRAM",
1132 | "SongTitle": "Broccoli (feat. Lil Yachty)",
1133 | "AlbumTitle": "Robert Summit",
1134 | "Genre": "RNB",
1135 | "Price": "10.89",
1136 | "CriticRating": "8.49"
1137 | },
1138 | {
1139 | "Artist": "The Weeknd",
1140 | "SongTitle": "Starboy",
1141 | "AlbumTitle": "Kelli Springs",
1142 | "Genre": "Rock",
1143 | "Price": "19.99",
1144 | "CriticRating": "8.48"
1145 | },
1146 | {
1147 | "Artist": "Drake",
1148 | "SongTitle": "Portland",
1149 | "AlbumTitle": "Patrick Pines",
1150 | "Genre": "Classical",
1151 | "Price": "10.99",
1152 | "CriticRating": "8.47"
1153 | },
1154 | {
1155 | "Artist": "The Chainsmokers",
1156 | "SongTitle": "Closer",
1157 | "AlbumTitle": "Hernandez Pines",
1158 | "Genre": "Folk",
1159 | "Price": "2.99",
1160 | "CriticRating": "8.46"
1161 | },
1162 | {
1163 | "Artist": "Halsey",
1164 | "SongTitle": "Now Or Never",
1165 | "AlbumTitle": "Young Landing",
1166 | "Genre": "RNB",
1167 | "Price": "6.89",
1168 | "CriticRating": "8.45"
1169 | },
1170 | {
1171 | "Artist": "Tee Grizzley",
1172 | "SongTitle": "First Day Out",
1173 | "AlbumTitle": "Garcia Row",
1174 | "Genre": "Reggae",
1175 | "Price": "19.89",
1176 | "CriticRating": "8.44"
1177 | },
1178 | {
1179 | "Artist": "2 Chainz",
1180 | "SongTitle": "4:00 AM",
1181 | "AlbumTitle": "Edward Ranch",
1182 | "Genre": "Jazz",
1183 | "Price": "2.89",
1184 | "CriticRating": "8.43"
1185 | },
1186 | {
1187 | "Artist": "Lil Uzi Vert",
1188 | "SongTitle": "Money Longer",
1189 | "AlbumTitle": "Matthew Locks",
1190 | "Genre": "RNB",
1191 | "Price": "19.89",
1192 | "CriticRating": "8.42"
1193 | },
1194 | {
1195 | "Artist": "Lil Pump",
1196 | "SongTitle": "D Rose",
1197 | "AlbumTitle": "Derek Fall",
1198 | "Genre": "Classical",
1199 | "Price": "0.89",
1200 | "CriticRating": "8.41"
1201 | },
1202 | {
1203 | "Artist": "The Chainsmokers",
1204 | "SongTitle": "Something Just Like This",
1205 | "AlbumTitle": "Orr Harbors",
1206 | "Genre": "Jazz",
1207 | "Price": "11.89",
1208 | "CriticRating": "8.4"
1209 | },
1210 | {
1211 | "Artist": "Sam Smith",
1212 | "SongTitle": "Palace",
1213 | "AlbumTitle": "Sydney Spur",
1214 | "Genre": "Rock",
1215 | "Price": "16.89",
1216 | "CriticRating": "8.39"
1217 | },
1218 | {
1219 | "Artist": "Drake",
1220 | "SongTitle": "Fake Love",
1221 | "AlbumTitle": "Cherry Junctions",
1222 | "Genre": "Country",
1223 | "Price": "10.99",
1224 | "CriticRating": "8.38"
1225 | },
1226 | {
1227 | "Artist": "Post Malone",
1228 | "SongTitle": "No Option",
1229 | "AlbumTitle": "Luke Knolls",
1230 | "Genre": "Jazz",
1231 | "Price": "16.99",
1232 | "CriticRating": "8.37"
1233 | },
1234 | {
1235 | "Artist": "Sam Smith",
1236 | "SongTitle": "The Thrill Of It All",
1237 | "AlbumTitle": "Kelly Dam",
1238 | "Genre": "Pop",
1239 | "Price": "4.89",
1240 | "CriticRating": "8.36"
1241 | },
1242 | {
1243 | "Artist": "6LACK",
1244 | "SongTitle": "PRBLMS",
1245 | "AlbumTitle": "Shaw Pine",
1246 | "Genre": "RNB",
1247 | "Price": "8.89",
1248 | "CriticRating": "8.35"
1249 | },
1250 | {
1251 | "Artist": "Sam Smith",
1252 | "SongTitle": "Scars",
1253 | "AlbumTitle": "Brown Rapids",
1254 | "Genre": "Pop",
1255 | "Price": "6.89",
1256 | "CriticRating": "8.34"
1257 | },
1258 | {
1259 | "Artist": "Luke Combs",
1260 | "SongTitle": "When It Rains It Pours",
1261 | "AlbumTitle": "Herrera Mountain",
1262 | "Genre": "RNB",
1263 | "Price": "2.89",
1264 | "CriticRating": "8.33"
1265 | },
1266 | {
1267 | "Artist": "ZAYN",
1268 | "SongTitle": "\"I Don't Wanna Live Forever (Fifty Shades Darker) - From \"\"Fifty Shades Darker (Original Motion Picture Soundtrack)\"\"\"",
1269 | "AlbumTitle": "Robinson Parkways",
1270 | "Genre": "Classical",
1271 | "Price": "6.89",
1272 | "CriticRating": "8.32"
1273 | },
1274 | {
1275 | "Artist": "Kygo",
1276 | "SongTitle": "Kids in Love",
1277 | "AlbumTitle": "Armstrong Inlet",
1278 | "Genre": "Jazz",
1279 | "Price": "17.99",
1280 | "CriticRating": "8.31"
1281 | },
1282 | {
1283 | "Artist": "A Boogie Wit da Hoodie",
1284 | "SongTitle": "Undefeated (feat. 21 Savage)",
1285 | "AlbumTitle": "Stephanie Villages",
1286 | "Genre": "Country",
1287 | "Price": "4.89",
1288 | "CriticRating": "8.3"
1289 | },
1290 | {
1291 | "Artist": "Future",
1292 | "SongTitle": "Feed Me Dope",
1293 | "AlbumTitle": "Morrison Meadows",
1294 | "Genre": "Reggae",
1295 | "Price": "9.89",
1296 | "CriticRating": "8.29"
1297 | },
1298 | {
1299 | "Artist": "Metro Boomin",
1300 | "SongTitle": "No Complaints",
1301 | "AlbumTitle": "Jade Meadow",
1302 | "Genre": "RNB",
1303 | "Price": "0.89",
1304 | "CriticRating": "8.28"
1305 | },
1306 | {
1307 | "Artist": "YFN Lucci",
1308 | "SongTitle": "Everyday We Lit (feat. PnB Rock)",
1309 | "AlbumTitle": "Daniel Courts",
1310 | "Genre": "Country",
1311 | "Price": "2.99",
1312 | "CriticRating": "8.27"
1313 | },
1314 | {
1315 | "Artist": "NAV",
1316 | "SongTitle": "Myself",
1317 | "AlbumTitle": "Stephanie Mountain",
1318 | "Genre": "Classical",
1319 | "Price": "2.89",
1320 | "CriticRating": "8.26"
1321 | },
1322 | {
1323 | "Artist": "Calvin Harris",
1324 | "SongTitle": "Feels",
1325 | "AlbumTitle": "James Point",
1326 | "Genre": "Country",
1327 | "Price": "13.99",
1328 | "CriticRating": "8.25"
1329 | },
1330 | {
1331 | "Artist": "Zedd",
1332 | "SongTitle": "Stay (with Alessia Cara)",
1333 | "AlbumTitle": "Mcdaniel Spring",
1334 | "Genre": "Rock",
1335 | "Price": "17.99",
1336 | "CriticRating": "8.24"
1337 | },
1338 | {
1339 | "Artist": "Chance The Rapper",
1340 | "SongTitle": "No Problem (feat. Lil Wayne & 2 Chainz)",
1341 | "AlbumTitle": "Ellis Mountains",
1342 | "Genre": "RNB",
1343 | "Price": "9.89",
1344 | "CriticRating": "8.23"
1345 | },
1346 | {
1347 | "Artist": "Russ",
1348 | "SongTitle": "What They Want",
1349 | "AlbumTitle": "Myers Manors",
1350 | "Genre": "Pop",
1351 | "Price": "2.89",
1352 | "CriticRating": "8.22"
1353 | },
1354 | {
1355 | "Artist": "Jon Pardi",
1356 | "SongTitle": "Heartache On The Dance Floor",
1357 | "AlbumTitle": "Kevin Harbor",
1358 | "Genre": "Classical",
1359 | "Price": "9.89",
1360 | "CriticRating": "8.21"
1361 | },
1362 | {
1363 | "Artist": "21 Savage",
1364 | "SongTitle": "Run Up the Racks",
1365 | "AlbumTitle": "Wheeler Hills",
1366 | "Genre": "Reggae",
1367 | "Price": "2.89",
1368 | "CriticRating": "8.2"
1369 | },
1370 | {
1371 | "Artist": "Bryson Tiller",
1372 | "SongTitle": "Don't",
1373 | "AlbumTitle": "Harrell Turnpike",
1374 | "Genre": "Jazz",
1375 | "Price": "11.89",
1376 | "CriticRating": "8.19"
1377 | },
1378 | {
1379 | "Artist": "A Boogie Wit da Hoodie",
1380 | "SongTitle": "Say A'",
1381 | "AlbumTitle": "Kevin Route",
1382 | "Genre": "Classical",
1383 | "Price": "6.89",
1384 | "CriticRating": "8.18"
1385 | },
1386 | {
1387 | "Artist": "CNCO",
1388 | "SongTitle": "Reggaet�_n Lento (Remix) [CNCO & Little Mix]",
1389 | "AlbumTitle": "Kaufman Pines",
1390 | "Genre": "Classical",
1391 | "Price": "2.99",
1392 | "CriticRating": "8.17"
1393 | },
1394 | {
1395 | "Artist": "Ayo & Teo",
1396 | "SongTitle": "Rolex",
1397 | "AlbumTitle": "Laurie Flats",
1398 | "Genre": "Jazz",
1399 | "Price": "9.99",
1400 | "CriticRating": "8.16"
1401 | },
1402 | {
1403 | "Artist": "Bryson Tiller",
1404 | "SongTitle": "Exchange",
1405 | "AlbumTitle": "Martinez Freeway",
1406 | "Genre": "Pop",
1407 | "Price": "7.89",
1408 | "CriticRating": "8.15"
1409 | },
1410 | {
1411 | "Artist": "6LACK",
1412 | "SongTitle": "Ex Calling",
1413 | "AlbumTitle": "Tara Plain",
1414 | "Genre": "Country",
1415 | "Price": "6.89",
1416 | "CriticRating": "8.14"
1417 | },
1418 | {
1419 | "Artist": "Julia Michaels",
1420 | "SongTitle": "Issues",
1421 | "AlbumTitle": "Wolf Branch",
1422 | "Genre": "Rock",
1423 | "Price": "1.89",
1424 | "CriticRating": "8.13"
1425 | },
1426 | {
1427 | "Artist": "Lil Pump",
1428 | "SongTitle": "Flex Like Ouu",
1429 | "AlbumTitle": "Shaw Road",
1430 | "Genre": "Pop",
1431 | "Price": "12.99",
1432 | "CriticRating": "8.12"
1433 | },
1434 | {
1435 | "Artist": "Gucci Mane",
1436 | "SongTitle": "Both (feat. Drake)",
1437 | "AlbumTitle": "Emily Summit",
1438 | "Genre": "Rock",
1439 | "Price": "1.99",
1440 | "CriticRating": "8.11"
1441 | },
1442 | {
1443 | "Artist": "Tee Grizzley",
1444 | "SongTitle": "From The D To The A (feat. Lil Yachty)",
1445 | "AlbumTitle": "Kimberly Lights",
1446 | "Genre": "RNB",
1447 | "Price": "8.89",
1448 | "CriticRating": "8.1"
1449 | },
1450 | {
1451 | "Artist": "Drake",
1452 | "SongTitle": "One Dance",
1453 | "AlbumTitle": "Gutierrez Motorway",
1454 | "Genre": "Jazz",
1455 | "Price": "8.99",
1456 | "CriticRating": "8.09"
1457 | },
1458 | {
1459 | "Artist": "21 Savage",
1460 | "SongTitle": "Still Serving",
1461 | "AlbumTitle": "Ryan Ridge",
1462 | "Genre": "Rock",
1463 | "Price": "18.89",
1464 | "CriticRating": "8.08"
1465 | },
1466 | {
1467 | "Artist": "Young Thug",
1468 | "SongTitle": "pick up the phone",
1469 | "AlbumTitle": "Lynch Green",
1470 | "Genre": "Reggae",
1471 | "Price": "17.99",
1472 | "CriticRating": "8.07"
1473 | },
1474 | {
1475 | "Artist": "Noah Cyrus",
1476 | "SongTitle": "Again",
1477 | "AlbumTitle": "Rodriguez Via",
1478 | "Genre": "Pop",
1479 | "Price": "15.89",
1480 | "CriticRating": "8.06"
1481 | },
1482 | {
1483 | "Artist": "Khalid",
1484 | "SongTitle": "8TEEN",
1485 | "AlbumTitle": "Davis Stream",
1486 | "Genre": "Country",
1487 | "Price": "0.99",
1488 | "CriticRating": "8.05"
1489 | },
1490 | {
1491 | "Artist": "Cheat Codes",
1492 | "SongTitle": "No Promises (feat. Demi Lovato)",
1493 | "AlbumTitle": "Charles Lock",
1494 | "Genre": "Reggae",
1495 | "Price": "9.89",
1496 | "CriticRating": "8.04"
1497 | },
1498 | {
1499 | "Artist": "Hailee Steinfeld",
1500 | "SongTitle": "Most Girls",
1501 | "AlbumTitle": "Owen Forest",
1502 | "Genre": "Folk",
1503 | "Price": "12.99",
1504 | "CriticRating": "8.03"
1505 | },
1506 | {
1507 | "Artist": "Trippie Redd",
1508 | "SongTitle": "Love Scars",
1509 | "AlbumTitle": "Ibarra Wall",
1510 | "Genre": "Country",
1511 | "Price": "0.99",
1512 | "CriticRating": "8.02"
1513 | },
1514 | {
1515 | "Artist": "Khalid",
1516 | "SongTitle": "Saved",
1517 | "AlbumTitle": "Kurt Pike",
1518 | "Genre": "RNB",
1519 | "Price": "10.99",
1520 | "CriticRating": "8.01"
1521 | },
1522 | {
1523 | "Artist": "PnB Rock",
1524 | "SongTitle": "\"Horses (with PnB Rock",
1525 | "AlbumTitle": " Kodak Black & A Boogie Wit da Hoodie)\"",
1526 | "Genre": "Carroll Mountains",
1527 | "Price": "Pop",
1528 | "CriticRating": "18.99"
1529 | },
1530 | {
1531 | "Artist": "Mariah Carey",
1532 | "SongTitle": "All I Want for Christmas Is You",
1533 | "AlbumTitle": "Heather Well",
1534 | "Genre": "RNB",
1535 | "Price": "17.99",
1536 | "CriticRating": "7.99"
1537 | },
1538 | {
1539 | "Artist": "Ozuna",
1540 | "SongTitle": "Se Prepar� ",
1541 | "AlbumTitle": "Rogers Divide",
1542 | "Genre": "Rock",
1543 | "Price": "0.99",
1544 | "CriticRating": "7.98"
1545 | },
1546 | {
1547 | "Artist": "Sam Smith",
1548 | "SongTitle": "One Day At A Time",
1549 | "AlbumTitle": "Daniel Mission",
1550 | "Genre": "Pop",
1551 | "Price": "13.99",
1552 | "CriticRating": "7.97"
1553 | },
1554 | {
1555 | "Artist": "Calvin Harris",
1556 | "SongTitle": "Slide",
1557 | "AlbumTitle": "Michael Village",
1558 | "Genre": "Classical",
1559 | "Price": "13.99",
1560 | "CriticRating": "7.96"
1561 | },
1562 | {
1563 | "Artist": "21 Savage",
1564 | "SongTitle": "Darth Vader",
1565 | "AlbumTitle": "Tyler Greens",
1566 | "Genre": "Jazz",
1567 | "Price": "3.89",
1568 | "CriticRating": "7.95"
1569 | },
1570 | {
1571 | "Artist": "Selena Gomez",
1572 | "SongTitle": "Fetish (feat. Gucci Mane)",
1573 | "AlbumTitle": "Christina Pass",
1574 | "Genre": "Reggae",
1575 | "Price": "7.99",
1576 | "CriticRating": "7.94"
1577 | },
1578 | {
1579 | "Artist": "Brett Young",
1580 | "SongTitle": "In Case You Didn't Know",
1581 | "AlbumTitle": "Gene Coves",
1582 | "Genre": "Rock",
1583 | "Price": "14.89",
1584 | "CriticRating": "7.93"
1585 | },
1586 | {
1587 | "Artist": "Sam Smith",
1588 | "SongTitle": "Stay With Me",
1589 | "AlbumTitle": "Garcia Skyway",
1590 | "Genre": "Pop",
1591 | "Price": "0.89",
1592 | "CriticRating": "7.92"
1593 | },
1594 | {
1595 | "Artist": "Kygo",
1596 | "SongTitle": "It Ain't Me (with Selena Gomez)",
1597 | "AlbumTitle": "Jennifer Motorway",
1598 | "Genre": "RNB",
1599 | "Price": "18.99",
1600 | "CriticRating": "7.91"
1601 | }
1602 | ]
--------------------------------------------------------------------------------