public LastFMAlbum(XDocument xDoc) { if (xDoc.Root == null) { return; } var albumElement = xDoc.Root.Element("album"); if (albumElement == null) { return; } MusicBrainzId = (string)albumElement.Element("mbid"); AlbumName = (string)albumElement.Element("name"); ArtistName = (string)albumElement.Element("artist"); AlbumURL = (string)albumElement.Element("url"); Listeners = (int)albumElement.Element("listeners"); Playcount = (int)albumElement.Element("playcount"); Images = (from i in albumElement.Elements("image") select new LastFMImage( LastFMImage.GetImageSizeEnum((string)i.Attribute("size")), (string)i )).ToList(); Tags = (from tagElement in xDoc.Descendants("toptags").Elements("tag") let tagName = (string)tagElement.Element("name") let tagURL = (string)tagElement.Element("url") select new LastFMTag(tagName, tagURL) ).ToList(); Tracks = (from trackElement in xDoc.Descendants("tracks").Elements("track") let trackName = (string)trackElement.Element("name") let duration = (int)trackElement.Element("duration") let trackURL = (string)trackElement.Element("url") select new LastFMTrackBase { ArtistName = ArtistName, // response does not include artists per track so pull from album Duration = duration, TrackTitle = trackName, TrackURL = trackURL } ).ToList(); }
public LastFMTrackInfo(XDocument xDoc) { if (xDoc.Root == null) { return; } var track = xDoc.Root.Element("track"); if (track == null) { return; } Identifier = (int)track.Element("id"); TrackTitle = (string)track.Element("name"); MusicBrainzId = (string)track.Element("mbid"); TrackURL = (string)track.Element("url"); Duration = (int)track.Element("duration"); Listeners = (int)track.Element("listeners"); Playcount = (int)track.Element("playcount"); var artistElement = track.Element("artist"); if (artistElement != null) { ArtistName = (string)artistElement.Element("name"); } TopTags = (from tagElement in track.Descendants("tag") let tagName = (string)tagElement.Element("name") let tagURL = (string)tagElement.Element("url") select new LastFMTag(tagName, tagURL) ).ToList(); var albumElement = track.Element("album"); if (albumElement != null) { Images = (from i in albumElement.Elements("image") select new LastFMImage( LastFMImage.GetImageSizeEnum((string)i.Attribute("size")), (string)i ) ).ToList(); } }
public static List <LastFMSimilarTrack> GetSimilarTracks(XDocument xDoc) { var ci = new CultureInfo("en-GB"); if (xDoc != null) { var tracks = (from t in xDoc.Descendants("track") let trackName = (string)t.Element("name") let playcount = (string)t.Element("playcount") let mbid = (string)t.Element("mbid") let duration = (string)t.Element("duration") let match = (string)t.Element("match") let trackURL = (string)t.Element("url") let artistElement = t.Element("artist") where artistElement != null let artistName = (string)artistElement.Element("name") let images = ( from i in t.Elements("image") select new LastFMImage( LastFMImage.GetImageSizeEnum((string)i.Attribute("size")), (string)i ) ).ToList() select new LastFMSimilarTrack { TrackTitle = trackName, Playcount = string.IsNullOrEmpty(playcount) ? 0 : int.Parse(playcount, ci), MusicBrainzId = mbid, Duration = string.IsNullOrEmpty(duration) ? 0 : int.Parse(duration, ci), Match = string.IsNullOrEmpty(match) ? 0 : float.Parse(match, ci), TrackURL = trackURL, ArtistName = artistName, Images = images } ).ToList(); return(tracks); } return(null); }
} //TODO: last.fm have truncated this to 300 chars due to miuse. Not sure this is worth it now /// <summary> /// CTOR based on xml returned by last.fm /// </summary> /// <param name="xDoc">xml returned by last.fm</param> public LastFMFullArtist(XDocument xDoc) { if (xDoc.Root == null) { return; } var artistElement = xDoc.Root.Element("artist"); if (artistElement == null) { return; } MusicBrainzId = (string)artistElement.Element("mbid"); ArtistName = (string)artistElement.Element("name"); ArtistURL = (string)artistElement.Element("url"); Images = (from i in artistElement.Elements("image") select new LastFMImage( LastFMImage.GetImageSizeEnum((string)i.Attribute("size")), (string)i )).ToList(); var stats = artistElement.Element("stats"); if (stats != null) { Listeners = (int)stats.Element("listeners"); Playcount = (int)stats.Element("playcount"); } SimilarArtists = (from similarArtistElement in xDoc.Descendants("similar").Elements("artist") let artistName = (string)similarArtistElement.Element("name") let artistURL = (string)similarArtistElement.Element("url") let artistImages = ( from i in similarArtistElement.Elements("image") select new LastFMImage( LastFMImage.GetImageSizeEnum((string)i.Attribute("size")), (string)i ) ).ToList() select new LastFMArtist { ArtistName = artistName, ArtistURL = artistURL, Images = artistImages }) .ToList(); Tags = (from tagElement in xDoc.Descendants("tags").Elements("tag") let tagName = (string)tagElement.Element("name") let tagURL = (string)tagElement.Element("url") select new LastFMTag(tagName, tagURL) ).ToList(); BandMembers = (from memberElement in xDoc.Descendants("bandmembers").Elements("member") let memberName = (string)memberElement.Element("name") let yearFrom = (string)memberElement.Element("yearfrom") let yearTo = (string)memberElement.Element("yearto") select new LastFMBandMember(memberName, yearFrom, yearTo) ).ToList(); }