// http://musicbrainz.org/ws/1/artist/?type=xml&name=Toto /// <summary> /// Get Full Artist data by ID /// </summary> /// <param name="MBID"></param> /// <returns></returns> public MusicBrainzArtist GetMusicBrainzArtistByID(string MBID) { string newURL; newURL = "http://musicbrainz.org/ws/2/artist/" + MBID + "?inc=artist-rels+url-rels+tags"; XmlDocument xmldata; // Get data from WEB xmldata = GetMusicBrainzData(newURL); if (xmldata == null) { return(null); } MusicBrainzArtist mbArtist = new MusicBrainzArtist(); // mbArtists.mbArtists = new List<MusicBrainzArtist>(); XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xmldata.NameTable); namespaceManager.AddNamespace("r", xmldata.DocumentElement.NamespaceURI); // http://www.w3schools.com/xpath/xpath_syntax.asp // Get name of label //XmlNodeList elements = xmllabel.SelectNodes("//r:metadata/r:label-list/r:label[@s:score>90]", namespaceManager); mbArtist.MBID = ""; mbArtist.ArtistName = ""; mbArtist.SortName = ""; mbArtist.Type = ""; mbArtist.BeginDate = ""; mbArtist.EndDate = ""; mbArtist.BandMember = new List <MusicBrainzArtistBaseData>(); mbArtist.miscURLs = new List <MusicbrainzURLs>(); mbArtist.Tags = new List <string>(); XmlNodeList nodelist = xmldata.SelectNodes("//r:metadata/r:artist", namespaceManager); if (nodelist.Count > 0) { if (((XmlElement)nodelist[0]).HasAttribute("type")) { mbArtist.Type = ((XmlElement)nodelist[0]).GetAttribute("type"); } if (((XmlElement)nodelist[0]).HasAttribute("id")) { mbArtist.MBID = ((XmlElement)nodelist[0]).GetAttribute("id"); } } nodelist = xmldata.SelectNodes("//r:metadata/r:artist/*", namespaceManager); foreach (XmlElement element in nodelist) { if (element.LocalName.ToLower() == "gender") { mbArtist.Gender = element.InnerText; } if (element.LocalName.ToLower() == "country") { mbArtist.Country = element.InnerText; } if (element.LocalName == "name") { mbArtist.ArtistName = element.InnerText; } if (element.LocalName == "sort-name") { mbArtist.SortName = element.InnerText; } if (element.LocalName == "life-span") { XmlNodeList elementsLife = xmldata.SelectNodes("//r:metadata/r:artist/r:life-span/*", namespaceManager); foreach (XmlElement element3 in elementsLife) { if (element3.LocalName == "begin") { mbArtist.BeginDate = element3.InnerText; } if (element3.LocalName == "end") { mbArtist.EndDate = element3.InnerText; } } } } nodelist = xmldata.SelectNodes("//r:metadata/r:artist/r:tag-list/*", namespaceManager); foreach (XmlElement element in nodelist) { if (element.LocalName == "tag") { mbArtist.Tags.Add(element.InnerText); } } XmlNodeList xnode22 = xmldata.SelectNodes("/r:metadata/r:artist/r:relation-list/r:relation[@type='is person']/r:artist", namespaceManager); foreach (XmlElement element22 in xnode22) { { MusicBrainzArtistBaseData mb = new MusicBrainzArtistBaseData(); mb.MBID = element22.GetAttribute("id"); mb.Type = "Person"; //XmlNodeList xmlParent = element2.ParentNode; XmlNode xmlParent = element22.ParentNode; XmlNodeList xml32 = xmlParent.ChildNodes; foreach (XmlElement eattribute in xml32) { if (eattribute.Name == "begin") { mb.BeginGroupMember = eattribute.InnerText; } if (eattribute.Name == "end") { mb.EndGroupMember = eattribute.InnerText; } } //string xac = xmlParent.Attributes.GetNamedItem("begin"); mb.Type = "Person"; XmlNodeList xml2 = element22.ChildNodes; foreach (XmlElement element3 in xml2) { if (element3.LocalName.ToLower() == "gender") { mbArtist.Gender = element3.InnerText; } if (element3.LocalName.ToLower() == "country") { mbArtist.Country = element3.InnerText; } if (element3.Name == "name") { mb.ArtistName = element3.InnerText; } if (element3.Name == "sort-name") { mb.SortName = element3.InnerText; } if (element3.Name == "life-span") { if (element3.HasAttribute("begin")) { mb.BeginDate = element3.GetAttribute("begin"); } if (element3.HasAttribute("end")) { mb.EndDate = element3.GetAttribute("end"); } } } if (mb != null) { mbArtist.BandMember.Add(mb); } } } XmlNodeList xnode2 = xmldata.SelectNodes("/r:metadata/r:artist/r:relation-list/r:relation[@type='member of band']/r:artist", namespaceManager); foreach (XmlElement element2 in xnode2) { //if (element2.GetAttribute("type") == "Person") { MusicBrainzArtistBaseData mb = new MusicBrainzArtistBaseData(); mb.MBID = element2.GetAttribute("id"); mb.Type = "Bandmitglied"; //XmlNodeList xmlParent = element2.ParentNode; XmlNode xmlParent = element2.ParentNode; XmlNodeList xml32 = xmlParent.ChildNodes; foreach (XmlElement eattribute in xml32) { if (eattribute.Name == "begin") { mb.BeginGroupMember = eattribute.InnerText; } if (eattribute.Name == "end") { mb.EndGroupMember = eattribute.InnerText; } } //string xac = xmlParent.Attributes.GetNamedItem("begin"); XmlNodeList xml2 = element2.ChildNodes; foreach (XmlElement element3 in xml2) { if (element3.LocalName.ToLower() == "gender") { mbArtist.Gender = element3.InnerText; } if (element3.LocalName.ToLower() == "country") { mbArtist.Country = element3.InnerText; } if (element3.Name == "name") { mb.ArtistName = element3.InnerText; } if (element3.Name == "sort-name") { mb.SortName = element3.InnerText; } if (element3.Name == "life-span") { if (element3.HasAttribute("begin")) { mb.BeginDate = element3.GetAttribute("begin"); } if (element3.HasAttribute("end")) { mb.EndDate = element3.GetAttribute("end"); } } } if (mb != null) { mbArtist.BandMember.Add(mb); } } } XmlNodeList xnode3 = xmldata.SelectNodes("/r:metadata/r:artist/r:relation-list[@target-type='url']/r:relation", namespaceManager); foreach (XmlElement element2 in xnode3) { if (element2.HasAttribute("type")) { MusicbrainzURLs mburl = new MusicbrainzURLs(); if (element2.GetAttribute("type").ToLower() == "official homepage") { mbArtist.Homepage = element2.InnerText; mburl.Type = element2.GetAttribute("type"); mburl.Target = element2.InnerText; mbArtist.miscURLs.Add(mburl); } else { mburl.Type = element2.GetAttribute("type"); mburl.Target = element2.InnerText; mbArtist.miscURLs.Add(mburl); } } } return(mbArtist); }
// http://musicbrainz.org/ws/1/artist/?type=xml&name=Toto public ResultMusicBrainzArtist SearchMusicBrainzArtistData(string searchArtistName) { string newURL; if (searchArtistName.Length < 1) { return(null); } newURL = "http://musicbrainz.org/ws/2/artist/?query=artist:" + searchArtistName; XmlDocument xmldata; // Get data from WEB xmldata = GetMusicBrainzData(newURL); if (xmldata == null) { return(null); } ResultMusicBrainzArtist mbArtists = new ResultMusicBrainzArtist(); mbArtists.mbArtists = new List <MusicBrainzArtistBaseData>(); XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xmldata.NameTable); namespaceManager.AddNamespace("r", xmldata.DocumentElement.NamespaceURI); namespaceManager.AddNamespace("s", xmldata.DocumentElement.GetNamespaceOfPrefix("ext")); // http://www.w3schools.com/xpath/xpath_syntax.asp // Get name of label //XmlNodeList elements = xmllabel.SelectNodes("//r:metadata/r:label-list/r:label[@s:score>90]", namespaceManager); XmlNodeList elements = xmldata.SelectNodes("//r:metadata/r:artist-list/r:artist", namespaceManager); foreach (XmlElement element in elements) { if (element.HasAttribute("ext:score") == true) { if (element.GetAttribute("ext:score") == "100") { XmlNodeList xml2 = element.ChildNodes; MusicBrainzArtistBaseData mb = new MusicBrainzArtistBaseData(); mb.Score = ""; mb.MBID = ""; mb.ArtistName = ""; mb.SortName = ""; mb.Type = ""; mb.BeginDate = ""; mb.EndDate = ""; mb.Comment = ""; mb.Gender = ""; mb.Country = ""; mb.MBID = element.GetAttribute("id"); mb.Type = element.GetAttribute("type"); mb.Score = element.GetAttribute("ext:score"); foreach (XmlElement element2 in xml2) { if (element2.LocalName.ToLower() == "gender") { mb.Gender = element2.InnerText; } if (element2.LocalName.ToLower() == "country") { mb.Country = element2.InnerText; } if (element2.LocalName == "name") { mb.ArtistName = element2.InnerText; } if (element2.LocalName == "sort-name") { mb.SortName = element2.InnerText; } if (element2.LocalName == "life-span") { /* * XmlNodeList elements2 = xmldata.SelectNodes("//r:metadata/r:artist-list/r:artist/r:life-span", namespaceManager); * foreach (XmlElement element3 in elements2) * { * if (element3.LocalName == "begin") * { * mb.BeginDate = element3.InnerText; * } * if (element3.LocalName == "end") * { * mb.EndDate = element3.InnerText; * } * } * * if (element2.HasAttribute("begin")) * { * mb.BeginDate = element2.GetAttribute("begin"); * } * * if (element2.HasAttribute("end")) * { * mb.EndDate = element2.GetAttribute("end"); * } */ } } mbArtists.mbArtists.Add(mb); } } } return(mbArtists); }