예제 #1
0
        // Crawling top 200 Album in Billboard 200
        public static void GetTopAlbum()
        {
            string connection = "Server = DESKTOP-0GK7VKO; Database = TopBillboard; User Id = mydb; Password = 221198;";
            var    html       = @"https://www.billboard.com/charts/billboard-200";

            HtmlWeb web = new HtmlWeb();

            var htmlDoc = web.Load(html);

            var main = htmlDoc.GetElementbyId("main");

            using (SqlConnection cnn = new SqlConnection(connection))
            {
                cnn.Open();
                //clear gia tri da luu trong string va db
                //TopAlbum = "";
                //TopAlbumArtist = "";
                int countTopAlbum = 0;



                //lay ten album
                var listNames1 = main.SelectNodes("//span[contains(@class, 'chart-element__information__song text--truncate color--primary')]");
                foreach (var name in listNames1)
                {
                    string insertalbumName = "INSERT INTO Album(name, Album_rank) VALUES(@name, @rank)";

                    using (SqlCommand CmdAlbumInsert = new SqlCommand(insertalbumName, cnn))
                    {
                        CmdAlbumInsert.Parameters.AddWithValue("@name", StringHandle.RemoveFirstWhiteSpace(name.InnerText));
                        CmdAlbumInsert.Parameters.AddWithValue("@rank", countTopAlbum + 1);

                        CmdAlbumInsert.ExecuteNonQuery();

                        // TopAlbum = TopAlbum + (countTopAlbum + 1).ToString() + " " + name.InnerText + "\r\n";
                        countTopAlbum++;
                    }
                }
            }

            using (SqlConnection cnn = new SqlConnection(connection))
            {
                //dien vao table Album
                cnn.Open();
                int countrank  = 1;
                var listNames2 = main.SelectNodes("//span[contains(@class, 'chart-element__information__artist text--truncate color--secondary')]");
                foreach (var name in listNames2)
                {
                    string findArtist = "SELECT id from Artist WHERE name = @value";
                    using (SqlCommand CmdFind = new SqlCommand(findArtist, cnn))
                    {
                        CmdFind.Parameters.AddWithValue("@value", StringHandle.RemoveFirstWhiteSpace(name.InnerText));
                        Int32 IDArtists = (Int32)CmdFind.ExecuteScalar();


                        //textBoxInfo.Text += countrank.ToString() + name.InnerText + ": " + IDArtists.ToString() + "\r\n";
                        string     insert    = "UPDATE Album SET artistID = @value WHERE id = @id";
                        SqlCommand CmdInsert = new SqlCommand(insert, cnn);

                        CmdInsert.Parameters.AddWithValue("@value", IDArtists);
                        CmdInsert.Parameters.AddWithValue("@id", countrank);

                        CmdInsert.ExecuteNonQuery();
                        countrank++;
                    }
                }
            }
        }
