コード例 #1
0
        /// <summary>
        /// search by artists name
        /// </summary>
        /// <param name="search"></param>
        /// <returns></returns>
        public async Task <IActionResult> OnPostSearchByArtistNameAsync(string search)
        {
            using (HttpClient client = new HttpClient())
            {
                //Warning: This is a private wrapper around the spotify API, created only for this project and incapable of
                //         responding large number of requests (both server and Spotify user limitations),
                //         so please do not use this proxy in other projects because you will cause this proxy to become unavailable for me
                //         Thanks!
                var response = await client.GetAsync($"http://spotify.ganjoor.net/spotifyapi/search/artists/{HttpUtility.UrlEncode(search)}");

                NameIdUrlImage[] artists = new NameIdUrlImage[] { };

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    artists = JsonConvert.DeserializeObject <NameIdUrlImage[]>(await response.Content.ReadAsStringAsync());
                }


                return(new PartialViewResult()
                {
                    ViewName = "_SpotifySearchPartial",
                    ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
                    {
                        Model = new _SpotifySearchPartialModel()
                        {
                            Artists = artists
                        }
                    }
                });
            }
        }
コード例 #2
0
        /// <summary>
        /// search by track title
        /// </summary>
        /// <param name="search"></param>
        /// <returns></returns>
        public async Task <IActionResult> OnPostSearchByTrackTitleAsync(string search)
        {
            using (HttpClient client = new HttpClient())
            {
                var response = await client.GetAsync($"https://newapi.beeptunes.com/public/search?albumCount=0&artistCount=0&text={search}&trackCount=100");

                List <TrackQueryResult> tracks = new List <TrackQueryResult>();

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    BpSearchResponseModel bpResponse = JsonConvert.DeserializeObject <BpSearchResponseModel>(await response.Content.ReadAsStringAsync());
                    foreach (var track in bpResponse.Tracks)
                    {
                        if (track.FirstArtists != null && track.FirstArtists.Length > 0)
                        {
                            string albumName     = "";
                            var    responseAlbum = await client.GetAsync($"https://newapi.beeptunes.com/public/album/info/?albumId={track.Album_Id}");

                            if (responseAlbum.StatusCode == HttpStatusCode.OK)
                            {
                                NameIdUrlImage nameIdUrl = JsonConvert.DeserializeObject <NameIdUrlImage>(await responseAlbum.Content.ReadAsStringAsync());
                                albumName = nameIdUrl.Name;
                            }

                            tracks.Add
                            (
                                new TrackQueryResult()
                            {
                                Id         = track.Id,
                                Name       = track.Name,
                                Url        = track.Url,
                                AlbumId    = track.Album_Id,
                                AlbumName  = albumName,
                                AlbunUrl   = $"https://beeptunes.com/album/{track.Album_Id}",
                                ArtistId   = track.FirstArtists[0].Id,
                                ArtistName = track.FirstArtists[0].ArtisticName,
                                ArtistUrl  = track.FirstArtists[0].Url,
                                Image      = track.PrimaryImage
                            }
                            );
                        }
                    }
                }

                return(new PartialViewResult()
                {
                    ViewName = "_SpotifySearchPartial",
                    ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
                    {
                        Model = new _SpotifySearchPartialModel()
                        {
                            Tracks = tracks.ToArray()
                        }
                    }
                });
            }
        }
コード例 #3
0
        /// <summary>
        /// fill album tracks
        /// </summary>
        /// <param name="album">is an ID</param>
        /// <returns></returns>
        public async Task <IActionResult> OnPostFillTracksAsync(string album)
        {
            var response = await _httpClient.GetAsync($"https://newapi.beeptunes.com/public/album/list-tracks/?albumId={album}");

            NameIdUrlImage[] tracks = new NameIdUrlImage[] { };

            if (response.StatusCode == HttpStatusCode.OK)
            {
                tracks = JsonConvert.DeserializeObject <NameIdUrlImage[]>(await response.Content.ReadAsStringAsync());
                foreach (var track in tracks)
                {
                    track.Url = $"https://beeptunes.com/track/{track.Id}";
                }
            }
            return(new OkObjectResult(tracks));
        }
コード例 #4
0
        /// <summary>
        /// fill artist albums
        /// </summary>
        /// <param name="artist">is an ID</param>
        /// <returns></returns>
        public async Task <IActionResult> OnPostFillAlbumsAsync(string artist)
        {
            var response = await _httpClient.GetAsync($"https://newapi.beeptunes.com/public/artist/albums?artistId={artist}&begin=0&size=1000");

            NameIdUrlImage[] albums = new NameIdUrlImage[] { };

            if (response.StatusCode == HttpStatusCode.OK)
            {
                albums = JsonConvert.DeserializeObject <NameIdUrlImage[]>(await response.Content.ReadAsStringAsync());
                foreach (var album in albums)
                {
                    album.Url = $"https://beeptunes.com/album/{album.Id}";
                }
            }
            return(new OkObjectResult(albums));
        }
コード例 #5
0
        /// <summary>
        /// fill album tracks
        /// </summary>
        /// <param name="album">is an ID and consists of numeric and non-numeric characters</param>
        /// <returns></returns>
        public async Task <IActionResult> OnPostFillTracksAsync(string album)
        {
            using (HttpClient client = new HttpClient())
            {
                //Warning: This is a private wrapper around the spotify API, created only for this project and incapable of
                //         responding large number of requests (both server and Spotify user limitations),
                //         so please do not use this proxy in other projects because you will cause this proxy to become unavailable for me
                //         Thanks!
                var response = await client.GetAsync($"http://spotify.ganjoor.net/spotifyapi/albums/{album}/tracks");

                NameIdUrlImage[] tracks = new NameIdUrlImage[] { };

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    tracks = JsonConvert.DeserializeObject <NameIdUrlImage[]>(await response.Content.ReadAsStringAsync());
                }
                return(new OkObjectResult(tracks));
            }
        }
