public async Task <List <WebTrackResultBase> > Search(string searchText) { using (var web = new WebClient { Proxy = null }) { var link = string.Format("https://gdata.youtube.com/feeds/api/videos?q={0}&alt=json&max-results=50", GeneralHelper.EscapeTitleName(searchText)); var resultstr = await web.DownloadStringTaskAsync(link); var result = JsonConvert.DeserializeObject <YouTubeSearchResult>(resultstr); if (result.feed == null || result.feed.entry == null || result.feed.entry.Count == 0) { return(new List <WebTrackResultBase>()); } return(result.feed.entry.Where(x => x.MediaGroup.Duration != null).Select(x => new YouTubeWebTrackResult { Duration = TimeSpan.FromSeconds(int.Parse(x.MediaGroup.Duration.seconds)), Title = x.title.Name, Uploader = x.author.First().name.Text, Result = x, Year = (uint)DateTime.Parse(x.published.Date).Year, ImageUrl = x.MediaGroup.Thumbnails.First().url, Views = x.Statistics != null ? uint.Parse(x.Statistics.viewCount) : 0, Url = x.link.First().href, Description = x.MediaGroup.Description.Text }).Cast <WebTrackResultBase>().ToList()); } }
public async static Task <BitmapImage> GetImage(ImageQuality imagequality, bool saveimage, DirectoryInfo directory, PlayableBase track, bool trimtrackname, bool UseArtist = true) { string apikey = SensitiveInformation.LastfmAPIKey; string _title = track.Title; string _artist = UseArtist ? track.Artist : string.Empty; if (trimtrackname) { _title = TrimTrackTitle(track.Title); } string url = Uri.EscapeUriString(string.Format("http://ws.audioscrobbler.com/2.0/?method=track.search&track={0}{1}&api_key={2}", GeneralHelper.EscapeTitleName(_title), !string.IsNullOrEmpty(_artist) ? "&artist=" + GeneralHelper.EscapeArtistName(_artist) : string.Empty, apikey)); using (WebClient web = new WebClient() { Proxy = null }) { string result = await web.DownloadStringTaskAsync(new Uri(url)); using (StringReader sr = new StringReader(result)) { XmlSerializer xmls = new XmlSerializer(typeof(lfm)); var item = (lfm)xmls.Deserialize(sr); if (item.results.trackmatches.Length > 0) { var foundtrack = item.results.trackmatches[0]; url = Uri.EscapeUriString(string.Format("http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key={2}&track={0}&artist={1}", foundtrack.name, foundtrack.artist, apikey)); result = await web.DownloadStringTaskAsync(url); using (StringReader srtrackinformation = new StringReader(result)) { var trackinfo = (lfm)xmls.Deserialize(srtrackinformation); if (trackinfo.track.album != null && trackinfo.track.album.image != null && trackinfo.track.album.image.Length > 0) { string imageurl = GetImageLink(trackinfo.track.album.image, imagequality); if (imageurl != null && !imageurl.EndsWith("default_album_medium.png") && !imageurl.EndsWith("[unknown].png")) //We don't want the default album art { BitmapImage img = await ImageHelper.DownloadImage(web, imageurl); string album; if (string.IsNullOrEmpty(trackinfo.track.album.title)) { album = string.IsNullOrEmpty(track.Album) ? _title : track.Album; } else { album = trackinfo.track.album.title; } if (saveimage) { await ImageHelper.SaveImage(img, album, directory.FullName); } return(img); } } if (directory.Exists) { foreach (var file in directory.GetFiles("*.png")) { if (GeneralHelper.EscapeFilename(_artist).ToLower() == Path.GetFileNameWithoutExtension(file.FullName).ToLower()) { var img = new BitmapImage(new Uri(file.FullName)); img.Freeze(); return(img); } } } if (trackinfo.track.artist != null && !string.IsNullOrEmpty(trackinfo.track.artist.mbid)) { url = string.Format("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&mbid={0}&api_key={1}", trackinfo.track.artist.mbid, apikey); } else if (trackinfo.track.artist != null && !string.IsNullOrEmpty(trackinfo.track.artist.name)) { url = string.Format("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist={0}&api_key={1}", trackinfo.track.artist.name, apikey); } else if (!string.IsNullOrEmpty(_artist)) { url = string.Format("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist={0}&autocorrect=1&api_key={1}", _artist, apikey); } if (string.IsNullOrEmpty(url)) { return(null); } result = await web.DownloadStringTaskAsync(Uri.EscapeUriString(url)); using (StringReader srartist = new StringReader(result)) { lfm artistinfo = (lfm)xmls.Deserialize(srartist); if (artistinfo.artist != null && artistinfo.artist.image != null && artistinfo.artist.image.Length > 0) { string imageurl = GetImageLink(artistinfo.artist.image, imagequality); if (imageurl == null) { return(null); } if (!imageurl.EndsWith("default_album_medium.png") && !imageurl.EndsWith("[unknown].png")) //We don't want the default album art { BitmapImage img = await ImageHelper.DownloadImage(web, imageurl); string artistname; if (string.IsNullOrEmpty(artistinfo.artist.name)) { artistname = string.IsNullOrEmpty(_artist) ? track.Title : _artist; } else { artistname = artistinfo.artist.name; } if (saveimage) { await ImageHelper.SaveImage(img, artistname, directory.FullName); } return(img); } } } } } } } return(null); }