예제 #2
0
        public static void GetTopArtist()
        {
            var html = @"https://www.billboard.com/charts/artist-100";

            string connection = "Server = DESKTOP-0GK7VKO; Database = TopBillboard; User Id = mydb; Password = 221198;";

            HtmlWeb web = new HtmlWeb();

            var htmlDoc = web.Load(html);

            using (SqlConnection cnn = new SqlConnection(connection))
            {
                cnn.Open();
                int rank = 1;

                var main = htmlDoc.GetElementbyId("main");



                var listNames = main.SelectNodes("//span[contains(@class, 'chart-list-item__title-text')]");
                foreach (var name in listNames)
                {
                    try
                    {
                        string     InsertArtist = "INSERT INTO Artist(name) VALUES(@name)";
                        SqlCommand CmdInsArtist = new SqlCommand(InsertArtist, cnn);
                        CmdInsArtist.Parameters.AddWithValue("@name", StringHandle.RemoveFirstWhiteSpace(name.InnerText));
                        //textBoxInfo.Text += name.InnerText + "\r\n";
                        CmdInsArtist.ExecuteNonQuery();
                    }
                    catch (SqlException ex)
                    {
                        Console.Write(ex.Message);
                    }
                    //string Update = "UPDATE TopArtist SET artistID = @id, RankInChart = @val WHERE ";
                }
                foreach (var name in listNames)
                {
                    string findArtist = "SELECT id from Artist WHERE name = @value";
                    using (SqlCommand CmdFind = new SqlCommand(findArtist, cnn))
                    {
                        CmdFind.Parameters.AddWithValue("@value", StringHandle.RemoveFirstWhiteSpace(name.InnerText));
                        Int32 ID = (Int32)CmdFind.ExecuteScalar();


                        string     InsertRank = "INSERT INTO TopArtist(RankInChart, artistID) VALUES(@rank, @id)";
                        SqlCommand CmdInsRank = new SqlCommand(InsertRank, cnn);
                        CmdInsRank.Parameters.AddWithValue("@rank", rank);
                        CmdInsRank.Parameters.AddWithValue("@id", ID);
                        CmdInsRank.ExecuteNonQuery();

                        // textBoxInfo.Text += rank.ToString() + name.InnerText + ": " + ID.ToString() + "." + "\r\n";

                        rank++;
                    }
                }
            }
            //lay ten artist cua top 200 album
            using (SqlConnection cnn = new SqlConnection(connection))
            {
                cnn.Open();


                var html1 = @"https://www.billboard.com/charts/billboard-200";

                HtmlWeb web1 = new HtmlWeb();

                var htmlDoc1 = web1.Load(html1);

                var main1 = htmlDoc1.GetElementbyId("main");

                var listNames2 = main1.SelectNodes("//span[contains(@class, 'chart-element__information__artist text--truncate color--secondary')]");
                foreach (var name in listNames2)
                {
                    try
                    {
                        string InsertArtist = "INSERT INTO Artist(name) VALUES(@name)";


                        SqlCommand CmdInsArtist = new SqlCommand(InsertArtist, cnn);
                        CmdInsArtist.Parameters.AddWithValue("@name", StringHandle.RemoveFirstWhiteSpace(name.InnerText));
                        //textBoxInfo.Text += name.InnerText + "\r\n";
                        CmdInsArtist.ExecuteNonQuery();
                    }
                    catch (SqlException ex)
                    {
                        Console.Write(ex.Message);
                    }
                }
            }
        }
