client = $client ?: new Client(); } /** * Determines whether to use iTunes services. * * @return bool */ public function used() { return (bool) config('koel.itunes.enabled'); } /** * Search for a track on iTunes Store with the given information and get its URL. * * @param $term string The main query string (should be the track's name) * @param $album string The album's name, if available * @param $artist string The artist's name, if available * * @return string|false */ public function getTrackUrl($term, $album = '', $artist = '') { try { $cacheKey = md5("itunes_track_url_{$term}{$album}{$artist}"); if (!$trackUrl = cache($cacheKey)) { $params = [ 'term' => $term.($album ? ' '.$album : '').($artist ? ' '.$artist : ''), 'media' => 'music', 'entity' => 'song', 'limit' => 1, ]; $response = (string) $this->client->get($this->endPoint, ['query' => $params])->getBody(); $response = json_decode($response); if (!$response->resultCount) { return false; } $trackUrl = $response->results[0]->trackViewUrl; // Returns a string if the URL has parameters or NULL if not if (parse_url($trackUrl, PHP_URL_QUERY)) { $trackUrl .= '&at='.config('koel.itunes.affiliate_id'); } else { $trackUrl .= '?at='.config('koel.itunes.affiliate_id'); } cache([$cacheKey => $trackUrl], 24 * 60 * 7); } return $trackUrl; } catch (Exception $e) { Log::error($e); return false; } } }