/** * getSimilarSongs * Returns a random collection of songs from the given artist and similar artists, using data from last.fm. Typically used for artist radio features. * Takes song/album/artist id in parameter with optional similar songs count. */ public static function getsimilarsongs($input) { $id = self::check_parameter($input, 'id'); $count = $input['count'] ?: 50; $songs = null; if (Subsonic_XML_Data::isArtist($id)) { // TODO: support similar songs for artists } elseif (Subsonic_XML_Data::isAlbum($id)) { // TODO: support similar songs for albums } elseif (Subsonic_XML_Data::isSong($id)) { if (AmpConfig::get('show_similar')) { $songs = Recommendation::get_songs_like(Subsonic_XML_Data::getAmpacheId($id)); } } if ($songs === null) { $r = Subsonic_XML_Data::createError(Subsonic_XML_Data::SSERROR_DATA_NOTFOUND); } else { $r = Subsonic_XML_Data::createSuccessResponse(); Subsonic_XML_Data::addSimilarSongs($r, $songs); } self::apiOutput($input, $r); }
$object_ids[] = $similar['id']; } else { $missing_objects[] = $similar; } } } ob_start(); require_once AmpConfig::get('prefix') . UI::find_template('show_recommended_artists.inc.php'); $results['similar_artist'] = ob_get_clean(); } break; case 'similar_now_playing': $media_id = $_REQUEST['media_id']; if (AmpConfig::get('show_similar') && isset($media_id) && isset($_REQUEST['media_artist'])) { $artists = Recommendation::get_artists_like($_REQUEST['media_artist'], 3, false); $songs = Recommendation::get_songs_like($media_id, 3); ob_start(); require_once AmpConfig::get('prefix') . UI::find_template('show_now_playing_similar.inc.php'); $results['similar_items_' . $media_id] = ob_get_clean(); } break; case 'concerts': if (AmpConfig::get('show_concerts') && isset($_REQUEST['artist'])) { $artist = new Artist($_REQUEST['artist']); $artist->format(); if ($artist->id) { $up_concerts = Artist_Event::get_upcoming_events($artist); $past_concerts = Artist_Event::get_past_events($artist); $coming_concerts = array(); $concerts = array(); if ($up_concerts) {