コード例 #6
0
        /// <summary>
        /// search by track title
        /// </summary>
        /// <param name="search"></param>
        /// <returns></returns>
        public async Task <IActionResult> OnPostSearchByTrackTitleAsync(string search, bool secondtime = false)
        {
            List <TrackQueryResult> tracks = new List <TrackQueryResult>();

            if (bool.Parse(Configuration["MockSpotify"]))
            {
                tracks.Add(
                    new TrackQueryResult()
                {
                    Name       = "من بی می ناب زیستن نتوانم",
                    Id         = "1",
                    Url        = "https://beeptunes.com/track/3434445",
                    Image      = "https://api.ganjoor.net/api/rimages/d32a98c3-a20c-4d37-45a9-08d93cffb0b7.jpg",
                    ArtistName = "محمدرضا شجریان",
                    ArtistId   = "1",
                    ArtistUrl  = "https://beeptunes.com/artist/3403349",
                    AlbumName  = "رباعیات خیام",
                    AlbumId    = "1",
                    AlbunUrl   = "https://beeptunes.com/album/3412806"
                }
                    );
            }
            else
            {
                if (!_memoryCache.TryGetValue("SpotifyAccessToken", out string spotifyAccessToken))
                {
                    using (HttpClient secureClient = new HttpClient())
                    {
                        if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
                        {
                            var responseOption = await secureClient.GetAsync($"{APIRoot.Url}/api/options/global/SpotifyAccessToken");

                            if (!responseOption.IsSuccessStatusCode)
                            {
                                spotifyAccessToken = "";
                                return(new BadRequestObjectResult(JsonConvert.DeserializeObject <string>(await responseOption.Content.ReadAsStringAsync())));
                            }
                            else
                            {
                                string encryptedAccessToken = JsonConvert.DeserializeObject <string>(await responseOption.Content.ReadAsStringAsync());
                                spotifyAccessToken = EncDecUtil.Decrypt(encryptedAccessToken, Configuration.GetSection("Spotify")["Salt"]);
                                _memoryCache.Set("SpotifyAccessToken", spotifyAccessToken);
                            }
                        }
                        else
                        {
                            return(new BadRequestObjectResult(JsonConvert.DeserializeObject <string>("لطفا از گنجور خارج و مجددا به آن وارد شوید.")));
                        }
                    }
                }

                string spotifyToken = $"Bearer {spotifyAccessToken}";

                var request = new HttpRequestMessage(HttpMethod.Get,
                                                     $"https://api.spotify.com/v1/search?q={search}&type=track");
                request.Headers.Add("Authorization", spotifyToken);

                var response = await _httpClient.SendAsync(request);


                if (response.IsSuccessStatusCode)
                {
                    string json = await response.Content.ReadAsStringAsync();

                    var parsed = JObject.Parse(json);

                    foreach (JToken track in parsed.SelectTokens("tracks.items[*]"))
                    {
                        string imageUrl = "";


                        NameIdUrlImage artistInfo = new NameIdUrlImage()
                        {
                            Id    = "0",
                            Name  = "",
                            Url   = "",
                            Image = ""
                        };
                        foreach (JToken artist in track.SelectTokens("artists[*]"))
                        {
                            artistInfo.Name = artist.SelectToken("name").Value <string>();
                            artistInfo.Id   = artist.SelectToken("id").Value <string>();
                            artistInfo.Url  = artist.SelectToken("external_urls.spotify").Value <string>();
                            break;
                        }
                        NameIdUrlImage albumInfo = new NameIdUrlImage()
                        {
                            Id    = "0",
                            Name  = "",
                            Url   = "",
                            Image = ""
                        };
                        JToken album = track.SelectToken("album");
                        if (album != null)
                        {
                            albumInfo.Name = album.SelectToken("name").Value <string>();
                            albumInfo.Id   = album.SelectToken("id").Value <string>();
                            albumInfo.Url  = album.SelectToken("external_urls.spotify").Value <string>();

                            foreach (JToken image in album.SelectTokens("images[*].url"))
                            {
                                imageUrl = image.Value <string>();
                                break;
                            }
                        }
                        tracks.Add(
                            new TrackQueryResult()
                        {
                            Name       = track.SelectToken("name").Value <string>(),
                            Id         = track.SelectToken("id").Value <string>(),
                            Url        = track.SelectToken("external_urls.spotify").Value <string>(),
                            Image      = imageUrl,
                            ArtistName = artistInfo.Name,
                            ArtistId   = artistInfo.Id,
                            ArtistUrl  = artistInfo.Url,
                            AlbumName  = albumInfo.Name,
                            AlbumId    = albumInfo.Id,
                            AlbunUrl   = albumInfo.Url
                        }
                            );
                    }
                }
                else
                {
                    if (!secondtime)
                    {
                        await _RefreshSpotifyToken();

                        return(await OnPostSearchByTrackTitleAsync(search, true));
                    }
                    return(BadRequest(response.ToString()));
                }
            }

            return(new PartialViewResult()
            {
                ViewName = "_SpotifySearchPartial",
                ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
                {
                    Model = new _SpotifySearchPartialModel()
                    {
                        Tracks = tracks.ToArray()
                    }
                }
            });
        }