<?PHP
 
/**
 
 * simple mixcloud api reader
 
 * gets the uploads from a given user or given user and playlist
 
 * returns the embed code for webpages
 
 * Important note: this class always returns an iframe with the mixcloud player. There is no way to access the audio stream in any other way
 
 * @author maestro300
 
 * @version 2.0
 
 * @copyright Copyright (c) 2015 1.0, 2017 1.5 , 2022 2.0 Lukas maestro300 B. 
 
 * @license http://opensource.org/licenses/GPL-3.0 GNU Public License
 
 */
 
class mixcloud_player
 
{
 
    
 
    private $user;
 
    private $plslug;
 
    private $api;
 
    private $dark;
 
    private $hidecover;
 
    private $playlist;
 
    /**
 
     * initial settings for the mixcloud api
 
     * @param string $mixclouduser mixcloudusername
 
     */
 
    function __construct($mixclouduser) {
 
        $this->user = $mixclouduser;
 
        $this->Api_Obj();
 
        $this->dark = 1;
 
        $this->hidecover = 1;
 
    }
 
    
 
    /**
 
     * generates the api object from mixcloud json
 
     */
 
    private function Api_Obj($what = "", $titel = "")
 
    {
 
        $titel = strtolower(preg_replace('/[^A-Za-z0-9\-]/', '', str_replace(' ', '-', $titel)));
 
        switch($what)
 
        {
 
           case "show": $mixcloud = json_decode(file_get_contents("http://api.mixcloud.com/".$this->user."/".$titel."/")); break;
 
           case "playlist": $mixcloud = json_decode(file_get_contents("http://api.mixcloud.com/".$this->user."/playlists/".$titel."/cloudcasts/")); break;
 
           case "cloudcasts": $mixcloud = json_decode(file_get_contents("http://api.mixcloud.com/".$this->user."/cloudcasts/")); break;
 
           default:  $mixcloud = json_decode(file_get_contents("http://api.mixcloud.com/".$this->user."/")); break;
 
        }
 
        $this->api = $mixcloud;
 
    }
 
    
 
    /**
 
     * sets the player style for the object
 
     * mixcloud currently supports a light and dark player
 
     * also the option hidecover can determin how the cover is shown in the player
 
     * @param boolean [$hidecover = true] sets the width of the iframe - defaut: true
 
     * @param boolean [$dark = false] sets the height of the iframe - default: false
 
     * @return string html player 
 
     */
 
    function setPlayerstyle($dark = false, $hidecover = true)
 
    {
 
            $this->dark = (int)!$dark;
 
            $this->hidecover = (int)$hidecover;
 
    }
 
 
    /**
 
     * get's the latest mixcloud upload (this the first entry in the mixcloud api obj);
 
     * @param string [$witdh = "100%"] sets the width of the iframe - defaut: 100%
 
     * @param string [$height= "100%"] sets the height of the iframe - default: 120
 
     * @return string html player 
 
     */
 
    function getLatest_Player($witdh = "100%", $height = "120")
 
    {
 
        $this->api_obj("cloudcasts");
 
        if(isset($this->playlist))
 
        {
 
            $this->api_obj("playlist", $this->playlist);
 
        }
 
        $player = json_decode(file_get_contents(str_replace("www", "api", $this->api->data[0]->url."embed-json/")));
 
        return str_replace(array('hide_cover=1', 'light=1', 'width="100%"', 'height="120"'), array('hide_cover='.$this->hidecover, 'light='.$this->dark, 'width="'.$witdh.'"', 'height="'.$height.'"'), $player->html); 
 
          
 
    }
 
                   
 
    /**
 
     * legacy function
 
     * get's the latest mixcloud upload (this the first entry in the mixcloud api obj);
 
     * @param  int $offse between 1 and x for the offset (1 = latest mixcloud upload, 2 = second latest upload etc)
 
     * @return string html player
 
     */      
 
    function get_latest_player($witdh = "100%", $height = "120")
 
    {
 
        return $this->getLatest_Player($witdh, $height); 
 
    }
 
    
 
    /**
 
     * get's a specifig show by title
 
     * @param string showname
 
     * @param string [$witdh = "100%"] sets the width of the iframe - defaut: 100%
 
     * @param string [$height= "100%"] sets the height of the iframe - default: 120
 
     * @return string html player 
 
     */ 
 
    function getShow($showtitle, $witdh = "100%", $height = "120")
 
