예제 #1
0
        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;
        }
예제 #2
0
파일: Login.cs 프로젝트: mc22ft/WebScraper
        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;
        }
예제 #3
0
 // Start
 public ActionResult Index()
 {
     InfoModel infoModel = new InfoModel();
     return View(infoModel);
 }
예제 #4
0
        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);
        }
예제 #5
0
        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;
        }
예제 #6
0
        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;
        }
예제 #7
0
파일: Cinema.cs 프로젝트: mc22ft/WebScraper
        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;
        }
예제 #8
0
파일: Cinema.cs 프로젝트: mc22ft/WebScraper
        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;
        }