[C#] YouTube video's zoeken met Regex

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • PrePay
  • Registratie: Januari 2009
  • Laatst online: 07-09 00:34
Ik ben bezig met een stukje code die opzoek gaat naar YouTube video's.

De code zit er op dit moment zo uit:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static void Search(string searchstring)
        {
            string youtubestring = searchstring.Replace(' ', '+');
            youtubestring = "http://www.youtube.com/results?search_type=videos&search_query=" + youtubestring + "&search_sort=video_view_count";

            WebClient webclient = new WebClient();
            string myString = webclient.DownloadString(youtubestring);

            //Console.WriteLine(myString);

            string regexstring = "<a id=\"video-long-title-<vidid>\" href=\"<vidurl>\" class=\"yt-uix-hovercard-target\" title=\"<vidtitle>\" rel=\"nofollow\">(.*?)</a>";
            MatchCollection matches = Regex.Matches(myString, regexstring, RegexOptions.IgnoreCase);
            if (matches.Count > 0)
            {
                foreach (Match m in matches)
                {
                    string videoid = m.Groups["vidid"].Value;
                    string title = m.Groups["vidtitle"].Value;

                    Console.WriteLine(title + " || " + videoid);
                }
            }
            else
            {
                Console.WriteLine("Empty...");
            }
}


Ik heb geen errors maar ik krijg telkens Empty. ik geloof dat er iets mis is met mijn regex string. alleen ik weet niet wat. En de meeste uitleg op google snap ik niet.

kan iemand mij opweg helpen?

Acties:
  • 0 Henk 'm!

  • asfaloth_arwen
  • Registratie: Februari 2005
  • Laatst online: 21:55
Test kleinere delen van je regex. Deel deze op in delen, en test deze los. Gebruik eventueel een regextester (bijv. http://www.montfoort-it.nl/Diensten/Tools/RegexTester.aspx).

Ik vermoed ook dat het aan je regex ligt. :)

Specs


Acties:
  • 0 Henk 'm!

  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

Bij het gebruik van regex groups, zal er ook moeten worden aangegeven wat er precies moet matchen. In het geval van <vidid> is dit bijvoorbeeld (?<vidid>[a-zA-Z0-9]+). Daarnaast wordt er bij een regex altijd een @ gebruikt om aan te geven dat het daadwerkelijk een regex betreft:
C#:
1
string regexStr = @"abc";


offtopic:
Ook kan er beter gebruik worden gemaakt van de YouTube API (zie: http://code.google.com/ap...api_query_parameters.html). Het voordeel hiervan is dat je, net zoals dat nu gebeurd, gebruik kan worden gemaakt van het Document Object Model (XPath ed.). Daarnaast scheelt het aardig wat bandbreedte.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Feanathiel schreef op dinsdag 23 februari 2010 @ 20:04:
Bij het gebruik van regex groups, zal er ook moeten worden aangegeven wat er precies moet matchen. In het geval van <vidid> is dit bijvoorbeeld (?<vidid>[a-zA-Z0-9]+). Daarnaast wordt er bij een regex altijd een @ gebruikt om aan te geven dat het daadwerkelijk een regex betreft:
C#:
1
string regexStr = @"abc";
Dat is niet voorbehouden aan reguliere expressies: het apenstaartje is een aanduider voor een verbatim string, een string waarbinnen je niet hoeft te escapen. Handig voor hardcoded bestandspaden, en regexp's.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 08:05

Haan

dotnetter

Maar is het niet mogelijk om de YouTube API's te gebruiken in plaats van te screen-scrapen?
Ik zie bijvoorbeeld de Data API waar je best een hoop mee kan.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
En anders kan je ook nog, 't is maar een suggestie, een HTML-parser gebruiken? Overigens zou ik (vidid) in je regexp verwachten, en niet <vidid>, maar als dat klopt, dan moet je je eerste < (van de html-tag) escapen.

* ValHallASW wijst voor de zekerheid nog even op zijn sig

Acties:
  • 0 Henk 'm!

  • Tiemez
  • Registratie: December 2003
  • Laatst online: 24-10-2022
Haan schreef op dinsdag 23 februari 2010 @ 21:28:
Maar is het niet mogelijk om de YouTube API's te gebruiken in plaats van te screen-scrapen?
Ik zie bijvoorbeeld de Data API waar je best een hoop mee kan.
Mwa, bij favorieten krijg je b.v. maar 25 resultaten

ah params voor andere feeds gelden ook voor favorieten :+ .

[ Voor 7% gewijzigd door Tiemez op 24-02-2010 12:16 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Sowieso moet je die hyphens gaan escapen in je regex.

C#:
1
string regexstring = "<a id=\"video\-long\-title\-(<?vidid>[0-9]+)\" href=\"(<?vidurl>[^\"]+)\" class=\"yt\-uix\-hovercard\-target\" title=\"(<?vidtitle>[^\"]+)\" rel=\"nofollow\">(.*?)</a>";

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Waarom datamine je de html output als je ook gewoon de google data api kunt gebruiken?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 13-07 01:53

Korben

() => {};

Verwijderd schreef op woensdag 24 februari 2010 @ 12:53:
Sowieso moet je die hyphens gaan escapen in je regex.

C#:
1
string regexstring = "<a id=\"video\-long\-title\-(<?vidid>[0-9]+)\" href=\"(<?vidurl>[^\"]+)\" class=\"yt\-uix\-hovercard\-target\" title=\"(<?vidtitle>[^\"]+)\" rel=\"nofollow\">(.*?)</a>";
Nee, dat hoeft nou juist niet. Wat ik wel zou doen is het vraagteken bij de groepen tussen ( en < in zetten, in plaats van erna:

code:
1
<a id="video-long-title-(?<vidid>[0-9]+)" href="(?<vidurl>[^"]+?)" class="yt-uix-hovercard-target" title="(?<vidtitle>[^"]+?)" rel="nofollow">(.*?)</a>

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?

Pagina: 1