<?php
/**
 *        discogs class
 *
 *         comment
 *
 *         @package    elpi
 *        @author   starenka <oggova@starenka.net>
 *        @copyright  starenka 2008
 *        @since    Sun Jan 20 19:53:49 CET 2008
 *        @internal   charset: utf-8
 *        @internal    PHP ver: 5+
 *        @version    1.0
 *
 */

class Discogs
{

    private static function 
grab_url($url)
    {
        
$content "";
        
$ch curl_init ();
        
curl_setopt ($chCURLOPT_RETURNTRANSFER1);
        
curl_setopt ($chCURLOPT_URL$url);
        
curl_setopt ($chCURLOPT_TIMEOUT60);
        
curl_setopt ($chCURLOPT_ENCODING'gzip');
        
$content curl_exec ($ch);
        
curl_close ($ch);
        return(
$content);
    }


    private static function 
get_xml($id)
    {
        
$api_key '7a73e2f639';
        if(
is_numeric($id))
        {
            return 
Discogs::grab_url("http://www.discogs.com/release/$id?f=xml&api_key=$api_key");
/*            if($stream = gzopen("http://www.discogs.com/release/$id?f=xml&api_key=$api_key",'r'))
            {
            $response = gzread($stream, 10000);
            gzclose($stream);
            return $response;
            }
            else return false;*/
        
}
        else return 
false;
    }


    private static function 
parse_release_xml($data)
    {
        try { 
$xml = new SimpleXMLElement($data); }
        catch (
Exception $e) { return false; }

        
$release = array('artists'=>array(),
        
'extraartists'=>array(),
        
'title'=>array(),
        
'labels'=>array(),
        
'genres'=>array(),
        
'styles'=>array(),
        
'formats'=>array(),
        
'country'=>array(),
        
'released'=>array(),
        
'tracks'=>array());

        foreach(
$xml->release->artists->artist as $artist$release['artists'][] = (string)$artist->name;
        if(
$xml->release->extraartists)
        {
            foreach(
$xml->release->extraartists->artist as $artist$release['extraartists'][] = (string)$artist->role.' by '.(string)$artist->name;
        }
        foreach(
$xml->release->title as $title$release['title'] = (string)$title;
        foreach(
$xml->release->labels->label as $label$release['labels'][] = (string)$label['name'].' ('.(string)$label['catno'].')';
        foreach(
$xml->release->genres->genre as $genre$release['genres'][] = (string)$genre;
        foreach(
$xml->release->styles->style as $style$release['styles'][] = (string)$style;
        foreach(
$xml->release->tracklist->track as $track)
        {
            
$xtra = array();
            if(
$track->extraartists)
            {
                foreach(
$track->extraartists->artist as $artist$xtra[] = '('.(string)$artist->role.' by '.(string)$artist->name.')';
            }
            
$tartist = (!$track->artists)?'':(string)$track->artists->artist[0]->name.' - ';
            
$xtra_string = (sizeof($xtra)>0?" ".implode(", ",$xtra):'');
            
$duration_string = ($track->duration != '')?" (".(string)$track->duration.")":'';
            
$release['tracks'][] = str_pad((string)$track->position,5,' ',STR_PAD_RIGHT).$tartist.(string)$track->title.$duration_string.$xtra_string;
        }
        foreach(
$xml->release->formats->format as $format$release['formats'][] = (string)$format['qty'].' x '.(string)$format['name'];
        
$rel explode('-',(string)$xml->release->released);
        
$release['released'] = $rel[0];
        
$release['country'] = (string)$xml->release->country;
        return 
$release;
    }





    public static function 
release2json($id)
    {
        if(
$response Discogs::get_xml($id))
        {
            if(
$data Discogs::parse_release_xml($response)) return json_encode($data);
            else return 
'error';
        }
        else return 
'error';
    }
    
    public static function 
release2bbcode($id)
    {
        if(
$response Discogs::get_xml($id))
        {
            if(
$release Discogs::parse_release_xml($response))
            {
                echo 
"[size=14pt][b]".$release['artists'][0]." - ".$release['title']." [".$release['released']."][/b][/size]\n\n";
                echo 
"[img]release cover goes here[/img]\n\n";
                echo 
"[url=http://www.discogs.com/release/$id]Discogs[/url]\n";
                if(
sizeof($release['labels'])>0) echo "Label:\t[i]".implode(', ',$release['labels'])."[/i]\n";
                if(
sizeof($release['formats'])>0) echo "Format:\t[i]".implode(', ',$release['formats'])."[/i]\n";
                echo 
"Country:\t[i]".$release['country']."[/i]\n";
                echo 
"Released:\t[i]".$release['released']."[/i]\n";
                if(
sizeof($release['genres'])>0) echo "Genre:\t[i]".implode(', ',$release['genres'])."[/i]\n";
                if(
sizeof($release['styles'])>0) echo "Style:\t[i]".implode(', ',$release['styles'])."[/i]\n";
                if(
sizeof($release['extraartists'])>0) echo "Extra nfo:\t[i]".implode(', ',$release['extraartists'])."[/i]\n";
                echo 
"\nBitrate:\t[i][b]xxx kbps[/b][/i]\n";
                echo 
"Size:\t[i][b]xxx MB[/b][/i]\n";
                echo 
"\n[b]Tracklisting[/b]:\n".implode("\n",$release['tracks']);
            }
            else return 
'error fetching release...';
        }
        else return 
'error fetching release...';
    }
}