コード例 #1
0
ファイル: MusicBrainz.cs プロジェクト: Big3Software/hitbase
        // 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);
        }
コード例 #2
0
ファイル: MusicBrainz.cs プロジェクト: Big3Software/hitbase
        // 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);
        }