[c#] Wyciąganie danych z źródła strony a przekazanie do zewnętrznej aplikacji

0

Witam.
Mam taki problem.
Mam pare stron internetowych gdzie pojawiaja sie lista nowych utworów muzycznych jakie zostały wydane w danym miesiącu.
Chciałbym za pomocą jednego programu móc otrzymywać listę dostępnych produkcji. No i pojawia sie problem. Przeszukałem msdn czytając o stringach i niestety nie doszukałem sie funkcji separowania kawałków tekstu. Tak wygląda kod:
<a href='costam' target='_blank' class='dain_pavad' title='Digital Emotions - The Flash Area' onClick=this.style.color='#a7a7a7'>Digital Emotions - The Flash Area </a> <span style='color:#819643; font:normal 7pt trebuchet MS;'>(Trance)</span>

Z tego chciałbym wyciągnąć: Digital Emotions - The Flash Area
W php można dokladnie wskazać, że tworzymy substringa pomiędzy np. #a7a7a7'> a </a> i jest po kłopocie. W c# nie zauważyłem takiej opcji. Jest niby split czy substring. Jednak ani jeden ani drugi nie ma (?) takiej opcji...

Jakieś pomysły?

1

Można to zrobić regexami - i to jest najlepsze rozwiązanie, w PHP, C#, Perlu czy czymkolwiek. Niestety chwilowo nie mam czasu :( Więc masz takie "tymczasowe" rozwiązanie - tzn. to o co pytałeś

            string s = @"<a href='costam' target='_blank' class='dain_pavad'  title='Digital Emotions - The Flash
Area' onClick=this.style.color='#a7a7a7'>Digital Emotions - The Flash Area </a> <span style='color:#819643; font:normal 7pt trebuchet MS;'>(Trance)</span> ";
            string seeked = "='#a7a7a7'>";
            int start = s.IndexOf("='#a7a7a7'>") + seeked.Length;
            int end = s.Substring(start).IndexOf("</a>");
            string result = s.Substring(start, end);

Nie wygląda to ładnie. Jeśli będę pamiętał to napiszę do tego regexa jak wrócę.

0

No, to takie ładniejsze rozwiązanie z użyciem Regexpów (możesz wrzucić całą stronę z wieloma utworami w string data, nie trzeba dzielić na żadne linie samemu).

string data = "<a href='costam' target='_blank' class='dain_pavad'  title='Digital Emotions - The Flash Area' onClick=this.style.color='#a7a7a7'>Digital Emotions - The Flash Area </a> <span style='color:#819643; font:normal 7pt trebuchet MS;'>(Trance)</span>";
string pattern = @"'#a7a7a7'>(?<title>.+?) </a> <span style='color:#819643; font:normal 7pt trebuchet MS;'>\((?<genre>.+?)\)</span>";

var tracks = from Match match in Regex.Matches(data, pattern, RegexOptions.Singleline)
                select new
                {
                    Title = match.Groups["title"].Value,
                    Genre = match.Groups["genre"].Value
                };

foreach (var track in tracks)
{
    Console.WriteLine("Title: {0} ({1})", track.Title, track.Genre);
}
0

Ok mam :) Dziękuje bardzo za pomoc.
Mam jeszcze jedno pytanie. Jak przekazać te dane do zewnętrznej aplikacji?
Czy jest na to jakiś sposób?
Bo mam swój drugi program, który archiwizuje nazwy plików muzycznych jakie mam już na komputerze i sprawdza czy nie dublują sie. Akurat coraz częściej zdarza sie, że wychodzi nowa aranżacja itp itd. I teraz jak wysłać coś do zewnętrznego programu?

Czy tylko da sie poprzez process.argument()?

0

Sposobów na przekazanie danych między programami jest multum. Wszystko zależy od tego, jakiej natury są te programy. Jednym przykładem jest wykorzystanie wykorzystanie process.arguments, innym na przykład może być zapisywanie danych do konkretnego pliku, który jest monitorowany przez drugi program. Można zrobić dllkę i wołać jej funkcje w referencjach, można zrobić wcfa...

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