Jak napisać taki program?

0

Witam!

Chciałbym zrobić aplikację, która z pliku wczytuje adresy url filmów youtube, a następnie w tabeli wyświetla: tytuł, oceny, wyświetlenia, długość filmiku, autora itd. Dodatkowo, chciałbym abym miał opcję "odświeżenia" i zobaczenia ile wyświetleń/ocen itd przybyło mi od czasu dodawania adresu url do aplikacji.

Jest już identycznie działająca aplikacja, którą kupiłem. Wygląda ona tak:
user image

Programowanie zacząłem niedawno i myślę, że taka aplikacja jest dla mnie niemałym wyzwaniem. Jak do tej pory to udało mi się napisać coś takiego:

    class Worker
    {
        public static string getSourceCode(string url)
        {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        StreamReader sr = new StreamReader(resp.GetResponseStream());
        string sourceCode = sr.ReadToEnd();
        sr.Close();
        resp.Close();
        return sourceCode;

 
 public void button2_Click(object sender, EventArgs e)
        {


            StreamReader tx = new StreamReader("test.txt");
            string line = textBox3.Text;
            var counter = 0;
         
            while ((line = tx.ReadLine())!=null)
            {


             


            string url = (line);   //tutaj pobieram url filmiku
            string sourceCode = Worker.getSourceCode(url);

            //tutaj scrapuje tytul

            string sourceCode0 = sourceCode;
            var TytP = sourceCode0.IndexOf("title\" content=\"") + 16;
            var TytK = sourceCode0.IndexOf("\"", TytP);
            var Tyt = sourceCode0.Substring(TytP, TytK - TytP);
            


            //tutaj scrapuje wyświetlenia

            string sourceCode1 = sourceCode;
            int WyswP = sourceCode1.IndexOf("view_count") + 13;
            int WyswK = sourceCode1.IndexOf("\"", WyswP);
            var Wysw = sourceCode1.Substring(WyswP, WyswK - WyswP);
            


            //tutaj scrapuje łapki w górę

            string sourceCode2 = sourceCode;
            int startIndex = sourceCode2.IndexOf("watch-view-count");
            sourceCode2 = sourceCode2.Substring(startIndex, sourceCode2.Length - startIndex);
            int LapkiGoraP = sourceCode2.IndexOf("<span class=\"yt-uix-button-content\">") + 36;
            int LapkiGoraK = sourceCode2.IndexOf("<", LapkiGoraP);
            var LapkiGora = sourceCode2.Substring(LapkiGoraP, LapkiGoraK - LapkiGoraP);
            

            //tutaj scrapuje łapki w dół

            string sourceCode3 = sourceCode;
            int startIndex2 = sourceCode3.IndexOf("like-button-renderer-dislike-button like-button-renderer-dislike-button-unclicked") + 81;
            sourceCode3 = sourceCode3.Substring(startIndex2, sourceCode3.Length - startIndex2);
            int LapkiDolP = sourceCode3.IndexOf("<span class=\"yt-uix-button-content\">") + 36;
            int LapkiDolK = sourceCode3.IndexOf("<", LapkiDolP);
            var LapkiDol = sourceCode3.Substring(LapkiDolP, LapkiDolK - LapkiDolP);



            //tutaj scrapuje date dodaniwa

            var sourceCode5 = sourceCode;
            var DataP = sourceCode5.IndexOf("watch-time-text\">") + 15;
            var DataS = sourceCode5.IndexOf(" ", DataP);
            var DataK = sourceCode5.IndexOf("<", DataS);
            var Data = sourceCode5.Substring(DataS, DataK - DataS);

            dataGridView1.Rows.Add(Tyt, Wysw, LapkiGora, LapkiDol, Data);

            counter++;

    }
 
            
            string counterS = Convert.ToString(counter);
            label1.Text = counterS;



        }
 

Moja aplikacja działa tak, że otwiera plik z adresami url filmiku i pobiera źródło strony pojedyńczo każdej strony z filmem i wyciąga wartości tytułu, wyświetleń itd. i wrzuca je do tabelki. Jednakże nie wiem jak zrobić, by móc to jakoś porównać. Domyślam się, że musiałbym zapisać wartości wyświetleń, ocen itd filmiku za pierwszym razem kiedy go dodam i z każdym odświeżeniem statystyk w programie porównać je z pierwotnymi i wypisać różnicę. Wydaje mi się, że to trochę wykracza poza moje aktualne umiejętności i nie wiem jak do tego podejść. Ma ktoś jakieś pomysły?

Dodatkowo, moja metoda jest dość oporna. Aplikacja, której obrazek jest wyżej ściąga statystyki kilku filmów na sekundę. U mnie jest to znacznie wolniej.

Np. mając jakieś 15 filmików pobiera mi się to 25 sekund. Czas się zmniejsza do 10 sekund, kiedy wywalę ten kod:

//tutaj scrapuje date dodaniwa

        var sourceCode5 = sourceCode;
        var DataP = sourceCode5.IndexOf("watch-time-text\">") + 15;
        var DataS = sourceCode5.IndexOf(" ", DataP);
        var DataK = sourceCode5.IndexOf("<", DataS);
        var Data = sourceCode5.Substring(DataS, DataK - DataS);

        dataGridView1.Rows.Add(Tyt, Wysw, LapkiGora, LapkiDol, Data);

Nie wiem dlaczego aż tak bardzo mi spowalnia działanie programu :/

0

Lekka pomyłka.
Inny kod mi spowalniał działanie programu. Nie jest on wyżej opisany, dlatego wkleje go tutaj:

            var sourceCode6 = sourceCode;
            var StatusP = sourceCode6.IndexOf("<title>") + 7;
            var StatusK = sourceCode6.IndexOf("<", StatusP);
            var Status = sourceCode6.Substring(StatusP, StatusK - StatusP);
            if (Status != "Youtube")
            {
                Status = "on";

            }

  

1 użytkowników online, w tym zalogowanych: 0, gości: 1