Subversion Repositories cheapmusic

Rev

Rev 11 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php

// BUGBUG {"message": "You are making requests too quickly."}

function findDiscogsMaster($str) {
    $vendors = Vendors::getInstance();
    $config = $vendors->getVendor(Vendors::DISCOGS);
    
    $_SESSION["discogs"] = "";

    $url = "https://api.discogs.com/database/search?";
    $url .= "token=";
    $url .= $config['token'];
    if (empty($_SESSION["barcode"]['Type'])) {
        $url .= "&type=master";
        $url .= "&q=";
        $url .= urlencode($str);
    } else {
        $url .= "&barcode=";
        $url .= $_SESSION["barcode"]['Value'];
    }

    $originalUserAgent = ini_get('user_agent');
    ini_set('user_agent', $config['userAgent']);
        $searchResp = file_get_contents($url);
        $searchResp = utf8_encode($searchResp);
        $searchResp = json_decode($searchResp);

    $_SESSION["discogs"] .= "<div class=\"d-flex bg-secondary\">";

    if (!empty($searchResp->{'message'})) {
        if ($searchResp->{'message'} == "You are making requests too quickly.") {
// bugbug
            ini_set('user_agent', $originalUserAgent);
            return;
        }
    }

    if ($searchResp->{'pagination'}->{'items'} < 1) {
        ini_set('user_agent', $originalUserAgent);
        return;
    }

    $masterCount = 0;
    $processedMasters = [];
    foreach ($searchResp->{'results'} as $searchey => $searchValue) {
        if ($searchValue->{'type'} != "master" && empty($_SESSION["barcode"]['Type'])) {
            continue;
        }

        if (++$masterCount > 5) {
            break;
        }

        if (in_array($searchValue->{'master_id'}, $processedMasters)) {
            continue;
        }
        $processedMasters[] = $searchValue->{'master_id'};

        $masterResp = file_get_contents($searchValue->{'master_url'});
            $masterResp = utf8_encode($masterResp);
        $masterResp = json_decode($masterResp);

        if (!empty($searchResp->{'message'})) {
            if ($searchResp->{'message'} == "You are making requests too quickly.") {
// bugbug
                ini_set('user_agent', $originalUserAgent);
                return;
            }
        }

        $_SESSION["discogs"] .= "<div class=\"p-2 flex-fill bg-info\">";
        $_SESSION["discogs"] .= processMaster($masterResp, $searchValue->{'thumb'}, $masterCount);
        $_SESSION["discogs"] .= "</div>";

    }

    $_SESSION["discogs"] .= "</div>";


    ini_set('user_agent', $originalUserAgent);
    return;
}

function processMaster($master, $thumbnail, $cnt) {
    $str = "<img class=\"img-fluid\" src=\"" . $thumbnail . "\" alt=\"Discogs Master Thumbnail\">";
    $str .= "<table>";
    $str .= "<tr><td>Title:</td><td>" . $master->{'title'} . "</td></tr>";

    $artists = [];
    foreach ($master->{'artists'} as $key => $value) {
        $artists[] = trim(preg_replace('/\([0-9]+\)$/', "", $value->{'name'}));
    }
    $str .= "<tr><td>Artist:</td><td>" . join(", ", $artists) . "</td></tr>";

    $str .= "<tr><td>Year:</td><td>" . $master->{'year'} . "</td></tr>";

    $genres = [];
    foreach ($master->{'genres'} as $key => $value) {
        $genres[] =  $value;
    }
    $str .= "<tr><td>Genre:</td><td>" . join(", ", $genres) . "</td></tr>";

    if (isset($master->{'styles'})) {
        $styles = [];
        foreach ($master->{'styles'} as $key => $value) {
            $styles[] = $value;
        }
    }
    $str .= "<tr><td>Style:</td><td>" . join(", ", $styles) . "</td></tr>";
    $str .= "<tr><td colspan=\"2\"><span class=\"font-weight-lighter small\">(Data provided by <a href=\"" . $master->{'uri'} . "\" target=\"_blank\">Discogs)</a></span></td></tr>";
    $str .= "</table>";

    $str .= "<button id=\"track" . $cnt . "\" type=\"button\" class=\"btn btn-primary small\" data-toggle=\"collapse\" data-target=\"#trackCollapse" . $cnt . "\">Tracks</button>";
    $str .= "<div id=\"trackCollapse" . $cnt . "\" class=\"collapse\">";
    $str .= "<ol>";
    foreach ($master->{'tracklist'} as $key => $value) {
        $str .= "<li>" . $value->{'title'};

        $trackArtists = [];
        if (isset($value->{'artists'})) {
            foreach ($value->{'artists'} as $taKey => $taValue) {
                $trackArtists[] = trim(preg_replace('/\([0-9]+\)$/', "", $taValue->{'name'}));
            }
            if (count($trackArtists)) {
                $str .= " - " . join(", ", $trackArtists);
            }
        }

        if (!empty($value->{'duration'})) {
            $str .= " [" . $value->{'duration'} . "]";
        }

        $str .= "</li>";
    }
    $str .= "</ol></div>";
    
    return $str;
}