/** * @link http://www.last.fm/api/show/playlist.create * * @param string $sk * @param string|null $title * @param string|null $description * @throws Exception * @return \Lertify\Lastfm\Api\Data\Playlist\Playlist */ public function create($sk, $title = null, $description = null) { $params = array('sk' => $sk); if (null !== $title) { $params['title'] = $title; } if (null !== $description) { $params['description'] = $description; } $result = $this->post(self::PREFIX . 'create', $params, array('is_signed' => true)); $resultPlaylists = $result['playlists']; $Playlist = new Data\Playlist\Playlist(); if (!isset($resultPlaylists['playlist'])) { throw new Exception('No playlist created!'); } $playlistRow = $resultPlaylists['playlist']; $User = new Data\Playlist\User(); $User->setName($resultPlaylists['@attr']['user']); $Playlist->setId((int) $playlistRow['id']); $Playlist->setTitle(Util::toSting($playlistRow['title'])); $Playlist->setDescription(Util::toSting($playlistRow['description'])); $Playlist->setDate(Util::toSting($playlistRow['date'])); $Playlist->setSize((int) $playlistRow['size']); $Playlist->setDuration((int) $playlistRow['duration']); $Playlist->setStreamable((bool) (int) $playlistRow['streamable']); $Playlist->setCreator(Util::toSting($playlistRow['creator'])); $Playlist->setUrl(Util::toSting($playlistRow['url'])); $PlaylistImages = new ArrayCollection(); if (isset($playlistRow['image'])) { foreach ($playlistRow['image'] as $image) { $PlaylistImages->set(Util::toSting($image['size']), Util::toSting($image['#text'])); } } $Playlist->setImages($PlaylistImages); $Playlist->setUser($User); return $Playlist; }
/** * @link http://www.last.fm/api/show/tasteometer.compare * * @param string $typeOne * @param string $typeTwo * @param string|array $valueOne * @param string|array $valueTwo * @param int $limit * @throws InvalidArgumentException * @return \Lertify\Lastfm\Api\Data\Tasteometer\Comparison */ public function compare($typeOne, $typeTwo, $valueOne, $valueTwo, $limit = 5) { if (is_array($valueOne)) { if (count($valueOne) > 100) { throw new InvalidArgumentException('Number of artists is higher then allowed!'); } else { $valueOne = implode(',', $valueOne); } } if (is_array($valueTwo)) { if (count($valueTwo) > 100) { throw new InvalidArgumentException('Number of artists is higher then allowed!'); } else { $valueTwo = implode(',', $valueTwo); } } $params = array('type1' => $typeOne, 'type2' => $typeTwo, 'value1' => $valueOne, 'value2' => $valueTwo, 'limit' => $limit); $result = $this->get(self::PREFIX . 'compare', $params); $resultComparison = $result['comparison']; $Comparison = new Data\Tasteometer\Comparison(); $UsersList = new ArrayCollection(); if (isset($resultComparison['input']['user'][0])) { $users = $resultComparison['input']['user']; } else { $users = array($resultComparison['input']['user']); } foreach ($users as $userRow) { $User = new Data\Tasteometer\User(); $User->setName(Util::toSting($userRow['name'])); $User->setUrl(Util::toSting($userRow['url'])); $Images = new ArrayCollection(); if (isset($userRow['image'])) { foreach ($userRow['image'] as $image) { $Images->set(Util::toSting($image['size']), Util::toSting($image['#text'])); } } $User->setImages($Images); $UsersList->add($User); } $Comparison->setInput($UsersList); $Comparison->setScore((double) $resultComparison['result']['score']); $Artists = $resultComparison['result']['artists']; $Comparison->setMatches((int) $Artists['@attr']['matches']); $ArtistList = new ArrayCollection(); if (isset($Artists['artist'][0])) { $artistsList = $Artists['artist']; } else { $artistsList = array($Artists['artist']); } foreach ($artistsList as $artistRow) { $Artist = new Data\Tasteometer\Artist(); $Artist->setName(Util::toSting($artistRow['name'])); $Artist->setUrl(Util::toSting($artistRow['url'])); $Images = new ArrayCollection(); if (isset($artistRow['image'])) { foreach ($artistRow['image'] as $image) { $Images->set(Util::toSting($image['size']), Util::toSting($image['#text'])); } } $Artist->setImages($Images); $ArtistList->add($Artist); } $Comparison->setArtists($ArtistList); return $Comparison; }
/** * @link http://www.last.fm/api/show/tag.getWeeklyArtistChart * * @param string $tag * @param int $limit * @param int|null $from * @param int|null $to * @return \Lertify\Lastfm\Api\Data\ArrayCollection */ public function getWeeklyArtistChart($tag, $limit = 50, $from = null, $to = null) { $params = array('tag' => $tag, 'limit' => $limit, 'from' => $from, 'to' => $to); $result = $this->get(self::PREFIX . 'getWeeklyArtistChart', $params); $resultWeeklyartistchart = $result['weeklyartistchart']; if (isset($resultWeeklyartistchart['artist'][0])) { $artistChart = $resultWeeklyartistchart['artist']; } else { $artistChart = array($resultWeeklyartistchart['artist']); } $List = new ArrayCollection(); foreach ($artistChart as $artistChartRow) { $Artist = new Data\Tag\Artist(); $Artist->setName(Util::toSting($artistChartRow['name'])); $Artist->setWeight((int) $artistChartRow['weight']); $Artist->setMbid(Util::toSting($artistChartRow['mbid'])); $Artist->setUrl(Util::toSting($artistChartRow['url'])); $Artist->setStreamable((bool) $artistChartRow['streamable']); $ArtistImages = new ArrayCollection(); foreach ($artistChartRow['image'] as $image) { $ArtistImages->set(Util::toSting($image['size']), Util::toSting($image['#text'])); } $Artist->setImages($ArtistImages); $List->add($Artist); } return $List; }
/** * @param array $eventRow * @return \Lertify\Lastfm\Api\Data\Venue\Event */ public function fillEvent(array $eventRow) { $Event = new Data\Venue\Event(); $Event->setId((int) $eventRow['id']); $Event->setTitle(Util::toSting($eventRow['title'])); if (isset($resultEvent['artists']['headliner'])) { $Event->setHeadliner(Util::toSting($eventRow['artists']['headliner'])); } $Artists = new ArrayCollection(); $resultArtists = $eventRow['artists']; if (is_array($resultArtists['artist'])) { $artistList = $resultArtists['artist']; } else { $artistList = array($resultArtists['artist']); } foreach ($artistList as $artistName) { $Artist = new Data\Venue\Artist(); $Artist->setName(Util::toSting($artistName)); $Artists->add($Artist); } $Event->setArtists($Artists); $Venue = new Data\Venue\Venue(); $venueRow = $eventRow['venue']; $Venue->setId((int) $venueRow['id']); $Venue->setName(Util::toSting($venueRow['name'])); $Venue->setCity(Util::toSting($venueRow['location']['city'])); $Venue->setCountry(Util::toSting($venueRow['location']['country'])); $Venue->setStreet(Util::toSting($venueRow['location']['street'])); $Venue->setPostalcode((int) $venueRow['location']['postalcode']); $Venue->setLatitude((double) $venueRow['location']['geo:point']['geo:lat']); $Venue->setLongitude((double) $venueRow['location']['geo:point']['geo:long']); $Venue->setUrl(Util::toSting($venueRow['url'])); $Venue->setWebsite(Util::toSting($venueRow['website'])); $Venue->setPhonenumber(Util::toSting($venueRow['phonenumber'])); $VenueImages = new ArrayCollection(); foreach ($venueRow['image'] as $venueRowImage) { $VenueImages->set(Util::toSting($venueRowImage['size']), Util::toSting($venueRowImage['#text'])); } $Venue->setImages($VenueImages); $Event->setVenue($Venue); $Event->setStartDate(Util::toSting($eventRow['startDate'])); $Event->setDescription(Util::toSting($eventRow['description'])); $EventImages = new ArrayCollection(); foreach ($eventRow['image'] as $image) { $EventImages->set(Util::toSting($image['size']), Util::toSting($image['#text'])); } $Event->setImages($EventImages); $Event->setAttendance((int) $eventRow['attendance']); $Event->setReviews((int) $eventRow['reviews']); if (isset($eventRow['tag'])) { $Event->setTag(Util::toSting($eventRow['tag'])); } $TagsList = new ArrayCollection(); if (isset($eventRow['tags'])) { $resultTags = $eventRow['tags']; if (is_array($resultTags['tag'])) { $tagList = $resultTags['tag']; } else { $tagList = array($resultTags['tag']); } foreach ($tagList as $tagRow) { $TagsList->add(Util::toSting($tagRow)); } } $Event->setTags($TagsList); $Event->setUrl(Util::toSting($eventRow['url'])); $Event->setWebsite(Util::toSting($eventRow['website'])); $Event->setCancelled((int) $eventRow['cancelled']); $Tickets = new ArrayCollection(); if (isset($eventRow['tickets']) && is_array($eventRow['tickets'])) { foreach ($eventRow['tickets']['ticket'] as $ticketRow) { $Tickets->add(array('supplier' => Util::toSting($ticketRow['supplier']), 'url' => Util::toSting($ticketRow['#text']))); } } $Event->setTickets($Tickets); return $Event; }
/** * @link http://www.last.fm/api/show/geo.getTopTracks * * @param string $country * @param string|null $location * @throws \Lertify\Lastfm\Exception\NotFoundException * @return \Lertify\Lastfm\Api\Data\PagedCollection */ public function getTopTracks($country, $location = null) { $params = array('country' => $country, 'location' => $location); $self = $this; $resultCallback = function ($page, $limit) use($params, $self) { $params = array_merge($params, array('page' => $page, 'limit' => $limit)); $result = $self->get(Geo::PREFIX . 'getTopTracks', $params); $resultToptracks = $result['toptracks']; if (!isset($resultToptracks['track'])) { throw new NotFoundException('No top tracks found for this location!'); } $totalResults = (int) $resultToptracks['@attr']['total']; $totalPages = (int) $resultToptracks['@attr']['totalPages']; if (isset($resultToptracks['track'][0])) { $tracks = $resultToptracks['track']; } else { $tracks = array($resultToptracks['track']); } $List = new ArrayCollection(); foreach ($tracks as $trackRow) { $Track = new Data\Track(); $Track->setName(Util::toSting($trackRow['name'])); $Track->setDuration((int) $trackRow['duration']); $Track->setListeners((int) $trackRow['listeners']); $Track->setMbId(Util::toSting($trackRow['mbid'])); $Track->setUrl(Util::toSting($trackRow['url'])); $Track->setRank((int) $trackRow['@attr']['rank']); $Track->setStreamable((bool) (int) $trackRow['streamable']['#text']); $Track->setStreamableFulltrack((bool) (int) $trackRow['streamable']['fulltrack']); $Track->setArtistName(Util::toSting($trackRow['artist']['name'])); $Track->setArtistMbId(Util::toSting($trackRow['artist']['mbid'])); $Track->setArtistUrl(Util::toSting($trackRow['artist']['url'])); $TrackImages = new ArrayCollection(); if (isset($trackRow['image'])) { foreach ($trackRow['image'] as $image) { $TrackImages->set(Util::toSting($image['size']), Util::toSting($image['#text'])); } } $Track->setImages($TrackImages); $List->add($Track); } return array('results' => $List, 'total_pages' => $totalPages, 'total_results' => $totalResults); }; return new PagedCollection($resultCallback); }
/** * @link http://www.last.fm/api/show/group.getWeeklyTrackChart * * @param string $group * @param int|null $from * @param int|null $to * @throws \Lertify\Lastfm\Exception\NotFoundException * @return \Lertify\Lastfm\Api\Data\ArrayCollection */ public function getWeeklyTrackChart($group, $from = null, $to = null) { $params = array('group' => $group, 'from' => $from, 'to' => $to); $result = $this->get(self::PREFIX . 'getWeeklyTrackChart', $params); $resultWeeklytrackchart = $result['weeklytrackchart']; if (!isset($resultWeeklytrackchart['track'])) { throw new NotFoundException('No tracks found!'); } if (isset($resultWeeklytrackchart['track'][0])) { $tracks = $resultWeeklytrackchart['track']; } else { $tracks = array($resultWeeklytrackchart['track']); } $TracksList = new ArrayCollection(); foreach ($tracks as $trackRow) { $Track = new Data\Group\Track(); $Track->setArtistName(Util::toSting($trackRow['artist']['#text'])); $Track->setArtistMbId(Util::toSting($trackRow['artist']['mbid'])); $Track->setName(Util::toSting($trackRow['name'])); $Track->setMbId(Util::toSting($trackRow['mbid'])); $Track->setPlaycount((int) $trackRow['playcount']); $Track->setUrl(Util::toSting($trackRow['url'])); $Track->setRank((int) $trackRow['@attr']['rank']); $TrackImages = new ArrayCollection(); if (isset($trackRow['image'])) { foreach ($trackRow['image'] as $image) { $TrackImages->set(Util::toSting($image['size']), Util::toSting($image['#text'])); } } $Track->setImages($TrackImages); $TracksList->add($Track); } return $TracksList; }
/** * @link http://www.last.fm/api/show/library.getTracks * * @param string $user * @param string|null $artist * @param string|null $album * @throws \Lertify\Lastfm\Exception\NotFoundException * @return \Lertify\Lastfm\Api\Data\PagedCollection */ public function getTracks($user, $artist = null, $album = null) { $params = array('user' => $user, 'artist' => $artist, 'album' => $album); $self = $this; $resultCallback = function ($page, $limit) use($params, $self) { $params = array_merge($params, array('page' => $page, 'limit' => $limit)); $result = $self->get(Library::PREFIX . 'getTracks', $params); $resultTracks = $result['tracks']; if (!isset($resultTracks['track'])) { throw new NotFoundException('This user hasn\'t any tracks in his library!'); } $totalResults = (int) $resultTracks['@attr']['total']; $totalPages = (int) $resultTracks['@attr']['totalPages']; if (isset($resultTracks['track'][0])) { $tracks = $resultTracks['track']; } else { $tracks = array($resultTracks['track']); } $List = new ArrayCollection(); foreach ($tracks as $tracksRow) { $Track = new Data\Library\Track(); $Track->setName(Util::toSting($tracksRow['name'])); $Track->setDuration((int) $tracksRow['name']); $Track->setPlaycount((int) $tracksRow['playcount']); $Track->setTagcount((int) $tracksRow['tagcount']); $Track->setMbId(Util::toSting($tracksRow['mbid'])); $Track->setUrl(Util::toSting($tracksRow['url'])); $Track->setStreamable((bool) $tracksRow['streamable']['#text']); $Track->setStreamableFulltrack((bool) $tracksRow['streamable']['fulltrack']); $Track->setArtistName(Util::toSting($tracksRow['artist']['name'])); $Track->setArtistMbId(Util::toSting($tracksRow['artist']['mbid'])); $Track->setArtistUrl(Util::toSting($tracksRow['artist']['url'])); if (isset($tracksRow['album'])) { $Track->setAlbumName(Util::toSting($tracksRow['album']['name'])); $Track->setAlbumPosition((int) $tracksRow['album']['position']); } $TrackImages = new ArrayCollection(); if (isset($tracksRow['image'])) { foreach ($tracksRow['image'] as $image) { $TrackImages->set(Util::toSting($image['size']), Util::toSting($image['#text'])); } } $Track->setImages($TrackImages); $List->add($Track); } return array('results' => $List, 'total_pages' => $totalPages, 'total_results' => $totalResults); }; return new PagedCollection($resultCallback); }
/** * @param array $params * @throws \Lertify\Lastfm\Exception\NotFoundException * @return \Lertify\Lastfm\Api\Data\ArrayCollection */ private function fetchGetTopFans(array $params) { $result = $this->get(self::PREFIX . 'getTopFans', $params); $resultTopFans = $result['topfans']; if (!isset($resultTopFans['user'])) { throw new NotFoundException('There are no top fans for this atrist and track!'); } if (isset($resultTopFans['user'][0]) && is_array($resultTopFans['user'][0])) { $topFans = $resultTopFans['user']; } else { $topFans = array($resultTopFans['user']); } $List = new ArrayCollection(); foreach ($topFans as $topFanRecord) { $Topfan = new Data\Track\User(); $Topfan->setName(Util::toSting($topFanRecord['name'])); $Topfan->setRealName(Util::toSting($topFanRecord['realname'])); $Topfan->setUrl(Util::toSting($topFanRecord['url'])); $TopfanImages = new ArrayCollection(); if (isset($topFanRecord['image'])) { foreach ($topFanRecord['image'] as $image) { $TopfanImages->set(Util::toSting($image['size']), Util::toSting($image['#text'])); } } $Topfan->setImages($TopfanImages); $List->add($Topfan); } return $List; }
/** * @param array $images * @return \Lertify\Lastfm\Api\Data\ArrayCollection */ public function getImageList(array $images) { $ImagesList = new ArrayCollection(); foreach ($images as $image) { $ImagesList->set((string) $image['size'], (string) $image['#text']); } return $ImagesList; }
/** * @param array $params * @throws \Lertify\Lastfm\Exception\NotFoundException * @return \Lertify\Lastfm\Api\Data\PagedCollection */ private function fetchEvents(array $params) { $self = $this; $resultCallback = function ($page, $limit) use($params, $self) { $params = array_merge($params, array('page' => $page, 'limit' => $limit)); /** @var $self Artist */ $result = $self->get(Artist::PREFIX . 'getEvents', $params); $resultEvents = $result['events']; if (!isset($resultEvents['event'])) { throw new NotFoundException('No events found for this artist!'); } $List = new ArrayCollection(); $totalResults = (int) $resultEvents['@attr']['total']; $totalPages = (int) $resultEvents['@attr']['totalPages']; foreach ($resultEvents['event'] as $eventRow) { $Event = new Event(); $Event->setId((int) $eventRow['id']); $Event->setTitle(Util::toSting($eventRow['title'])); if (isset($eventRow['artists']['headliner'])) { $Event->setHeadliner(Util::toSting($eventRow['artists']['headliner'])); } $Artists = new ArrayCollection(); if (is_array($eventRow['artists']['artist'])) { $artistList = $eventRow['artists']['artist']; } else { $artistList = array($eventRow['artists']['artist']); } foreach ($artistList as $artistName) { $Artist = new Data\Artist\Artist(); $Artist->setName(Util::toSting($artistName)); $Artists->add($Artist); } $Event->setArtists($Artists); $Venue = new Venue(); $venueRow = $eventRow['venue']; $Venue->setId((int) $venueRow['id']); $Venue->setName(Util::toSting($venueRow['name'])); $Venue->setCity(Util::toSting($venueRow['location']['city'])); $Venue->setCountry(Util::toSting($venueRow['location']['country'])); $Venue->setStreet(Util::toSting($venueRow['location']['street'])); $Venue->setPostalcode((int) $venueRow['location']['postalcode']); $Venue->setLatitude((double) $venueRow['location']['geo:point']['geo:lat']); $Venue->setLongitude((double) $venueRow['location']['geo:point']['geo:long']); $Venue->setUrl(Util::toSting($venueRow['url'])); $Venue->setWebsite(Util::toSting($venueRow['website'])); $Venue->setPhonenumber(Util::toSting($venueRow['phonenumber'])); $VenueImages = new ArrayCollection(); foreach ($venueRow['image'] as $venueRowImage) { $VenueImages->set(Util::toSting($venueRowImage['size']), Util::toSting($venueRowImage['#text'])); } $Venue->setImages($VenueImages); $Event->setVenue($Venue); $Event->setStartDate(Util::toSting($eventRow['startDate'])); $Event->setDescription(Util::toSting($eventRow['description'])); $EventImages = new ArrayCollection(); foreach ($eventRow['image'] as $eventImage) { $EventImages->set(Util::toSting($eventImage['size']), Util::toSting($eventImage['#text'])); } $Event->setImages($EventImages); $Event->setAttendance((int) $eventRow['attendance']); $Event->setReviews((int) $eventRow['reviews']); $TagsList = new ArrayCollection(); if (isset($eventRow['tags'])) { if (is_array($eventRow['tags']['tag'])) { $tagList = $eventRow['tags']['tag']; } else { $tagList = array($eventRow['tags']['tag']); } foreach ($tagList as $tagRow) { $TagsList->add(Util::toSting($tagRow)); } } if (isset($eventRow['tag'])) { $Event->setTag(Util::toSting($eventRow['tag'])); } $Event->setTags($TagsList); $Event->setUrl(Util::toSting($eventRow['url'])); $Event->setWebsite(Util::toSting($eventRow['website'])); $Event->setCancelled((int) $eventRow['cancelled']); $Tickets = new ArrayCollection(); if (is_array($eventRow['tickets'])) { foreach ($eventRow['tickets']['ticket'] as $ticketRow) { $Tickets->add(array('supplier' => Util::toSting($ticketRow['supplier']), 'url' => Util::toSting($ticketRow['#text']))); } } $Event->setTickets($Tickets); $List->add($Event); } return array('results' => $List, 'total_pages' => $totalPages, 'total_results' => $totalResults); }; return new PagedCollection($resultCallback); }