public void cookieHandeler(InfoModel model) { //hämtar cookie i responset och sparar i session CookieContainer cookieContainer = new CookieContainer(); var request = (HttpWebRequest)HttpWebRequest.Create(model.Url); //url request.CookieContainer = cookieContainer; var response = request.GetResponse(); //cookien var cookie = cookieContainer.GetCookies(request.RequestUri); cookieContainer.Add(cookie); //session Session["cookieContainer"] = cookieContainer; }
public void doLogin(InfoModel infomodel, string bookingTime) { //Hämtar cookien från session var cookieContainer = HttpContext.Current.Session["cookieContainer"] as CookieContainer; //inloggnings uppgifter string Username = "******"; string Password = "******"; //bygger strängen som ska postas mot server string poststring = string.Format("username={0}&password={1}&group1={2}", Username, Password, bookingTime); byte[] postdata = Encoding.UTF8.GetBytes(poststring); //länken som inloggnigen ska göras mot HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(infomodel.linkList[3]); //sätter värden som krävs vid inloggningen webRequest.Method = "POST"; webRequest.ContentType = "application/x-www-form-urlencoded"; webRequest.ContentLength = postdata.Length; webRequest.UserAgent = "mc22ft"; webRequest.Credentials = new NetworkCredential(Username, Password); webRequest.UseDefaultCredentials = true; webRequest.CookieContainer = cookieContainer; Stream writer = webRequest.GetRequestStream(); writer.Write(postdata, 0, postdata.Length); //response HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); StreamReader streamReader = new StreamReader(webResponse.GetResponseStream()); //responseData = svaret som kommer ut från inloggningen String responseData = streamReader.ReadToEnd(); //login svar som string infomodel.responseData = responseData; }
// Start public ActionResult Index() { InfoModel infoModel = new InfoModel(); return View(infoModel); }
public ActionResult Post_Index(InfoModel infoModel) { //Noll ställer session om det är en ny post, ny url anrop if (PrevMovies != null) { PrevMovies = infoModel; } if (ModelState.IsValid) { try { //Hämtar ut lista med vilka dagar som fungerar Calendar calendar = new Calendar(); List<int> dayList = calendar.getDayList(infoModel); infoModel.dayList = dayList; //Hämtar ut lista med filmer som fungerar Cinema cinema = new Cinema(); List<MovieStatus> moviesList = cinema.getCinema(infoModel); infoModel.moviesList = moviesList; //Hanterar och hämtar cookie cookieHandeler(infoModel); PrevMovies = infoModel; return View(infoModel); } catch (Exception) { ModelState.AddModelError(String.Empty, "Du har anget en felaktig url, försök igen..."); } } return View(infoModel); }
public List<string> getTable(MovieStatus movie, InfoModel infoModel) { //Hämta ut tider i restaurangen det finns och välja på //Jag har dag och tid = när bion börjar (2h lång) //Gå in till restaurang länk var restaurangUrl = infoModel.linkList[2]; //Nytt anrop var web = new HtmlWeb(); var restaurangDoc = web.Load(restaurangUrl); //Håller värdet i radio knapp List<string> radioNodeList = new List<string>(); //Hämtar ut dagar det gäller foreach (HtmlNode link in restaurangDoc.DocumentNode.SelectNodes("//input[@type='radio']")) { int counter = 0; foreach (var item in link.Attributes) { //vill åt sista attrebutet 3/3 if (counter == 2) { radioNodeList.Add(item.Value); } counter++; } } //matcha rätt dag det gäller string day = movie.Day; day = day.Replace("å", "a"); day = day.Replace("ä", "a"); day = day.Replace("ö", "o"); //Hämta ut tre första bokstäverna i list där dag finnns string orginalDay = day.Substring(0, 3); orginalDay = orginalDay.ToLower(); //Håller den dagen som fungerar att äta på List<string> dayTimeList = new List<string>(); foreach (var item in radioNodeList) { string matchDay = item.Substring(0, 3); if (orginalDay == matchDay) { dayTimeList.Add(item); } } //Hämta klockan på när filmen börjar string time = movie.Time; int orginalTimeNr = Int32.Parse(time.Substring(0, 2)); //Lägger till "2h" för längden på filmen orginalTimeNr += 2; //Håller dom tiderna som fungerar att äta på List<string> restaurangTimesList = new List<string>(); foreach (var item in dayTimeList) { //lor1618 string timeString = item.Remove(0, 3); int timeNr = Int32.Parse(timeString.Substring(0, 2)); if (orginalTimeNr <= timeNr) { //Dessa tider finns lediga tider restaurangTimesList.Add(item); } } //Hämta länken i form action /dinner/login för posta inloggningen foreach (HtmlNode link in restaurangDoc.DocumentNode.SelectNodes("//form[@action]")) { var newLink = link.Attributes["action"].Value; var newUrl = infoModel.Url + newLink; infoModel.linkList.Add(newUrl); } return restaurangTimesList; }
public List<int> getDayList(InfoModel infoModel) { //Nytt anrop var web = new HtmlWeb(); var document = web.Load(infoModel.Url); //Håller länkarna till localhost:8080 List<string> linksList = new List<string>(); foreach (HtmlNode link in document.DocumentNode.SelectNodes("//li/a")) { var newLink = link.Attributes["href"].Value; //newLink = newLink.Replace("/", ""); var newUrl = infoModel.Url + newLink; linksList.Add(newUrl); } infoModel.linkList = linksList; //Hämta länkar med alla kalender namn //Gå in till kalender länk var calenderUrl = linksList[0]; //Nytt anrop var CalenderDoc = web.Load(calenderUrl); //Hämtar namnen i kalendern List<string> nameList = new List<string>(); foreach (HtmlNode link in CalenderDoc.DocumentNode.SelectNodes("//li/a")) { var newLink = link.Attributes["href"].Value; var newUrl = calenderUrl + "/" + newLink; //Lista med alla länkar på localhost:8080/calendar nameList.Add(newUrl); } //Array som håller listor med value (ok eller inte) List<string>[] nameInfoList = new List<string>[nameList.Count]; int x = 0; foreach (var nameLink in nameList) { //skapar array som håller värdet av om man kan eller inte List<string> okORnotList = new List<string>(); //laddar ny sida var nameInfoDoc = web.Load(nameLink); //lägger till ok eller inte foreach (HtmlNode link in nameInfoDoc.DocumentNode.SelectNodes("//tbody/tr/td")) { okORnotList.Add(link.InnerText); } //Lägger till listan i array nameInfoList[x] = okORnotList; x++; } //Hämta lista med dagar att jämföra på vilka som det fungerar på //Lista med svar List<string> answearList = new List<string>(); for (int y = 0; y < nameInfoList.Length; y++) { var okCounter = 0; //for = kollar om alla är ok for (int i = 0; i < nameInfoList.Length; i++) { //loopar på inner listans "ok" på alla först värde andra värde osv... var lista = nameInfoList[i]; var ok = lista[y]; if (ok.ToLower() == "ok") { okCounter++; } } //sätter ok om alla var lika if (okCounter == nameInfoList.Length) { //Ok på alla dagar //Vilken dag? index? var indexDay = y; answearList.Add("ok"); } else { answearList.Add("--"); } } //Raw List med dagar det gäller List<string> dayList = new List<string>(); //laddar ny sida var dayDoc = web.Load(nameList[0]); //lägger till ok eller inte foreach (HtmlNode link in dayDoc.DocumentNode.SelectNodes("//thead/tr/th")) { dayList.Add(link.InnerText); } int counter = 1; //Vilka dagar är ok? List<int> okDayList = new List<int>(); for (int i = 0; i < dayList.Count; i++) { if (answearList[i] == "ok") { okDayList.Add(counter); //okDayList.Add(dayList[i]); } counter++; } //Lista med ordning var t = answearList.Count; return okDayList; }
private List<string> getInfo(InfoModel infoModel, HtmlDocument cinemaDoc, string xpath) { //Raw List med filmer det gäller List<string> list = new List<string>(); //Hämtar ut filmer det gäller var counter = 0; foreach (HtmlNode link in cinemaDoc.DocumentNode.SelectNodes(xpath)) { if (counter > 0) { list.Add(link.NextSibling.InnerText); } counter++; } infoModel.filmNameList = list; return list; }
public List<MovieStatus> getCinema(InfoModel infoModel) { var web = new HtmlWeb(); //Hämta länkar med alla kalender namn //Gå in till kalender länk var cinemaUrl = infoModel.linkList[1]; //Nytt anrop HtmlDocument cinemaDoc = web.Load(cinemaUrl); //Raw List med filmer det gäller //Hämtar ut filmer det gäller string xpath1 = "//*[@name='movie']/option"; infoModel.filmNameList = getInfo(infoModel, cinemaDoc, xpath1); //Raw List med dagar det gäller //Hämtar ut dagar det gäller string xpath2 = "//*[@id='day']/option"; infoModel.daysList = getInfo(infoModel, cinemaDoc, xpath2); //Håller json anrop och sparar till objekt List<MovieStatus> moviesList = new List<MovieStatus>(); int id = 0; //loopar ut dagarna som gruppen kan for (int i = 0; i < infoModel.dayList.Count; i++) { int day = infoModel.dayList[i]; int dayCount = infoModel.dayList[i]; for (int x = 0; x < infoModel.filmNameList.Count; x++) { int movieNr = x; movieNr++; string uri = String.Format("{0}/cinema/check?day=0{1}&movie=0{2}", infoModel.Url, day, movieNr); //Startar anrop WebRequest webRequest = WebRequest.Create(uri); WebResponse response = webRequest.GetResponse(); StreamReader streamReader = new StreamReader(response.GetResponseStream()); String responseData = streamReader.ReadToEnd(); //json var checkMovie = JsonConvert.DeserializeObject<List<MovieStatus>>(responseData); //Bygger upp objektet foreach (var item in checkMovie) { //sätter film namnet int movNr = Int32.Parse(item.Movie); movNr--; item.Movie = infoModel.filmNameList[movNr]; //Sätter film dagen item.Day = infoModel.daysList[dayCount]; //Sätter id item.Id = id; moviesList.Add(item); id++; } } } return moviesList; }