auth = $auth;
$this->fullAuth = $fullAuth;
$this->config = $config;
}
/**
* Tag an artist using a list of user supplied tags. (Requires full auth)
* @param array $methodVars An array with the following required values: artist, 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['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;
// Set the call variables
$vars = array(
'method' => 'artist.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 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;
}
}
/**
* Get a list of upcoming events for this artist.
* @param array $methodVars An array with the following required values: artist
* @return array
*/
public function getEvents($methodVars) {
// Check for required variables
if ( !empty($methodVars['artist']) ) {
$vars = array(
'method' => 'artist.getevents',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
if ( $call->events['total'] != 0 ) {
$i = 0;
foreach ( $call->events->event as $event ) {
$events[$i]['id'] = (string) $event->id;
$events[$i]['title'] = (string) $event->title;
$ii = 0;
foreach ( $event->artists->artist as $artist ) {
$events[$i]['artists'][$ii] = (string) $artist;
$ii++;
}
$events[$i]['headliner'] = (string) $event->artists->headliner;
$events[$i]['venue']['name'] = (string) $event->venue->name;
$events[$i]['venue']['location']['city'] = (string) $event->venue->location->city;
$events[$i]['venue']['location']['country'] = (string) $event->venue->location->country;
$events[$i]['venue']['location']['street'] = (string) $event->venue->location->street;
$events[$i]['venue']['location']['postcode'] = (string) $event->venue->location->postalcode;
$geopoint = $event->venue->location->children('http://www.w3.org/2003/01/geo/wgs84_pos#');
$events[$i]['venue']['location']['geopoint']['lat'] = (string) $geopoint->point->lat;
$events[$i]['venue']['location']['geopoint']['long'] = (string) $geopoint->point->long;
$events[$i]['venue']['location']['timezone'] = (string) $event->venue->location->timezone;
$events[$i]['venue']['url'] = (string) $call->venue->url;
$events[$i]['startdate'] = strtotime(trim((string) $event->startDate));
$events[$i]['description'] = (string) $event->description;
$events[$i]['image']['small'] = (string) $event->image[0];
$events[$i]['image']['mendium'] = (string) $event->image[1];
$events[$i]['image']['large'] = (string) $event->image[2];
$events[$i]['attendance'] = (string) $event->attendance;
$events[$i]['reviews'] = (string) $event->reviews;
$events[$i]['tag'] = (string) $event->tag;
$events[$i]['url'] = (string) $event->url;
$i++;
}
return $events;
}
else {
// No events are found
$this->handleError(90, 'Artist has no events');
return FALSE;
}
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist variable in the call for this method');
return FALSE;
}
}
public function getPastEvents($methodVars) {
// Check for required variables
if ( !empty($methodVars['artist']) ) {
$vars = array(
'method' => 'artist.getpastevents',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
if ( $call->events['total'] != 0 ) {
$i = 0;
foreach ( $call->events->event as $event ) {
$events[$i]['id'] = (string) $event->id;
$events[$i]['title'] = (string) $event->title;
$ii = 0;
foreach ( $event->artists->artist as $artist ) {
$events[$i]['artists'][$ii] = (string) $artist;
$ii++;
}
$events[$i]['headliner'] = (string) $event->artists->headliner;
$events[$i]['venue']['name'] = (string) $event->venue->name;
$events[$i]['venue']['location']['city'] = (string) $event->venue->location->city;
$events[$i]['venue']['location']['country'] = (string) $event->venue->location->country;
$events[$i]['venue']['location']['street'] = (string) $event->venue->location->street;
$events[$i]['venue']['location']['postcode'] = (string) $event->venue->location->postalcode;
$geopoint = $event->venue->location->children('http://www.w3.org/2003/01/geo/wgs84_pos#');
$events[$i]['venue']['location']['geopoint']['lat'] = (string) $geopoint->point->lat;
$events[$i]['venue']['location']['geopoint']['long'] = (string) $geopoint->point->long;
$events[$i]['venue']['location']['timezone'] = (string) $event->venue->location->timezone;
$events[$i]['venue']['url'] = (string) $call->venue->url;
$events[$i]['startdate'] = strtotime(trim((string) $event->startDate));
$events[$i]['description'] = (string) $event->description;
$events[$i]['image']['small'] = (string) $event->image[0];
$events[$i]['image']['mendium'] = (string) $event->image[1];
$events[$i]['image']['large'] = (string) $event->image[2];
$events[$i]['attendance'] = (string) $event->attendance;
$events[$i]['reviews'] = (string) $event->reviews;
$events[$i]['tag'] = (string) $event->tag;
$events[$i]['url'] = (string) $event->url;
$i++;
}
return $events;
}
else {
// No events are found
$this->handleError(90, 'Artist has no events');
return FALSE;
}
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist variable in the call for this method');
return FALSE;
}
}
/**
* Get Images for this artist in a variety of sizes.
* @param array $methodVars An array with the following required values: artist and optional values: page, limit, order
* @return array
*/
public function getImages($methodVars) {
// Check for required variables
if ( !empty($methodVars['artist']) ) {
$vars = array(
'method' => 'artist.getimages',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
$images = array();
$i = 0;
$images['artist'] = (string)$call->images['artist'];
$images['page'] = (string)$call->images['page'];
$images['totalpages'] = (string)$call->images['totalpages'];
$images['total'] = (string)$call->images['total'];
foreach ( $call->images->image as $image ) {
$images['images'][$i]['title'] = (string) $image->title;
$images['images'][$i]['url'] = (string) $image->url;
$images['images'][$i]['dateadded'] = (string) $image->dateadded;
$images['images'][$i]['format'] = (string) $image->format;
$images['images'][$i]['sizes'] = array();
$official = isset($image['official']) ? (string) $image['official'] : false;
$images['images'][$i]['official'] = $official == 'yes';
foreach( $image->sizes->size as $size ) {
$images['images'][$i]['sizes'][(string)$size['name']] = array(
'width' => (string) $size['width'],
'height' => (string) $size['height'],
'url' => (string) $size,
);
}
$images['images'][$i]['votes'] = array(
'thumbsup' => (string) $image->votes->thumbsup,
'thumbsdown' => (string) $image->votes->thumbsdown,
);
$i++;
}
return $images;
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist variable in the call for this method');
return FALSE;
}
}
/**
* Get the metadata for an artist on Last.fm. Includes biography.
* @param array $methodVars An array with the following values: artist or mbid
* @return array
*/
public function getInfo($methodVars) {
$vars = array(
'method' => 'artist.getinfo',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
$info['name'] = (string) $call->artist->name;
$info['mbid'] = (string) $call->artist->mbid;
$info['url'] = (string) $call->artist->url;
$info['image']['small'] = (string) $call->artist->image;
$info['image']['medium'] = (string) $call->artist->image[1];
$info['image']['large'] = (string) $call->artist->image[2];
$info['streamable'] = (string) $call->artist->streamable;
$info['stats']['listeners'] = (string) $call->artist->stats->listeners;
$info['stats']['playcount'] = (string) $call->artist->stats->playcount;
$i = 0;
foreach ( $call->artist->similar->artist as $artist ) {
$info['similar'][$i]['name'] = (string) $artist->name;
$info['similar'][$i]['url'] = (string) $artist->url;
$info['similar'][$i]['image']['small'] = (string) $artist->image;
$info['similar'][$i]['image']['medium'] = (string) $artist->image[1];
$info['similar'][$i]['image']['large'] = (string) $artist->image[2];
$i++;
}
if ( count($call->artist->tags->tag) > 0 ) {
$i = 0;
foreach ( $call->artist->tags->tag as $tag ) {
$info['tags'][$i]['name'] = (string) $tag->name;
$info['tags'][$i]['url'] = (string) $tag->url;
$i++;
}
}
else {
$info['tags'] = FALSE;
}
$info['bio']['published'] = (string) $call->artist->bio->published;
$info['bio']['summary'] = (string) $call->artist->bio->summary;
$info['bio']['content'] = (string) $call->artist->bio->content;
return $info;
}
else {
return FALSE;
}
}
/**
* Get shouts for this artist.
* @param array $methodVars An array with the following required values: artist
* @return array
*/
public function getShouts($methodVars) {
if ( !empty($methodVars['artist']) ) {
$vars = array(
'method' => 'artist.getshouts',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
$shouts['artist'] = (string)$call->shouts['artist'];
$shouts['total'] = (string)$call->shouts['total'];
$i = 0;
foreach ( $call->shouts->shout as $shout ) {
$shouts['shouts'][$i]['body'] = (string)$shout->body;
$shouts['shouts'][$i]['author'] = (string)$shout->author;
$shouts['shouts'][$i]['date'] = strtotime((string)$shout->date);
$i++;
}
return $shouts;
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist variable in the call for this method');
return FALSE;
}
}
/**
* Get all the artists similar to this artist
* @param array $methodVars An array with the following required value: artist and optional value: limit,
* @return array
*/
public function getSimilar($methodVars) {
// Check for required variables
if ( !empty($methodVars['artist']) ) {
$vars = array(
'method' => 'artist.getsimilar',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
$similar = array();
$i = 0;
foreach ( $call->similarartists->artist as $artist ) {
$similar[$i]['name'] = (string) $artist->name;
$similar[$i]['mbid'] = (string) $artist->mbid;
$similar[$i]['match'] = (string) $artist->match;
$similar[$i]['url'] = (string) $artist->url;
$similar[$i]['image'] = (string) $artist->image;
$i++;
}
return $similar;
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist variable in the call for this method');
return FALSE;
}
}
/**
* Get the tags applied by an individual user to an artist on Last.fm. (Requires full auth)
* @param array $methodVars An array with the following required values: artist
* @return array
*/
public function getTags($methodVars) {
// Only allow full authed calls
if ( $this->fullAuth == TRUE ) {
// Check for required variables
if ( !empty($methodVars['artist']) ) {
$vars = array(
'method' => 'artist.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 ) {
$i = 0;
foreach ( $call->tags[0]->tag as $tag ) {
$tags[$i]['name'] = (string) $tag->name;
$tags[$i]['url'] = (string) $tag->url;
$i++;
}
return $tags;
}
else {
// No tagsare found
$this->handleError(90, 'Artist has no tags from this user');
return FALSE;
}
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist varialbe 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 albums for an artist on Last.fm, ordered by popularity
* @param array $methodVars An array with the following required values: artist
* @return array
*/
public function getTopAlbums($methodVars) {
// Check for required variables
if ( !empty($methodVars['artist']) ) {
$vars = array(
'method' => 'artist.gettopalbums',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
if ( count($call->topalbums->album) > 0 ) {
$i = 0;
foreach ( $call->topalbums->album as $album ) {
$topAlbums[$i]['rank'] = (string) $album['rank'];
$topAlbums[$i]['name'] = (string) $album->name;
$topAlbums[$i]['mbid'] = (string) $album->mbid;
$topAlbums[$i]['playcount'] = (string) $album->playcount;
$topAlbums[$i]['url'] = (string) $album->url;
$topAlbums[$i]['image']['small'] = (string) $album->image[0];
$topAlbums[$i]['image']['medium'] = (string) $album->image[1];
$topAlbums[$i]['image']['large'] = (string) $album->image[2];
$i++;
}
return $topAlbums;
}
else {
// No tagsare found
$this->handleError(90, 'Artist has no top albums');
return FALSE;
}
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist varialbe in the call for this method');
return FALSE;
}
}
/**
* Get the top fans for an artist on Last.fm, based on listening data
* @param array $methodVars An array with the following required values: artist
* @return array
*/
public function getTopFans($methodVars) {
// Check for required variables
if ( !empty($methodVars['artist']) ) {
$vars = array(
'method' => 'artist.gettopfans',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
if ( count($call->topfans->user) > 0 ) {
$i = 0;
foreach ( $call->topfans->user as $user ) {
$topFans[$i]['name'] = (string) $user->name;
$topFans[$i]['url'] = (string) $user->url;
$topFans[$i]['image']['small'] = (string) $user->image[0];
$topFans[$i]['image']['medium'] = (string) $user->image[1];
$topFans[$i]['image']['large'] = (string) $user->image[2];
$topFans[$i]['weight'] = (string) $user->weight;
$i++;
}
return $topFans;
}
else {
// No tagsare found
$this->handleError(90, 'Artist has no top users');
return FALSE;
}
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist varialbe in the call for this method');
return FALSE;
}
}
/**
* Get the top tags for an artist on Last.fm, ordered by popularity
* @param array $methodVars An array with the following required values: artist
* @return array
*/
public function getTopTags($methodVars) {
// Check for required variables
if ( !empty($methodVars['artist']) ) {
$vars = array(
'method' => 'artist.gettoptags',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
if ( count($call->toptags->tag) > 0 ) {
$i = 0;
foreach ( $call->toptags->tag as $tag ) {
$topTags[$i]['name'] = (string) $tag->name;
$topTags[$i]['url'] = (string) $tag->url;
$i++;
}
return $topTags;
}
else {
// No tagsare found
$this->handleError(90, 'Artist has no top tags');
return FALSE;
}
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist varialbe in the call for this method');
return FALSE;
}
}
/**
* Get the top tracks by an artist on Last.fm, ordered by popularity
* @param array $methodVars An array with the following required values: artist
* @return array
*/
public function getTopTracks($methodVars) {
// Check for required variables
if ( !empty($methodVars['artist']) ) {
$vars = array(
'method' => 'artist.gettoptracks',
'api_key' => $this->auth->apiKey
);
$vars = array_merge($vars, $methodVars);
if ( $call = $this->apiGetCall($vars) ) {
if ( count($call->toptracks->track) > 0 ) {
$i = 0;
foreach ( $call->toptracks->track as $tracks ) {
$topTracks[$i]['rank'] = (string) $tracks['rank'];
$topTracks[$i]['name'] = (string) $tracks->name;
$topTracks[$i]['playcount'] = (string) $tracks->playcount;
$topTracks[$i]['streamable'] = (string) $tracks->streamable;
$topTracks[$i]['url'] = (string) $tracks->url;
$topTracks[$i]['image']['small'] = (string) $tracks->image[0];
$topTracks[$i]['image']['medium'] = (string) $tracks->image[1];
$topTracks[$i]['image']['large'] = (string) $tracks->image[2];
$i++;
}
return $topTracks;
}
else {
// No tagsare found
$this->handleError(90, 'Artist has no top tracks');
return FALSE;
}
}
else {
return FALSE;
}
}
else {
// Give a 91 error if incorrect variables are used
$this->handleError(91, 'You must include artist varialbe in the call for this method');
return FALSE;
}
}
/**
* Remove a user's tag from an artist. (Requires full auth)
* @param array $methodVars An array with the following required values: artist, 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['tag']) ) {
$vars = array(
'method' => 'artist.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 artist and tag 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 an artist by name. Returns artist matches sorted by relevance
* @param array $methodVars An array with the following required value: artist and optional values: limite, page
* @return array
*/
public function search($methodVars) {
// Check for required variables
if ( !empty($methodVars['artist']) ) {
$vars = array(
'method' => 'artist.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->artistmatches->artist as $artist ) {
$searchResults['results'][$i]['name'] = (string) $artist->name;
$searchResults['results'][$i]['mbid'] = (string) $artist->mbid;
$searchResults['results'][$i]['url'] = (string) $artist->url;
$searchResults['results'][$i]['streamable'] = (string) $artist->streamable;
$searchResults['results'][$i]['image']['small'] = (string) $artist->image_small;
$searchResults['results'][$i]['image']['large'] = (string) $artist->image;
$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 artist varialbe in the call for this method');
return FALSE;
}
}
/**
* Share an artist with Last.fm users or other friends. (Requires full auth)
* @param array $methodVars An array with the following required values: artist, recipient and optional values: 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['recipient']) ) {
$vars = array(
'method' => 'artist.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 artist and recipient 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;
}
}
/**
* Shout in this artist's shoutbox
* @param array $methodVars An array with the following required values: artist, message
* @return boolean
*/
public function shout($methodVars) {
// Only allow full authed calls
if ( $this->fullAuth == TRUE ) {
// Check for required variables
if ( !empty($methodVars['artist']) && !empty($methodVars['message']) ) {
$vars = array(
'method' => 'artist.shout',
'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 message variables 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;
}
}
}
?>