Hallöchen,
ich stehe gerade mal wieder auffem Schlauch....
Habe folgendes Konstrukt:
Wie im Code markiert möchte ich quasi bei na abfrage was prüfen und wenn die true ergibt möchte
ich direkt weitermachen mit dem nächsten eintrag in der ersten foreach..
ich weiß das ich mit
den aktuellen durchlauf der nächstgelegenen schleife abbreche und der nächste turn anfängt aber wie komme ich
zu der obersten foreach ?
Thema ist gelöst hier aber noch Code wegen Verbesserungen:
Spoiler anzeigen
ich stehe gerade mal wieder auffem Schlauch....
Habe folgendes Konstrukt:
Wie im Code markiert möchte ich quasi bei na abfrage was prüfen und wenn die true ergibt möchte
ich direkt weitermachen mit dem nächsten eintrag in der ersten foreach..
ich weiß das ich mit
den aktuellen durchlauf der nächstgelegenen schleife abbreche und der nächste turn anfängt aber wie komme ich
zu der obersten foreach ?
Thema ist gelöst hier aber noch Code wegen Verbesserungen:
C#-Quellcode
- object[] codeString = { "JSON.stringify(window.initials)" };
- foreach (string username in lb_users.Items)
- {
- int curPos = lb_users.Items.IndexOf(username) + 1;
- lbl_currentuser.Text = string.Format("Aktuell: {0} | {1} / {2} ", username, curPos, lb_users.Items.Count);
- int tmpN = 1;
- int vids = 0;
- int sites = 0;
- string URL = string.Format("https://BEISPIEL.DE/users/{0}/videos", username);
- webBrowser1.Navigate(URL); /// VON HIER BIS UNTEN ist natürlich unnötig und kann ich mit
- // webrequests natürlich viel besser machen was auch noch kommt.
- //Das ganze Webbrowser dingen ändert sich halt noch in webrequests.
- while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
- {
- Application.DoEvents(); // Darüber brauchen wir nicht reden wie gesagt das ändert sich noch in WebRequests.
- }
- if (webBrowser1.DocumentText.Contains("This profile is visible to friends only"))
- { //Hier ist klar... wenn das profil nur für freunde sichtbar ist kann ich nichts sehen also nächster user:
- lb_vidlist.Items.Add(string.Format("Profile: {0} is private", username));
- continue;
- }
- if (!webBrowser1.Url.ToString().Contains("videos"))
- { //Hier wird geprüft ob die URL noch den string "videos" enthält wenn nicht wurde weitergeleitet und man
- //kann die videos nicht einsehen also auch nicht verwertbar
- lb_vidlist.Items.Add(string.Format("Profile: {0} videos not there ^.^ ", username));
- continue;
- }
- var json = webBrowser1.Document.InvokeScript("eval", codeString); //hiermit bekomme ich den JSON-String.
- var obj = JsonConvert.DeserializeObject<uservideos.RootObject>((string)json); //sollte klar sein
- sites = obj.maxVideoPages; //Viele seiten an videos hat der user.
- //// Wenn user schon in datenbank dann weiter sonst eintragen
- m_dbConnection = new SQLiteConnection("Data Source=db.db;Version=3;");
- m_dbConnection.Open();
- SQLiteCommand cmd = new SQLiteCommand(m_dbConnection);
- cmd.CommandText = string.Format("SELECT count(*) FROM user WHERE profile_id={0}", obj.profileID);
- int count = Convert.ToInt32(cmd.ExecuteScalar());
- if (count == 0)
- {
- cmd.CommandText = string.Format("INSERT INTO user(profile_id,n_vids) VALUES ({0},{1})", obj.profileID, obj.profile._counts.video);
- cmd.ExecuteNonQuery();
- }
- //// Wenn user schon in datenbank dann weiter sonst eintragen ENDE
- SQLiteCommand cmdvid = new SQLiteCommand(m_dbConnection);
- while (tmpN < sites+1) //so oft durchlaufen wie seiten mit videos da sind.
- {
- bool skip = false;
- lbl_currentVidSite.Text = string.Format("{0} / {1}", tmpN, sites);
- //MessageBox.Show(tmpN.ToString());
- string vURL = string.Format("https://BEISPIEL.DE/users/{0}/videos/{1}", username, tmpN);
- webBrowser1.Navigate(vURL); //immer noch wird noch umgebaut <3
- while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
- {
- Application.DoEvents(); //brauch man nicht drüber reden...
- }
- var vjson = webBrowser1.Document.InvokeScript("eval", codeString); //hier wieder das gleiche... bekomme damit den JSON-String
- var vobj = JsonConvert.DeserializeObject<uservideos.RootObject>((string)vjson);
- foreach (uservideos.UserVideoCollection vid in vobj.userVideoCollection)
- {
- cmdvid.CommandText = string.Format("SELECT count(*) FROM vids WHERE vid_id={0}", vid.id);
- //Wenn das video schon vorhanden ist dann SKIP (also das PRoblem worum es im Thread geht.
- int vcount = Convert.ToInt32(cmdvid.ExecuteScalar());
- if (vcount == 0)
- {
- //ansonsten in die Datenbank aufnehmen
- cmdvid.CommandText = string.Format("INSERT INTO vids(vid_id,profile_id,vid_name) VALUES ({0},{1}, @p1)", vid.id, obj.profileID);
- cmdvid.Parameters.Add(new SQLiteParameter("@p1", vid.title));
- cmdvid.ExecuteNonQuery();
- string tName = String.Format("Username: {0} / Title: {1}", username, vid.title);
- lb_vidlist.Items.Add(tName);
- //und dann ein datei erstellen für jdownloader somit wird das dann runtergeladen.
- StreamWriter writer = new StreamWriter(vid.id + ".crawljob", false);
- writer.WriteLine("#" + vid.id);
- writer.WriteLine("text=" + vid.pageURL);
- writer.WriteLine("enabled=true");
- writer.WriteLine("autoStart=TRUE");
- writer.WriteLine("extractAfterDownload=TRUE");
- writer.WriteLine("autoConfirm=TRUE");
- writer.Close();
- writer.Dispose();
- string pathto = @"F:\Tools\JDownloader\folderwatch";
- string filename = vid.id + ".crawljob";
- File.Move(filename, Path.Combine(pathto, filename));
- vids += 1;
- } else
- { //Hier der skip
- skip = true;
- break;
- }
- }
- tmpN += 1;
- if (skip == true) {
- lb_vidlist.Items.Add(string.Format("SKIPPING USER: {0}", username));
- break; }
- }
- m_dbConnection.Close();
- //MessageBox.Show(vids.ToString());
- }
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xChRoNiKx“ ()