Seitenanzahl erkennen?

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Chriis.

    Seitenanzahl erkennen?

    Ich habe eigentlich gehofft das ich das alleine gebacken bekomme aber ich schaffe es leider nicht.
    Um mein Problem jetzt mal genau zu beschreiben:
    Ich hab ein Programm geschrieben, welches alle Kommentare bzw. die Nutzernamen von denen die diese Kommentare geschrieben haben auflistet. Funktioniert auch Super. Leider nur solange es nicht über 400 Kommentare sind. Warum?

    Die Kommentare werden auf folgender Seite ausgelesen ( Beispiel Link von Gronkh video):

    Quellcode

    1. http://www.youtube.com/all_comments?v=hf7VF_9SndI
    Das gleiche wie :

    Quellcode

    1. http://www.youtube.com/all_comments?v=hf7VF_9SndI[color=#ff0000]&page=1[/color]


    Ich möchte nun erkennen wie viele Seiten an Kommentaren vorhanden sind, bekomms aber nicht hin.

    Ich zeige euch hier mal was ich bereits versucht habe.

    VB.NET-Quellcode

    1. Do Until countPages.ResponseUri.ToString.Contains("oops?ytsession=h")
    2. If Not countPages.ResponseUri.ToString.Contains("oops?ytsession=h") Then
    3. countPages()
    4. pageCount += 1
    5. Else
    6. Exit Do
    7. End If
    8. Loop


    countPages ist eine Funktion ( Vielleicht liegt da mein Problem.. naja. Ich bin mir nicht sicher ob ich das mit der Funktion richtig gemacht habe :S )

    VB.NET-Quellcode

    1. Public Function countPages() As HttpWebResponse
    2. Dim Req = HttpWebRequest.Create(videoURL & "&page=" & pageCount)
    3. countPages = Req.GetResponse '<-------- Hier bekomme ich einen Timeout
    4. Return countPages
    5. End Function




    Quellcode

    1. System.Net.WebException wurde nicht von Benutzercode behandelt.
    2. HResult=-2146233079
    3. Message=Timeout für Vorgang überschritten
    4. Source=System
    5. StackTrace:
    6. bei System.Net.HttpWebRequest.GetResponse()
    7. bei Youtube_ReadOut.Form1.countPages() in C:\Users\Chrissi\documents\visual studio 2010\Projects\Youtube ReadOut\Youtube ReadOut\Form1.vb:Zeile 158.
    8. bei Youtube_ReadOut.Form1.readT() in C:\Users\Chrissi\documents\visual studio 2010\Projects\Youtube ReadOut\Youtube ReadOut\Form1.vb:Zeile 39.
    9. bei Youtube_ReadOut.Form1.BackgroundWorker1_DoWork(Object sender, DoWorkEventArgs e) in C:\Users\Chrissi\documents\visual studio 2010\Projects\Youtube ReadOut\Youtube ReadOut\Form1.vb:Zeile 28.
    10. bei System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
    11. bei System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
    12. InnerException:


    Ich kann auch den ganze Code zeigen aber nur sehr ungern.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Chriis“ ()

    Chriis schrieb:

    Ich kann auch den ganze Code zeigen aber nur sehr ungern.
    Lieber nicht.

    In Youtube steht die Seitenanzahl aller Kommentare, im Quellcode selber. Zumindest hier SUPER BOWL 2013 - BEYONCE & DESTINYS CHILD LIVE PERFORMANCE :

    XML-Quellcode

    1. 'COMMENTS_SIGNIN_URL': "\/create_channel?next=%2Fwatch%3Fv%3DaJZgjDqFyvM\u0026upsell=comment",
    2. 'COMMENTS_THRESHHOLD': -5,
    3. 'COMMENTS_PAGE_SIZE': 10,
    4. 'COMMENTS_COUNT': 541,
    Wenn Du das nicht per Regex auslesen möchtest, so lies halt Seite für Seite bis Du einen StatusCode 404 (?) bekommst.
    Ich hab ja was ich brauche per RegEx rausgefiltert. Aber das sie Seitenanzahl im Quellcode vorhanden ist wusste ich nicht.

    Achja... da lag ja mein Problem.... solange auszulesen bis ich den StatusCode 404 bekomme :) Aber so wie es aussieht brauch ich das ja nicht :)

    Edit: Die Seitenanzahl ist nicht die für all_comments. Daher kann ich damit doch nichts anfangen. Trotzdem danke

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Chriis“ ()

    Chriis schrieb:

    Edit: Die Seitenanzahl ist nicht die für all_comments. Daher kann ich damit doch nichts anfangen. Trotzdem danke
    War auch nur ein Schnellschuss: die Parameter sind wohl sehr abhängig von den Account-Einstellungen. Aber sukzessive die Pages lesen bis Error (welcher genau ausprobieren) ,sollte das eigentlich universell sein.

    Chriis schrieb:

    Aber das sie Seitenanzahl im Quellcode vorhanden ist wusste ich nicht.
    Immer zuerst den Quelltext ansehen, bevor Du ihn be- oder verarbeitest.
    Erkenne Strukturen und bekomme ein Gefühl, wie Information darin verteilt ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Edit by ErfinderDesRades: unnötiges Vollzitat entfernt


    Ich habe mir den Quellcode zwar angesehen aber nicht wirklich genau :S

    Trotzdem hilft mir das nicht wirklich weiter.
    Hat keiner einer Idee?

    @Kangaroo
    Das habe ich ja probiert. Ich bekomme nur diesen Timeout den ich mir nicht erklären kann.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Aber Du kannst ja schlieslich ausrechnen, wie viele Seiten das sind:
    Kommentaranzahl / KommentareProSeite
    Da kommt wahrscheinlich keine ganze Zahl raus, aber du kannst ja Den Teil vor dem Komma nehmen, und wenn die Zahl nicht ganz ist, 1 dazu addieren.

    Chriis schrieb:

    @Kangaroo
    Das habe ich ja probiert. Ich bekomme nur diesen Timeout den ich mir nicht erklären kann.

    Ich auch nicht, folgender Code funktioniert ohne Exception:

    VB.NET-Quellcode

    1. Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim req As New Http
    3. Dim videoUrl As String = "http://www.youtube.com/all_comments?v=hf7VF_9SndI"
    4. 'Dim videoUrl As String = "http://www.youtube.com/all_comments?v=aJZgjDqFyvM"
    5. For page As Integer = 1 To 100
    6. Try
    7. Debug.Print("reading page {0}", page)
    8. Dim result As String = req.GET(String.Format("{0}&page={1}", videoUrl, page))
    9. ' end of comments ?
    10. If req.Response.ResponseUri.AbsoluteUri.Contains("oops") Then Debug.Print("Exiting") : Exit For
    11. Catch ex As Net.WebException
    12. Log.Error(String.Format("Exception at page: {0} -> {1}", page, ex.Message))
    13. Exit For
    14. End Try
    15. Next
    16. End Sub

    Die Klasse http habe ich als Beispiel hier gepostet: [VB.NET] Webrequests Probleme

    Wie im Post unten bemerkt , kannst Du auch noch eine TimeOut Property hinzufügen um die httpWebRequest.Timeout Property zu setzen.

    Edit: vielleicht braucht ja Dein webRequest dadurch so lange, da er sich die Internet Explorer Proxy Eigenschaften holen muss. Setze mal versuchsweise im httpWebRequest .Proxy = Nothing

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kangaroo“ ()

    Kannst Du bitte mal das dämliche Zitieren sein lassen?
    Es ist echt schwer, Deine Frage unter dem Zitat zu finden.
    Drauf klicken (auf den Fehler) und F1 drücken.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Du bekommst Fehler 1+3 weil Du mein Code-Beispiel mit Deiner Klasse verwendest, statt meine aus dem anderen Beitrag.
    Fehler 2 erhälst Du , weil ich in der Exception noch Log.Error verwende: ersetze es durch Debug.print.

    Aber wenn Du Dich am HttpWebRequest versuchst, solltest Du auch soweit sein das selber zu sehen.

    Und mit dem Zitat hat Rod vollkommen recht.