Esempio n. 1
0
/**
 * 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++;
        }
    }
}
Esempio n. 2
0
/**
 * 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;
}