/** * secondDelimiterCharts function. * * @access public * @param mixed $w * @param mixed $query * @param mixed $settings * @param mixed $db * @param mixed $update_in_progress * @return void */ function secondDelimiterCharts($w, $query, $settings, $db, $update_in_progress) { $words = explode('▹', $query); $kind = $words[0]; $all_playlists = $settings->all_playlists; $is_alfred_playlist_active = $settings->is_alfred_playlist_active; $radio_number_tracks = $settings->radio_number_tracks; $now_playing_notifications = $settings->now_playing_notifications; $max_results = $settings->max_results; $alfred_playlist_uri = $settings->alfred_playlist_uri; $alfred_playlist_name = $settings->alfred_playlist_name; $country_code = $settings->country_code; $last_check_update_time = $settings->last_check_update_time; $oauth_client_id = $settings->oauth_client_id; $oauth_client_secret = $settings->oauth_client_secret; $oauth_redirect_uri = $settings->oauth_redirect_uri; $oauth_access_token = $settings->oauth_access_token; $oauth_expires = $settings->oauth_expires; $oauth_refresh_token = $settings->oauth_refresh_token; $display_name = $settings->display_name; $userid = $settings->userid; $echonest_api_key = $settings->echonest_api_key; $country = $words[1]; if ($country == 'Choose a Country') { // list taken from http://charts.spotify.com/docs $spotify_country_codes = array("ar", "at", "au", "be", "bg", "ch", "cl", "co", "cr", "cz", "de", "dk", "ec", "ee", "es", "fi", "fr", "gb", "gr", "gt", "hk", "hu", "ie", "is", "it", "li", "lt", "lu", "lv", "mx", "my", "nl", "no", "nz", "pe", "pl", "pt", "se", "sg", "sk", "sv", "tr", "tw", "us", "uy"); foreach ($spotify_country_codes as $spotify_country_code) { if (strtoupper($spotify_country_code) != 'US' && strtoupper($spotify_country_code) != 'GB' && strtoupper($spotify_country_code) != strtoupper($country_code)) { $w->result(null, '', getCountryName(strtoupper($spotify_country_code)), 'Browse the current charts in ' . getCountryName(strtoupper($spotify_country_code)), './images/numbers.png', 'no', null, 'Charts▹' . strtoupper($spotify_country_code) . '▹'); } } } else { $json = doJsonRequest($w, "http://charts.spotify.com/api/tracks/most_streamed/" . trim($country) . "/weekly/latest", false); $nb_results = 0; $noresult = true; foreach ($json->tracks as $track) { if ($nb_results > $max_results) { break; } // if ($noresult) { // $subtitle = "⌥ (play album) ⌘ (play artist) ctrl (lookup online)"; // $subtitle = "$subtitle fn (add track to ...) ⇧ (add album to ...)"; // $w->result(null, 'help', "Select a track below to play it (or choose alternative described below)", $subtitle, './images/info.png', 'no', null, ''); // } // $noresult = false; // format is https://play.spotify.com/track/3WBLQj2qtrKYFDcC5aisLD $href = explode('/', $track->track_url); $track_uri = 'spotify:track:' . $href[4]; $href = explode('/', $track->album_url); $album_uri = 'spotify:album:' . $href[4]; $href = explode('/', $track->artist_url); $artist_uri = 'spotify:artist:' . $href[4]; $track_artwork = getTrackOrAlbumArtwork($w, $track_uri, false); $w->result(null, serialize(array($track_uri, $album_uri, $artist_uri, '', '', '', '', '', escapeQuery($track->artist_name), escapeQuery($track->track_name), escapeQuery($track->album_name), $track_artwork, '', '', '', '')), ucfirst(escapeQuery($track->track_name)) . " ● " . escapeQuery($track->artist_name), array(escapeQuery($track->album_name) . " ● " . $track->num_streams . ' streams', 'alt' => 'Play album ' . escapeQuery($track->album_name) . ' in Spotify', 'cmd' => 'Play artist ' . escapeQuery($track->artist_name) . ' in Spotify', 'fn' => 'Add track ' . escapeQuery($track->track_name) . ' to ...', 'shift' => 'Add album ' . escapeQuery($track->album_name) . ' to ...', 'ctrl' => 'Search artist ' . escapeQuery($track->artist_name) . ' online'), $track_artwork, 'yes', null, ''); $nb_results++; } } }
/** * createRadioSongPlaylist function. * * @access public * @param mixed $w * @param mixed $track_name * @param mixed $track_uri * @param mixed $artist_name * @return void */ function createRadioSongPlaylist($w, $track_name, $track_uri, $artist_name) { // // Read settings from JSON // $settings = getSettings($w); $radio_number_tracks = $settings->radio_number_tracks; $userid = $settings->userid; $echonest_api_key = $settings->echonest_api_key; $country_code = $settings->country_code; $is_public_playlists = $settings->is_public_playlists; // // Read settings from JSON // $settings = getSettings($w); $radio_number_tracks = $settings->radio_number_tracks; $userid = $settings->userid; $echonest_api_key = $settings->echonest_api_key; $country_code = $settings->country_code; $is_public_playlists = $settings->is_public_playlists; $public = false; if ($is_public_playlists) { $public = true; } $tmp = explode(':', $track_uri); if ($tmp[1] == 'local') { // local track, look it up online // spotify:local:The+D%c3%b8:On+My+Shoulders+-+Single:On+My+Shoulders:318 // spotify:local:Damien+Rice:B-Sides:Woman+Like+a+Man+%28Live%2c+Unplugged%29:284 $query = 'track:' . urldecode(strtolower($tmp[4])) . ' artist:' . urldecode(strtolower($tmp[2])); $results = searchWebApi($w, $country_code, $query, 'track', 1); if (count($results) > 0) { // only one track returned $track = $results[0]; $track_uri = $track->uri; } else { logMsg("Could not find track from uri: {$track_uri}"); return false; } } $json = doJsonRequest($w, 'http://developer.echonest.com/api/v4/playlist/static?api_key=' . $echonest_api_key . '&song_id=' . $track_uri . '&format=json&results=' . $radio_number_tracks . '&distribution=focused&type=song-radio&bucket=id:spotify&bucket=tracks'); $response = $json->response; $newplaylisttracks = array(); foreach ($response->songs as $song) { foreach ($song->tracks as $track) { $foreign_id = $track->foreign_id; $tmp = explode(':', $foreign_id); $newplaylisttracks[] = $tmp[2]; // only take one break; } } if (count($newplaylisttracks) > 0) { try { $api = getSpotifyWebAPI($w); $json = $api->createUserPlaylist($userid, array('name' => 'Song radio for ' . escapeQuery($track_name) . ' by ' . escapeQuery($artist_name), 'public' => $public)); } catch (SpotifyWebAPI\SpotifyWebAPIException $e) { logMsg("Error(createUserPlaylist): radio song " . escapeQuery($track_name) . " (exception " . print_r($e) . ")"); handleSpotifyWebAPIException($w, $e); return false; } $ret = addTracksToPlaylist($w, $newplaylisttracks, $json->uri, $json->name, false, false); if (is_numeric($ret) && $ret > 0) { refreshLibrary($w); return; } elseif (is_numeric($ret) && $ret == 0) { displayNotificationWithArtwork('Playlist ' . $json->name . ' cannot be added', './images/warning.png', 'Error!'); return; } } else { displayNotificationWithArtwork('Track was not found in Echo Nest', './images/warning.png', 'Error!'); return false; } return true; }