Beispiel #1
0
        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;
 }
Beispiel #5
0
        /// <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);
            }
        }
Beispiel #6
0
        /// <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());
 }