Pitchfork Review Score Scraper

Give an album name and get back the Pitchfork album review score. author(s): Luke Karrys

HTML

<h4>Query</h4>
<p>Artist: <span id="artist">wil</span></p>
<p>Album: <span id="album">yankee</span></p>
<hr/>
<h4>Result</h4>
<p>Artist: <span id="result_artist"></span></p>
<p>Album: <span id="result_album"></span></p>
<p>Score: <span id="score"></span></p>

JavaScript

(function($, undefined) {

    function sanitize(str) {
        return str.toLowerCase();
    }

    function normalizeP4kResult(result) {
        var parts = result.split(' - '),
            artist = parts[0],
            album = parts[1];

        return {
            artist: sanitize(artist),
            album: sanitize(album)
        };
    }

    function returnResult(obj) {
        return $.extend({
            url: obj.url
        }, normalizeP4kResult(obj.name));
    }

    function getAlbumUrl(data, textStatus, xhr) {
        
        var searchData = data.value.items[0].json,
            reviews = {},
            theResult = {};

        // Find the reviews object
        for (var i = 0, m = searchData.length; i < m; i++) {
            if (searchData[i].label.toLowerCase() === "reviews") {
                reviews = searchData[i];
                break;
            }
        }

        if (!$.isEmptyObject(reviews) && !$.isEmptyObject(reviews.objects)) {
            // We have results
            reviews = (reviews.objects.length > 0) ? reviews.objects : [reviews.objects];

            if (reviews.length === 1) {
                // Only 1 result, use it
                theResult = returnResult(reviews[0]);
            } else {
                for (var i = 0, m = reviews.length; i < m; i++) {
                    var p4kResult = normalizeP4kResult(reviews[i].name),
                        p4kArtist = p4kResult.artist,
                        p4kAlbum = p4kResult.album;

                    if ((p4kArtist === artist || artist === '') && (p4kAlbum === album || album === '')) {
                        // we found an exact match!
                        theResult = returnResult(reviews[i]);
                        break;
                    }
                }
            }

            if ($.isEmptyObject(theResult)) {
                // No exact match was found for the multiple results
                // Might as well use pitchfork's top match
              ...