auth = $auth;
$this->fullAuth = $fullAuth;
$this->config = $config;
}
/**
* Tag an album using a list of user supplied tags (Requires full auth)
* @param array $methodVars An array with the following required values: artist, track, tags
* @return boolean
*/
public function addTags($methodVars) {
// Only allow full authed calls
if ( $this->fullAuth == TRUE ) {
// Check for required variables
if ( !empty($methodVars['artist']) && !empty($methodVars['track']) && !empty($methodVars['tags']) ) {
// If the tags variables is an array build a CS list
if ( is_array($methodVars['tags']) ) {
$tags = '';
foreach ( $methodVars['tags'] as $tag ) {
$tags .= $tag.',';
}
$tags = substr($tags, 0, -1);
}
else {
$tags = $methodVars['tags'];
}
$methodVars['tags'] = $tags;
$vars = array(
'method' => 'track.addtags',
'api_key' => $this->auth->apiKey,
'sk' => $this->auth->sessionKey
);
$vars = array_merge($vars, $methodVars);
$sig = $this->apiSig($this->auth->secret, $vars);
$vars['api_sig'] = $sig;
if ( $call = $this->apiPostCall($vars) ) {
return TRUE;
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist, track and tags varialbes in the call for this method');
return FALSE;
}
}
else {
// Give a 92 error if not fully authed
$this->handleError(92, 'Method requires full auth. Call auth.getSession using lastfmApiAuth class');
return FALSE;
}
}
/**
* Ban a track for a given user profile. This needs to be supplemented with a scrobbling submission containing the 'ban' rating (see the audioscrobbler API) (Requires full auth)
* @param array $methodVars An array with the following required values: artist, track
* @return boolean
*/
public function ban($methodVars) {
// Only allow full authed calls
if ( $this->fullAuth == TRUE ) {
// Check for required variables
if ( !empty($methodVars['artist']) && !empty($methodVars['track']) ) {
$vars = array(
'method' => 'track.ban',
'api_key' => $this->auth->apiKey,
'sk' => $this->auth->sessionKey
);
$vars = array_merge($vars, $methodVars);
$sig = $this->apiSig($this->auth->secret, $vars);
$vars['api_sig'] = $sig;
if ( $call = $this->apiPostCall($vars) ) {
return TRUE;
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist and track varialbes in the call for this method');
return FALSE;
}
}
else {
// Give a 92 error if not fully authed
$this->handleError(92, 'Method requires full auth. Call auth.getSession using lastfmApiAuth class');
return FALSE;
}
}
/**
* Get the metadata for a track on Last.fm using the artist/track name or a musicbrainz id
* @param array $methodVars An array with the following required values: artist or mbid, track
* @return array
*/
public function getInfo($methodVars) {
$vars = array(
'method' => 'track.getinfo',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
$info['id'] = (string) $call->track->id;
$info['name'] = (string) $call->track->name;
$info['mbid'] = (string) $call->track->mbid;
$info['url'] = (string) $call->track->url;
$info['duration'] = (string) $call->track->duration;
$info['streamable'] = (string) $call->track->streamable;
$info['fulltrack'] = (string) $call->track->streamable['fulltrack'];
$info['listeners'] = (string) $call->track->listeners;
$info['playcount'] = (string) $call->track->playcount;
$info['artist']['name'] = (string) $call->track->artist->name;
$info['artist']['mbid'] = (string) $call->track->artist->mbid;
$info['artist']['url'] = (string) $call->track->artist->url;
$info['album']['position'] = (string) $call->track->album['position'];
$info['album']['artist'] = (string) $call->track->album->artist;
$info['album']['title'] = (string) $call->track->album->title;
$info['album']['mbid'] = (string) $call->track->album->mbid;
$info['album']['url'] = (string) $call->track->album->url;
$info['album']['image']['small'] = (string) $call->track->album->image[0];
$info['album']['image']['medium'] = (string) $call->track->album->image[1];
$info['album']['image']['large'] = (string) $call->track->album->image[2];
$i = 0;
foreach ( $call->track->toptags->tag as $tag ) {
$info['toptags'][$i]['name'] = (string) $tag->name;
$info['toptags'][$i]['url'] = (string) $tag->url;
$i++;
}
$info['wiki']['published'] = (string) $call->track->wiki->published;
$info['wiki']['summary'] = (string) $call->track->wiki->summary;
$info['wiki']['content'] = (string) $call->track->wiki->content;
return $info;
}
else {
return FALSE;
}
}
/**
* Get the similar tracks for this track on Last.fm, based on listening data
* @param array $methodVars An array with the following required values: artist, track
* @return array
*/
public function getSimilar($methodVars) {
// Check for required variables
if ( !empty($methodVars['artist']) && !empty($methodVars['track']) ) {
$vars = array(
'method' => 'track.getsimilar',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
if ( count($call->similartracks->track) > 0 ) {
$i = 0;
foreach ( $call->similartracks->track as $track ) {
$similar[$i]['name'] = (string) $track->name;
$similar[$i]['match'] = (string) $track->match;
$similar[$i]['mbid'] = (string) $track->mbid;
$similar[$i]['url'] = (string) $track->url;
$similar[$i]['streamable'] = (string) $track->streamable;
$similar[$i]['fulltrack'] = (string) $track->streamable['fulltrack'];
$similar[$i]['artist']['name'] = (string) $track->artist->name;
$similar[$i]['artist']['mbid'] = (string) $track->artist->mbid;
$similar[$i]['artist']['url'] = (string) $track->artist->url;
$similar[$i]['images']['small'] = (string) $track->image[0];
$similar[$i]['images']['medium'] = (string) $track->image[1];
$similar[$i]['images']['large'] = (string) $track->image[2];
$i++;
}
return $similar;
}
else {
$this->handleError(90, 'This track has no similar tracks');
return FALSE;
}
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist and track varialbes in the call for this method');
return FALSE;
}
}
/**
* Get the tags applied by an individual user to a track on Last.fm (Requires full auth)
* @param array $methodVars An array with the following required values: artist, track
* @return array
*/
public function getTags($methodVars) {
// Only allow full authed calls
if ( $this->fullAuth == TRUE ) {
// Check for required variables
if ( !empty($methodVars['artist']) && !empty($methodVars['track']) ) {
$vars = array(
'method' => 'track.gettags',
'api_key' => $this->auth->apiKey,
'sk' => $this->auth->sessionKey
);
$vars = array_merge($vars, $methodVars);
$sig = $this->apiSig($this->auth->secret, $vars);
$vars['api_sig'] = $sig;
if ( $call = $this->apiGetCall($vars) ) {
if ( count($call->tags->tag) > 0 ) {
$tags['artist'] = (string) $call->tags['artist'];
$tags['track'] = (string) $call->tags['track'];
$i = 0;
foreach ( $call->tags->tag as $tag ) {
$tags['tags'][$i]['name'] = (string) $tag->name;
$tags['tags'][$i]['url'] = (string) $tag->url;
$i++;
}
return $tags;
}
else {
$this->handleError(90, 'The user has no tags on this track');
return FALSE;
}
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist and track varialbes in the call for this method');
return FALSE;
}
}
else {
// Give a 92 error if not fully authed
$this->handleError(92, 'Method requires full auth. Call auth.getSession using lastfmApiAuth class');
return FALSE;
}
}
/**
* Get the top fans for this track on Last.fm, based on listening data
* @param array $methodVars An array with the following required values: artist, track
* @return array
*/
public function getTopFans($methodVars) {
// Check for required variables
if ( !empty($methodVars['artist']) && !empty($methodVars['track']) ) {
$vars = array(
'method' => 'track.gettopfans',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
if ( count($call->topfans->user) > 0 ) {
$topFans['artist'] = (string) $call->topfans['artist'];
$topFans['track'] = (string) $call->topfans['track'];
$i = 0;
foreach ( $call->topfans->user as $user ) {
$topFans['users'][$i]['name'] = (string) $user->name;
$topFans['users'][$i]['url'] = (string) $user->url;
$topFans['users'][$i]['image']['small'] = (string) $user->image[0];
$topFans['users'][$i]['image']['medium'] = (string) $user->image[1];
$topFans['users'][$i]['image']['large'] = (string) $user->image[2];
$topFans['users'][$i]['weight'] = (string) $user->weight;
$i++;
}
return $topFans;
}
else {
$this->handleError(90, 'This track has no fans');
return FALSE;
}
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist and track varialbes in the call for this method');
return FALSE;
}
}
/**
* Get the top tags for this track on Last.fm, ordered by tag count
* @param array $methodVars An array with the following required values: artist, track
* @return array
*/
public function getTopTags($methodVars) {
// Check for required variables
if ( !empty($methodVars['artist']) && !empty($methodVars['track']) ) {
$vars = array(
'method' => 'track.gettoptags',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
if ( count($call->toptags->tag) > 0 ) {
$topTags['artist'] = (string) $call->toptags['artist'];
$topTags['track'] = (string) $call->toptags['track'];
$i = 0;
foreach ( $call->toptags->tag as $tag ) {
$topTags['tags'][$i]['name'] = (string) $tag->name;
$topTags['tags'][$i]['count'] = (string) $tag->count;
$topTags['tags'][$i]['url'] = (string) $tag->url;
$i++;
}
return $topTags;
}
else {
$this->handleError(90, 'This track has no tags');
return FALSE;
}
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist and track varialbes in the call for this method');
return FALSE;
}
}
/**
* Love a track for a user profile. This needs to be supplemented with a scrobbling submission containing the 'love' rating (see the audioscrobbler API) (Requires full auth)
* @param array $methodVars An array with the following required values: artist, track
* @return boolean
*/
public function love($methodVars) {
// Only allow full authed calls
if ( $this->fullAuth == TRUE ) {
// Check for required variables
if ( !empty($methodVars['artist']) && !empty($methodVars['track']) ) {
$vars = array(
'method' => 'track.love',
'api_key' => $this->auth->apiKey,
'sk' => $this->auth->sessionKey
);
$vars = array_merge($vars, $methodVars);
$sig = $this->apiSig($this->auth->secret, $vars);
$vars['api_sig'] = $sig;
if ( $call = $this->apiPostCall($vars) ) {
return TRUE;
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist and track varialbes in the call for this method');
return FALSE;
}
}
else {
// Give a 92 error if not fully authed
$this->handleError(92, 'Method requires full auth. Call auth.getSession using lastfmApiAuth class');
return FALSE;
}
}
/**
* Remove a user's tag from a track (Requires full auth)
* @param array $methodVars An array with the following required values: artist, track, tag
* @return boolean
*/
public function removeTag($methodVars) {
// Only allow full authed calls
if ( $this->fullAuth == TRUE ) {
// Check for required variables
if ( !empty($methodVars['artist']) && !empty($methodVars['track']) && !empty($methodVars['tag']) ) {
$vars = array(
'method' => 'track.removetag',
'api_key' => $this->auth->apiKey,
'sk' => $this->auth->sessionKey
);
$vars = array_merge($vars, $methodVars);
$sig = $this->apiSig($this->auth->secret, $vars);
$vars['api_sig'] = $sig;
if ( $call = $this->apiPostCall($vars) ) {
return TRUE;
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include tag, artist and track varialbes in the call for this method');
return FALSE;
}
}
else {
// Give a 92 error if not fully authed
$this->handleError(92, 'Method requires full auth. Call auth.getSession using lastfmApiAuth class');
return FALSE;
}
}
/**
* Search for a track by track name. Returns track matches sorted by relevance
* @param array $methodVars An array with the following required values: track
* @return array
*/
public function search($methodVars) {
// Check for required variables
if ( !empty($methodVars['track']) ) {
$vars = array(
'method' => 'track.search',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
$opensearch = $call->results->children('http://a9.com/-/spec/opensearch/1.1/');
if ( $opensearch->totalResults > 0 ) {
$searchResults['totalResults'] = (string) $opensearch->totalResults;
$searchResults['startIndex'] = (string) $opensearch->startIndex;
$searchResults['itemsPerPage'] = (string) $opensearch->itemsPerPage;
$i = 0;
foreach ( $call->results->trackmatches->track as $track ) {
$searchResults['results'][$i]['name'] = (string) $track->name;
$searchResults['results'][$i]['artist'] = (string) $track->artist;
$searchResults['results'][$i]['url'] = (string) $track->url;
$searchResults['results'][$i]['streamable'] = (string) $track->streamable;
$searchResults['results'][$i]['fulltrack'] = (string) $track->streamable['fulltrack'];
$searchResults['results'][$i]['listeners'] = (string) $track->listeners;
$searchResults['results'][$i]['image']['small'] = (string) $track->image[0];
$searchResults['results'][$i]['image']['medium'] = (string) $track->image[1];
$searchResults['results'][$i]['image']['large'] = (string) $track->image[2];
$i++;
}
return $searchResults;
}
else {
// No tagsare found
$this->handleError(90, 'No results');
return FALSE;
}
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include track variable in the call for this method');
return FALSE;
}
}
/**
* Share a track twith one or more Last.fm users or other friends (Requires full auth)
* @param array $methodVars An array with the following required values: artist, track, recipient and optional value: message
* @return boolean
*/
public function share($methodVars) {
// Only allow full authed calls
if ( $this->fullAuth == TRUE ) {
// Check for required variables
if ( !empty($methodVars['artist']) && !empty($methodVars['track']) && !empty($methodVars['recipient']) ) {
$vars = array(
'method' => 'track.share',
'api_key' => $this->auth->apiKey,
'sk' => $this->auth->sessionKey
);
$vars = array_merge($vars, $methodVars);
$sig = $this->apiSig($this->auth->secret, $vars);
$vars['api_sig'] = $sig;
if ( $call = $this->apiPostCall($vars) ) {
return TRUE;
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include recipient, artist and track varialbes in the call for this method');
return FALSE;
}
}
else {
// Give a 92 error if not fully authed
$this->handleError(92, 'Method requires full auth. Call auth.getSession using lastfmApiAuth class');
return FALSE;
}
}
}
?>