    {
 
        $this->Api_Obj("show", $showtitle);
 
        $player = json_decode(file_get_contents(str_replace("www", "api", $this->api->url."embed-json/")));
 
        return str_replace(array('hide_cover=1', 'light=1', 'width="100%"', 'height="120"'), array('hide_cover='.$this->hidecover, 'light='.$this->dark, 'width="'.$witdh.'"', 'height="'.$height.'"'), $player->html); 
 
    }
 
    
 
    /**
 
     * gets all cloudcast as php object
 
     * @return object
 
     */                
 
    function getCloudcastobj()
 
    {
 
        $this->Api_Obj("cloudcasts");
 
        return $this->api; 
 
    }
 
    
 
    /**
 
     * get Playlist object
 
     * @return object
 
     */   
 
    function getPlaylist_Obj()
 
    {
 
        $this->api_obj("playlist", $this->playlist);
 
        return $this->api;
 
    }
 
    
 
    /**
 
     * sets the Playlist by title
 
     */   
 
    function setPlaylist($playlisttitel)
 
    {
 
        $this->playlist = $playlisttitel;
 
    }
 
                     
 
    /**
 
     * returns a specific player
 
     * @param  int $offse between 1 and x for the offset (1 = latest mixcloud upload, 2 = second latest upload etc)
 
     * @return string html player
 
     */
 
    function getPlayer($offset = 1, $witdh = "100%", $height = "120")
 
    {
 
        $this->api_obj("cloudcasts");
 
        if(isset($this->playlist))
 
        {
 
            $this->api_obj("playlist", $this->playlist);
 
        }
 
        
 
        if($offset-1 > count($this->api->data))
 
        {
 
           throw new Exception('Out of Range - Please use integer > 0 and < '.count($this->api->data));
 
        }
 
        else
 
        {
 
            $player = json_decode(file_get_contents(str_replace("www", "api", $this->api->data[$offset-1]->url."embed-json/")));
 
return str_replace(array('hide_cover=1', 'light=1', 'width="100%"', 'height="120"'), array('hide_cover='.$this->hidecover, 'light='.$this->dark, 'width="'.$witdh.'"', 'height="'.$height.'"'), $player->html); 
 
        }
 
    }
 
    
 
    /**
 
     * legacy function
 
     * returns a specific player
 
     * @param  int $offse between 1 and x for the offset (1 = latest mixcloud upload, 2 = second latest upload etc)
 
     * @return string html player
 
     */
 
    function get_player($offset = 1, $witdh = "100%", $height = "120")
 
    {
 
        return $this->getPlayer($offset, $witdh,  $height);
 
    }
 
    
 
    function getUser()
 
    {
 
        $this->api_obj();
 
        return $this->api;
 
    }    
 
    
 
    function get_user()
 
    {
 
        return $this->getUser()
 
    }
 
    
 
    function getUser_HTML()
 
    {
 
        $this->api_obj();
 
        $html = '<div style="box-sizing: border-box; background-color:#FCFCFC; border:1px solid #D7D7D7; height:120px; color:#555555">';
 
        $html .= '<img src="'.$this->api->pictures->large.'" style="float:left; height:120px; margin-right:10px;">';
 
        $html .= '<h2 style="margin:2px;">'.$this->api->username.'</h2>';
 
        $html .= '<p>'.$this->api->biog.'</p>';
 
        $html .= 'City: '.$this->api->city;
 
        $html .= ' - Country: '.$this->api->country;
 
        $html .= ' - Favorite Count: '.$this->api->favorite_count;
 
        $html .= ' - Listen Count '.$this->api->listen_count;
 
        $html .= ' - Cloudcasts: '.$this->api->cloudcast_count;
 
        $html .= '</div>';
 
        return $html;
 
    }
 
                      
 
                   
 
                   
 
    /**
 
     * returns the count of the available cloudcast as int
 
     * return int
 
     */               
 
    function getCount()
 
    {
 
        $this->api_obj("cloudcasts");
 
        if(isset($this->playlist))
 
        {
 
            $this->api_obj("playlist", $this->playlist);
 
        }
 
        return count($this->api->data) + 1;
 
    }
 
    
 
    /**
 
     * legacy function
 
     * the count of the available cloudcast as int
 
     * return int
 
     */                
 
    function get_count()
 
    {
 
        return $this->getCount();
 
    }            
 
                   
 
    /**
 
     * get's the latest mixcloud upload (this the first entry in the mixcloud api obj);
 
     * @return string html player 
 
     */    
 
    function __toString()
 
    {
 
        return $this->getLatest_Player();
 
    }
 
    
 
    /**
 
     * returns the mixcloud api obj
 
     * @return object the mixcloud json obj
 
     */
 
    function getApi_Obj()
 
    {
 
        return $this->api;    
 
    }   
 
}
 
?>
 
 |