private static List <PolaczenieLotnicze> Szukaj2(DaneWyszukiwania dane) { List <List <PolaczenieLotnicze> > pp = new List <List <PolaczenieLotnicze> >(); int max = -1; int ix = -1; for (int i = 0; i < 5; i++) { var a = SzukajNatalia(dane.Klonuj()); pp.Add(a); } for (int i = 0; i < pp.Count; i++) { if (pp[i].Count > max) { max = pp[i].Count; ix = i; } } if (ix != -1) { return(pp[ix]); } return(null); }
private static List <PolaczenieLotnicze> SzukajNatalia(DaneWyszukiwania dane) { var HAPparser = new WebsiteDataService(); List <PolaczenieLotnicze> pol = new List <PolaczenieLotnicze>(); List <Flight> lista; try { lista = HAPparser.Kayak_go(dane); } catch (Exception) { return(pol); } var en = lista.GetEnumerator(); while (en.MoveNext()) { try { PolaczenieLotnicze pp = Konwerter.KonwertujFlight(en.Current, dane); pp.Zrodlo = Lotniska.NazwaLotniska(pp.Zrodlo); pp.Cel = Lotniska.NazwaLotniska(pp.Cel); pol.Add(pp); } catch { } } return(pol); }
public static PolaczenieLotnicze KonwertujFlight(Flight flight, DaneWyszukiwania data) { PolaczenieLotnicze p = new PolaczenieLotnicze(); var time = Konwerter.KonwertujStringGodzMinNaTimeSpan(flight.Departure_time); p.Cel = flight.Arrival_city; p.Cena = Konwerter.KonwertujCeneNaDouble(flight.Cena); p.Czas = Konwerter.KonwertujStringCzasLotuNaTimeSpan(flight.Czas); p.DataWylotu = new DateTime(data.Data.Year, data.Data.Month, data.Data.Day, time.Hours, time.Minutes, time.Seconds); p.Link = flight.Link; p.Przewoznik = flight.Carrier; p.Zrodlo = flight.Departure_city; return(p); }
public DaneWyszukiwania Klonuj() { DaneWyszukiwania dw = new DaneWyszukiwania(); dw.Zrodlo = string.Copy(Zrodlo); dw.Cel = string.Copy(Cel); dw.Data = Data; dw.PrzewTak = new string[PrzewTak.Length]; for (int i = 0; i < PrzewTak.Length; i++) { dw.PrzewTak[i] = string.Copy(PrzewTak[i]); } dw.PrzewNie = new string[PrzewNie.Length]; for (int i = 0; i < PrzewNie.Length; i++) { dw.PrzewNie[i] = string.Copy(PrzewNie[i]); } dw.Osoby = Osoby.Klonuj(); dw.Bezposrednie = Bezposrednie; return(dw); }
public static string Bulid(DaneWyszukiwania data) { var html = @"https://www.kayak.pl/flights/" + data.Zrodlo + "-" + data.Cel + "/" + data.Data.Year + "-"; if (data.Data.Month < 10) { html += "0"; } html += data.Data.Month + "-"; if (data.Data.Day < 10) { html += "0"; } html += data.Data.Day + "/"; //var html = @"https://www.kayak.pl/flights/WRO-STN/2018-12-13/1adults/children-17-17?sort=price_a&fs=airlines=-AF;stops=0"; if (data.Osoby.Dorosli > 0) { html += data.Osoby.Dorosli + "adults"; } if (data.Osoby.Mlodziez > 0 || data.Osoby.Niemowleta > 0 || data.Osoby.Dzieci > 0) { html += "/children"; if (data.Osoby.Niemowleta > 0) { for (int i = 0; i < data.Osoby.Niemowleta; i++) { html += "-1S"; } } if (data.Osoby.Dzieci > 0) { for (int i = 0; i < data.Osoby.Dzieci; i++) { html += "-11"; } } if (data.Osoby.Mlodziez > 0) { for (int i = 0; i < data.Osoby.Mlodziez; i++) { html += "-17"; } } } html += "?sort=price_a";//sortowanie rosnaco po cenie bool is_special_features_added = false; var shortcuts = Konwerter.KonwertujPrzewoznikowDoSkrotow(data.PrzewNie); for (int i = 0; i < shortcuts.Count; i++) { if (is_special_features_added == false) { html += "&fs=airlines=-"; is_special_features_added = true; } if (i > 0) { html += ","; } html += shortcuts[i]; } if (data.Bezposrednie) { if (is_special_features_added) { html += ";"; } else { html += "&fs="; is_special_features_added = true; } html += "stops=0"; } return(html); }
private static List <PolaczenieLotnicze> SzukajPiotr(DaneWyszukiwania dane) { Process p; lock (sl) { if (kolejka.Count > 0) { p = kolejka.Dequeue(); } else { p = UtworzProces(); } } try { dane.Zrodlo = char.ToUpper(dane.Zrodlo[0]) + dane.Zrodlo.Substring(1); dane.Cel = char.ToUpper(dane.Cel[0]) + dane.Cel.Substring(1); } catch { } p.StandardInput.WriteLine(dane.Zrodlo); p.StandardInput.WriteLine(dane.Cel); p.StandardInput.WriteLine(miesiace[dane.Data.Month]); p.StandardInput.WriteLine(dane.Data.Year); p.StandardInput.WriteLine(dane.Data.Day); p.StandardInput.WriteLine(dane.Osoby.Dorosli); p.StandardInput.WriteLine(dane.Osoby.Mlodziez); p.StandardInput.WriteLine(dane.Osoby.Dzieci); p.StandardInput.WriteLine(dane.Osoby.Niemowleta); List <PolaczenieLotnicze> pol = new List <PolaczenieLotnicze>(); int ilosc = int.Parse(p.StandardOutput.ReadLine()); for (int i = 0; i < ilosc; i++) { string[] czas; PolaczenieLotnicze pp = new PolaczenieLotnicze(); pp.Przewoznik = p.StandardOutput.ReadLine(); pp.Cena = double.Parse(p.StandardOutput.ReadLine()); pp.Zrodlo = Lotniska.NazwaLotniska(p.StandardOutput.ReadLine()); pp.Cel = Lotniska.NazwaLotniska(p.StandardOutput.ReadLine()); pp.DataWylotu = dane.Data.Add(TimeSpan.Parse(p.StandardOutput.ReadLine())); pp.DataPrzylotu = dane.Data.Add(TimeSpan.Parse(p.StandardOutput.ReadLine())); czas = p.StandardOutput.ReadLine().Split(' '); pp.Link = p.StandardOutput.ReadLine(); p.StandardOutput.ReadLine(); //kreski int poz; int godz = 0, min = 0; for (int j = 0; j < czas.Length; j++) { poz = czas[j].IndexOf('h'); if (poz > 0) { godz = pobierzLiczbe(czas[j], poz); } else { poz = czas[j].IndexOf("min"); if (poz > 0) { min = pobierzLiczbe(czas[j], poz); } } } pp.Czas = new TimeSpan(godz, min, 0); if (pp.Zrodlo != "" && pp.Cel != "") { pol.Add(pp); } } lock (sl) { kolejka.Enqueue(p); } return(pol); }
public static WyszukanePolaczenia WyszukajPolaczenia(DaneWyszukiwania dane) { if (dane == null) { return(null); } if (!Lotniska.CzyIstnieje(dane.Zrodlo) || !Lotniska.CzyIstnieje(dane.Cel)) { return(null); } if (dane.Zrodlo == null || dane.Cel == null || dane.Data <= DateTime.Now || dane.PrzewTak == null || dane.PrzewNie == null || dane.Osoby == null) { return(null); } if (dane.PrzewTak.Length == 0) { return(null); } if (dane.Osoby.Dorosli <= 0 || dane.Osoby.Mlodziez < 0 || dane.Osoby.Dzieci < 0 || dane.Osoby.Niemowleta < 0) { return(null); } int niepelnoletni = dane.Osoby.Dzieci + dane.Osoby.Mlodziez + dane.Osoby.Niemowleta; if (niepelnoletni + dane.Osoby.Dorosli > 9) { return(null); } if (dane.Osoby.Dorosli < niepelnoletni) { return(null); } List <PolaczenieLotnicze> pol = new List <PolaczenieLotnicze>(); var Piotr = Task.Run(() => SzukajPiotr(dane.Klonuj())); var Natalia = Task.Run(() => Szukaj2(dane.Klonuj())); Task.WaitAll(Piotr, Natalia); pol.AddRange(Piotr.Result); if (Natalia.Result != null) { pol.AddRange(Natalia.Result); } if (dane.PrzewTak.Contains("inni")) { dane.PrzewNie = (from d in dane.PrzewNie select d.ToLower()).ToArray(); pol = pol.Where(p => !dane.PrzewNie.Contains(p.Przewoznik.ToLower())).ToList(); } else { dane.PrzewTak = (from d in dane.PrzewTak select d.ToLower()).ToArray(); pol = pol.Where(p => dane.PrzewTak.Contains(p.Przewoznik.ToLower())).ToList(); } WyszukanePolaczenia wysz = new WyszukanePolaczenia(); wysz.Polaczenia = pol.OrderBy(l => l.DataWylotu).ToArray(); wysz.Zasoby = Wydajnosc.PobierzZasoby(); return(wysz); }
public List <Flight> Kayak_go(DaneWyszukiwania data) { //try { var html = KayakUrlBuilder.Bulid(data); Console.WriteLine(html); HtmlWeb web = new HtmlWeb(); web.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"; var doc = web.Load(html); var nodes_carriers = doc.DocumentNode.SelectNodes("//*[@class='section times']//*[@class='bottom']"); var task_carriers = Task.Run(() => get_list_of_strings_from_HtmlNodeCollection(nodes_carriers)); var nodes_departure_times = doc.DocumentNode.SelectNodes("//*[@class='depart-time base-time']"); var task_departure_times = Task.Run(() => get_list_of_strings_from_HtmlNodeCollection(nodes_departure_times)); var nodes_departure_cities = doc.DocumentNode.SelectNodes("//*[@class='section duration']//*[@class='bottom']/span[1]"); var task_departure_cities = Task.Run(() => get_list_of_strings_from_HtmlNodeCollection(nodes_departure_cities)); var nodes_stops = doc.DocumentNode.SelectNodes("//*[@class='section stops']/div[1]"); var task_stops = Task.Run(() => get_list_of_strings_from_HtmlNodeCollection(nodes_stops)); var nodes_arrival_times = doc.DocumentNode.SelectNodes("//*[@class='arrival-time base-time']"); var task_arrival_times = Task.Run(() => get_list_of_strings_from_HtmlNodeCollection(nodes_arrival_times)); var nodes_arrival_cities = doc.DocumentNode.SelectNodes("//*[@class='section duration']//*[@class='bottom']/span[3]"); var task_arrival_cities = Task.Run(() => get_list_of_strings_from_HtmlNodeCollection(nodes_arrival_cities)); var nodes_flight_times = doc.DocumentNode.SelectNodes("//*[@class='section duration']//*[@class='top']"); var task_flight_times = Task.Run(() => get_list_of_strings_from_HtmlNodeCollection(nodes_flight_times)); var nodes_prices = doc.DocumentNode.SelectNodes("//*[@class='multibook-dropdown']//*[@class='price option-text']"); var task_prices = Task.Run(() => get_list_of_strings_from_HtmlNodeCollection(nodes_prices)); var nodes_links = doc.DocumentNode.SelectNodes("//*[@class='col col-best']/div/div/a"); var task_links = Task.Run(() => get_list_of_strings_from_HtmlNodeCollection_kayak_url(nodes_links)); var task_array = new Task <List <string> >[9] { task_carriers, task_departure_times, task_departure_cities, task_stops, task_arrival_times, task_arrival_cities, task_flight_times, task_prices, task_links }; Task.WaitAll(task_array); var carriers = task_carriers.Result; var departure_times = task_departure_times.Result; var departure_cities = task_departure_cities.Result; var stops = task_stops.Result; var arrival_times = task_arrival_times.Result; var arrival_cities = task_arrival_cities.Result; var flight_times = task_flight_times.Result; var prices = task_prices.Result; var links = task_links.Result; List <Flight> lst = new List <Flight>(); List <PolaczenieLotnicze> polaczenia = new List <PolaczenieLotnicze>(); for (int i = 0; i < departure_times.Count; i++) { var flight = new Flight(); flight.Carrier = carriers[i]; flight.Departure_time = departure_times[i]; flight.Departure_city = departure_cities[i]; flight.Stops = stops[i]; flight.Arrival_time = arrival_times[i]; flight.Arrival_city = arrival_cities[i]; flight.Czas = flight_times[i]; flight.Cena = prices[i]; flight.Link = links[i]; lst.Add(flight); } return(lst); }/* * catch (Exception e) * { * Console.WriteLine("ERROR!"); * Console.WriteLine(e.Message); * Console.WriteLine("END OF ERROR!"); * return new List<Flight>(); * }*/ }