public Uri GetSearchURL(string searchText, YandexSearchType searchType, int page) { var searchTypeAsString = searchType.ToString(); var urlSearch = new StringBuilder(); urlSearch.Append($"https://music.yandex.ru/handlers/music-search.jsx?text={searchText}"); urlSearch.Append($"&type={searchTypeAsString}"); urlSearch.Append( $"&page={page}&ncrnd=0.7060701951464323&lang=ru&external-domain=music.yandex.ru&overembed=false"); return(new Uri(urlSearch.ToString())); }
public async Task <YSearchResponse> SearchAsync(string searchText, YandexSearchType searchType, int page = 0) { var json = default(JToken); var request = new YSearchRequest(_httpContext).Create(searchText, searchType, page); using (var response = (HttpWebResponse)await request.GetResponseAsync()) { json = await GetDataFromResponseAsync(response); } var yandexResponse = YSearchResponse.FromJson(json); return(yandexResponse); }
public HttpWebRequest Create(string searchText, YandexSearchType searchType, int page = 0) { var searchTypeAsString = searchType.ToString(); var urlSearch = new StringBuilder(); urlSearch.Append($"https://music.yandex.ru/handlers/music-search.jsx?text={searchText}"); urlSearch.Append($"&type={searchTypeAsString}"); urlSearch.Append( $"&page={page}&ncrnd=0.7060701951464323&lang=ru&external-domain=music.yandex.ru&overembed=false"); var url = urlSearch.ToString(); var request = GetRequest(url, WebRequestMethods.Http.Get); return(request); }
internal YandexMusicSearchResult(string query, bool isSearchResult, YandexSearchType type, IReadOnlyCollection <YandexMusicAlbum>?albums, IReadOnlyCollection <YandexMusicPlaylist>?playlists, IReadOnlyCollection <YandexMusicTrack>?tracks, int?limit = null) { Query = query; Limit = limit; Type = type; Albums = albums; Playlists = playlists; Tracks = tracks; IsSearchResult = isSearchResult; }
/// <inheritdoc /> public async Task <YandexMusicSearchResult?> LoadSearchResult(YandexSearchType type, string query, int limit = DefaultLimit) { try { var searchResponse = await new YandexCustomRequest(_config) .Create(string.Format(TracksInfoFormat, type, query)) .GetResponseAsync <MetaSearchResponse>(); var albums = searchResponse.Albums?.Results.Take(limit).Select(signature => signature.ToYmAlbum(_playlistLoader)); var playlists = searchResponse.Playlists?.Results.Take(limit).Select(signature => signature.ToYaPlaylist(_playlistLoader)); var tracks = searchResponse.Tracks?.Results.Take(limit).Select(track => track.ToYmTrack()); return(new YandexMusicSearchResult(query, true, type, albums?.ToList().AsReadOnly(), playlists?.ToList().AsReadOnly(), tracks?.ToList().AsReadOnly(), limit)); } catch (Exception e) { throw new YandexMusicException("Exception while loading search results", e); } }
/// <inheritdoc /> public bool TryParseQuery(string query, out string text, out YandexSearchType type, out int limit) { type = YandexSearchType.Track; limit = DefaultLimit; text = query; if (!query.StartsWith(SearchPrefix + ":")) { return(false); } var match = _searchRegex.Match(query); if (!match.Success) { return(false); } type = Enum.TryParse(typeof(YandexSearchType), match.Groups[2].Value, true, out var o) ? (YandexSearchType)o : YandexSearchType.Track; limit = int.TryParse(match.Groups[4].Value, out var i) ? i : DefaultLimit; text = match.Groups[5].Value; return(true); }
public List <IYandexSearchable> Search(string searchText, YandexSearchType searchType, int page = 0) { var listResult = new List <IYandexSearchable>(); var request = GetRequest(_settings.GetSearchURL(searchText, searchType, page), WebRequestMethods.Http.Get); using (var response = (HttpWebResponse)request.GetResponse()) { var json = GetDataFromResponse(response); var fieldName = searchType.ToString().ToLower(); var jArray = (JArray)json[fieldName]["items"]; if (searchType == YandexSearchType.Tracks) { listResult = YandexTrack.FromJsonArray(jArray).Select(x => (IYandexSearchable)x).ToList(); } else if (searchType == YandexSearchType.Artists) { listResult = YandexArtist.FromJsonArray(jArray).Select(x => (IYandexSearchable)x).ToList(); } else if (searchType == YandexSearchType.Albums) { listResult = YandexAlbum.FromJsonArray(jArray).Select(x => (IYandexSearchable)x).ToList(); } else if (searchType == YandexSearchType.Playlists) { listResult = YandexPlaylist.FromJsonArray(jArray).Select(x => (IYandexSearchable)x).ToList(); } else if (searchType == YandexSearchType.Users) { listResult = YandexUser.FromJsonArray(jArray).Select(x => (IYandexSearchable)x).ToList(); } } return(listResult); }
public YSearchResponse Search(string searchText, YandexSearchType searchType, int page = 0) { return(SearchAsync(searchText, searchType, page).GetAwaiter().GetResult()); }