/// <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 } } }); } }
/// <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() } } }); } }
/// <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)); }
/// <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)); }
/// <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)); } }
/// <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() } } }); }