예제 #3
0
        public void GetAll()
        {
            Sqlhandle.ClearData();
            string        Top100SongNames           = "";
            string        Top100SongsMainAritst     = "";
            string        Top100SongsFeaturedAritst = "";
            List <string> Top100SongArtists         = new List <string>();
            string        connection = "Server = DESKTOP-0GK7VKO; Database = TopBillboard; User Id = mydb; Password = 221198;";

            //textBoxInfo.Clear();

            Top100SongNames = "";

            Top100SongArtists.Clear();
            int countSong = 0;
            HtmlElementCollection AllSpansSongs = webBrowserTopSong.Document.GetElementsByTagName("span");

            using (SqlConnection cnn = new SqlConnection(connection))
            {
                cnn.Open();

                foreach (HtmlElement el in AllSpansSongs)
                {
                    if (el.GetAttribute("className") == "chart-element__information__song text--truncate color--primary")
                    {
                        Top100SongNames = Top100SongNames + " " + el.InnerText + "\r\n";

                        string commandInsert = "INSERT INTO Song(name,RankInChart) VALUES (@name, @rank) ";

                        SqlCommand cmdinsert = new SqlCommand(commandInsert, cnn);
                        cmdinsert.Parameters.AddWithValue("@name", StringHandle.RemoveFirstWhiteSpace(el.InnerText));
                        cmdinsert.Parameters.AddWithValue("@rank", (countSong + 1));

                        cmdinsert.ExecuteNonQuery();

                        countSong++;
                    }
                }

                // Lay ten artist
                int countArtist = 0;
                HtmlElementCollection AllSpansArtist = webBrowserTopSong.Document.GetElementsByTagName("span");
                int rank = 1;
                foreach (HtmlElement el in AllSpansArtist)
                {
                    Top100SongsMainAritst     = "";
                    Top100SongsFeaturedAritst = "";

                    if (el.GetAttribute("className") == "chart-element__information__artist text--truncate color--secondary")
                    {
                        //Top100SongArtists.Add(el.InnerText);
                        string[] NameArtist = el.InnerText.Split(' ');

                        int IndexOfFt = StringHandle.GetKeyWords(NameArtist, "featuring");

                        //int IndexofAnd = StringHandle.GetKeyWords(NameArtist, "&");

                        //int IndexofX = StringHandle.GetKeyWords(NameArtist, "x");

                        //neu co featuring
                        if (IndexOfFt != 0)
                        {
                            // cut string lam 2 voi index of string("featuring") lam moc
                            //doan dau se la main artist
                            // ta luu vao db

                            for (int i = 0; i < IndexOfFt; i++)
                            {
                                Top100SongsMainAritst += NameArtist[i].ToString() + " ";
                            }
                            try
                            {
                                string CommandInsertArtist = "INSERT INTO Artist(name) VALUES(@name)";

                                SqlCommand cmdInsertArtist = new SqlCommand(CommandInsertArtist, cnn);

                                cmdInsertArtist.Parameters.AddWithValue("@name", StringHandle.RemoveFirstWhiteSpace(Top100SongsMainAritst));

                                cmdInsertArtist.ExecuteNonQuery();
                            }
                            catch (SqlException ex)
                            {
                                Console.Write(ex.Message);
                            }
                            //luu vao bang main artist
                            string FindMainSongID = "SELECT id from Song WHERE RankInChart = @val";

                            using (SqlCommand CmdFindSongID = new SqlCommand(FindMainSongID, cnn))
                            {
                                CmdFindSongID.Parameters.AddWithValue("@val", rank);
                                Int32 ID = (Int32)CmdFindSongID.ExecuteScalar();

                                string AddID = "INSERT INTO MainArtistInSong(SongID) VALUES(@val)";
                                using (SqlCommand CmdAddSongID = new SqlCommand(AddID, cnn))
                                {
                                    CmdAddSongID.Parameters.AddWithValue("@val", ID);
                                    CmdAddSongID.ExecuteNonQuery();

                                    string FindMainArtID = "SELECT id from Artist WHERE name = @val";

                                    using (SqlCommand CmdFindArtID = new SqlCommand(FindMainArtID, cnn))
                                    {
                                        CmdFindArtID.Parameters.AddWithValue("@val", StringHandle.RemoveFirstWhiteSpace(Top100SongsMainAritst));
                                        Int32      ArtID       = (Int32)CmdFindArtID.ExecuteScalar();
                                        string     AddArtID    = "UPDATE MainArtistInSong SET main_artistID = @val WHERE SongID = @val1";
                                        SqlCommand CmdAddArtID = new SqlCommand(AddArtID, cnn);
                                        CmdAddArtID.Parameters.AddWithValue("@val", ArtID);
                                        CmdAddArtID.Parameters.AddWithValue("@val1", ID);
                                        CmdAddArtID.ExecuteNonQuery();
                                    }
                                }
                            }
                            //doan sau se la featured artist
                            for (int i = IndexOfFt + 1; i < NameArtist.Length; i++)
                            {
                                Top100SongsFeaturedAritst += NameArtist[i].ToString() + " ";
                            }
                            try
                            {
                                string CommandInsertArtist = "INSERT INTO Artist(name) VALUES(@name)";

                                SqlCommand cmdInsertArtist = new SqlCommand(CommandInsertArtist, cnn);

                                cmdInsertArtist.Parameters.AddWithValue("@name", StringHandle.RemoveFirstWhiteSpace(Top100SongsFeaturedAritst));

                                cmdInsertArtist.ExecuteNonQuery();
                            }
                            catch (SqlException ex)
                            {
                                Console.Write(ex.Message);
                            }

                            string FindFTSongID = "SELECT id from Song WHERE RankInChart = @val";

                            using (SqlCommand CmdFindSongID = new SqlCommand(FindFTSongID, cnn))
                            {
                                CmdFindSongID.Parameters.AddWithValue("@val", rank);
                                Int32 ID = (Int32)CmdFindSongID.ExecuteScalar();

                                string AddID = "INSERT INTO FeaturedArtistInSong(SongID) VALUES(@val)";
                                using (SqlCommand CmdAddSongID = new SqlCommand(AddID, cnn))
                                {
                                    CmdAddSongID.Parameters.AddWithValue("@val", ID);
                                    CmdAddSongID.ExecuteNonQuery();

                                    string FindFTArtID = "SELECT id from Artist WHERE name = @val";

                                    using (SqlCommand CmdFindArtID = new SqlCommand(FindFTArtID, cnn))
                                    {
                                        CmdFindArtID.Parameters.AddWithValue("@val", StringHandle.RemoveFirstWhiteSpace(Top100SongsFeaturedAritst));
                                        Int32      ArtID       = (Int32)CmdFindArtID.ExecuteScalar();
                                        string     AddArtID    = "UPDATE FeaturedArtistInSong SET featured_artistID = @val WHERE SongID = @val1";
                                        SqlCommand CmdAddArtID = new SqlCommand(AddArtID, cnn);
                                        CmdAddArtID.Parameters.AddWithValue("@val", ArtID);
                                        CmdAddArtID.Parameters.AddWithValue("@val1", ID);
                                        CmdAddArtID.ExecuteNonQuery();
                                    }
                                }
                            }
                        }

                        //khi khong co
                        else
                        {
                            try
                            {
                                string CommandInsertArtist = "INSERT INTO Artist(name) VALUES(@name)";

                                SqlCommand cmdInsertArtist = new SqlCommand(CommandInsertArtist, cnn);

                                cmdInsertArtist.Parameters.AddWithValue("@name", StringHandle.RemoveFirstWhiteSpace(el.InnerText));
                                cmdInsertArtist.ExecuteNonQuery();
                            }
                            catch (SqlException ex)
                            {
                                Console.Write(ex.Message);
                            }
                            string FindMainSongID = "SELECT id from Song WHERE RankInChart = @val";

                            using (SqlCommand CmdFindSongID = new SqlCommand(FindMainSongID, cnn))
                            {
                                CmdFindSongID.Parameters.AddWithValue("@val", rank);
                                Int32 ID = (Int32)CmdFindSongID.ExecuteScalar();

                                string AddID = "INSERT INTO MainArtistInSong(SongID) VALUES(@val)";
                                using (SqlCommand CmdAddSongID = new SqlCommand(AddID, cnn))
                                {
                                    CmdAddSongID.Parameters.AddWithValue("@val", ID);
                                    CmdAddSongID.ExecuteNonQuery();

                                    string FindMainArtID = "SELECT id from Artist WHERE name = @val";

                                    using (SqlCommand CmdFindArtID = new SqlCommand(FindMainArtID, cnn))
                                    {
                                        CmdFindArtID.Parameters.AddWithValue("@val", StringHandle.RemoveFirstWhiteSpace(el.InnerText));
                                        Int32      ArtID       = (Int32)CmdFindArtID.ExecuteScalar();
                                        string     AddArtID    = "UPDATE MainArtistInSong SET main_artistID = @val WHERE SongID = @val1";
                                        SqlCommand CmdAddArtID = new SqlCommand(AddArtID, cnn);
                                        CmdAddArtID.Parameters.AddWithValue("@val", ArtID);
                                        CmdAddArtID.Parameters.AddWithValue("@val1", ID);
                                        CmdAddArtID.ExecuteNonQuery();
                                    }
                                }
                            }
                        }

                        rank++;
                        countArtist++;
                    }
                }
            }

            Sqlhandle.GetTopArtist();

            Sqlhandle.GetTopAlbum();
        }