private async Task <string> GetToken() { string token = String.Empty; ConcurrentDictionary <string, string> headers = new ConcurrentDictionary <string, string>(); headers.TryAdd("Authorization", "Basic bXV2aS5pb3NAaW5qaW4uY29tOmRLOHdqX1ludU4kRSFLNEs="); var result = await _http.Execute(o => { o.Host = new Uri("https://apiprod.muvicinemas.com/user/v1/token"); o.Method = HttpMethod.Post; o.Headers = headers; }); if (result.IsSuccess) { dynamic json = JObject.Parse(result.Response); token = json.accessToken.Value; } else { throw new Exception(); } return(token); }
// Get all cinemas private async Task <ParseResult <List <Parse.Cinema> > > GetCinemasAsync() { var result = await _http.Execute(o => { o.Host = new Uri("https://ksa.voxcinemas.com/cinemas"); o.Method = HttpMethod.Get; }); if (result.IsSuccess) { var document = new HtmlParser().ParseDocument(result.Response); var elements = document.QuerySelectorAll("a").Where(x => x.HasAttribute("href")) .Where(x => x.GetAttribute("href").Contains(@"/showtimes/")); var tasks = elements.Select(i => Task.Run(() => ParseCinema(i))).ToArray(); Task.WaitAll(tasks); List <Parse.Cinema> cinemas = new List <Parse.Cinema>(); foreach (var action in tasks) { cinemas.Add(await action); } return(new ParseResult <List <Parse.Cinema> >(Result.Success) { Data = cinemas }); } return(new ParseResult <List <Parse.Cinema> >(Result.Error)); }
private async Task <ParseResult <List <Movie> > > GetMoviesAsync() { ConcurrentDictionary <string, string> headers = new ConcurrentDictionary <string, string>(); headers.TryAdd("ContentType", "application/x-www-form-urlencoded"); headers.TryAdd("Accept-Encoding", "gzip, deflate, br"); headers.TryAdd("Accept-Language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,uk;q=0.6,pl;q=0.5"); var result = await _http.Execute(o => { o.Host = new Uri("https://apiksa.empirecinemas.com.sa/GetAllCinemasSch"); o.Method = HttpMethod.Post; o.Headers = headers; o.Body = @"{""Latitude"":10,""Longitude"":10,""CinemaType"":""normal"",""LanguageID"":2,""CountryID"":230}"; }); if (result.IsSuccess) { List <Parse.Movie> movies = new List <Parse.Movie>(); dynamic json = JObject.Parse(result.Response); var arr = json.Data; foreach (var c_movie in arr) { string movie_id = c_movie.MovieID; Movie temp_movie = movies.FirstOrDefault(x => x.ExternalId == movie_id); if (temp_movie == null) { Movie movie = new Movie(); movie.Title = c_movie.Title; movie.ExternalId = c_movie.MovieID; Session session = new Session(); session.Format = c_movie.Format; session.Url = $"https://empirecinemas.com.sa/checkout/{c_movie.MovieID}/{c_movie.SchID}/1"; string date = c_movie.ShowDate + " " + c_movie.ShowTime; session.CinemaId = c_movie.CinemaID; session.MovieId = c_movie.MovieID; session.ShowTime = GetParsedDate(date); movie.Sessions.Add(session); movies.Add(movie); } else { Session session = new Session(); session.Format = c_movie.Format; session.Url = $"https://empirecinemas.com.sa/checkout/{c_movie.MovieID}/{c_movie.SchID}/1"; string date = c_movie.ShowDate + " " + c_movie.ShowTime; session.CinemaId = c_movie.CinemaID; session.MovieId = movie_id; session.ShowTime = GetParsedDate(date); movies.First(x => x.ExternalId == movie_id).Sessions.Add(session); } } return(new ParseResult <List <Movie> >(Result.Success) { Data = movies }); } return(new ParseResult <List <Movie> >(Result.Error)); }
private async Task <ParseResult <Data> > GetDataAsync(int days) { ConcurrentDictionary <string, string> headers = new ConcurrentDictionary <string, string>(); headers.TryAdd("ContentType", "application/x-www-form-urlencoded"); headers.TryAdd("Accept-Encoding", "gzip, deflate, br"); headers.TryAdd("Accept-Language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,uk;q=0.6,pl;q=0.5"); ConcurrentDictionary <string, string> parameters = new ConcurrentDictionary <string, string>(); parameters.TryAdd("movieid", ""); parameters.TryAdd("cinemaid", ""); parameters.TryAdd("date", DateTime.Now.AddDays(days).ToString("yyyy-MM-dd")); parameters.TryAdd("experience", ""); var result = await _http.Execute(o => { o.Host = new Uri("https://uae.novocinemas.com/showtimes/GetCinemaShowTimes"); o.Method = HttpMethod.Post; o.Headers = headers; o.Parameters = parameters; }); if (result.IsSuccess) { List <Parse.Movie> movies = new List <Movie>(); List <Parse.Cinema> cinemas = new List <Parse.Cinema>(); dynamic json = JArray.Parse(result.Response); foreach (var item in json) { Parse.Cinema cinema = new Cinema() { ExternalId = item.CinemaId, Name = item.CinemaName }; cinemas.Add(cinema); List <Parse.Movie> c_movies = new List <Movie>(); foreach (var c_movie in item.movieDetails) { Parse.Movie movie = new Movie(); movie.ExternalId = c_movie.VistaMovieId; movie.Title = c_movie.MovieName; movie.Url = @$ "https://uae.novocinemas.com/movie/details/{c_movie.VistaMovieId}"; foreach (var c_languge in c_movie.LanguageList) { List <Parse.Session> sessions = new List <Session>(); foreach (var c_session in c_languge.showtimelist) { Parse.Session session = new Session(); session.Format = c_session.ExperienceName; session.ShowTime = c_session.SessionShowTime; session.CinemaId = cinema.ExternalId.ToString(); session.MovieId = movie.ExternalId.ToString(); sessions.Add(session); } if (sessions.Count != 0) { movie.Sessions.AddRange(sessions); } } if (movie.Sessions.Count != 0) { c_movies.Add(movie); } } movies.AddRange(c_movies); } return(new ParseResult <Parse.Data>(Result.Success) { Data = new Data() { Cinemas = cinemas, Movies = movies } }); } return(new ParseResult <Parse.Data>(Result.Error)); }
public async Task <ParseResult <Parse.Data> > GetMoviesByDateAsync(DateTime date, List <Cinema> cinemas, List <Movie> movies_proto) { List <Movie> movies = new List <Movie>(); movies.AddRange(movies_proto); string param = ""; param = $"{date.Year}-{date.Month}-{date.Day}"; ConcurrentDictionary <string, string> headers = new ConcurrentDictionary <string, string>(); headers.TryAdd("ContentType", "application/json"); headers.TryAdd("Cookie", "cookieLanguageCode=en-US; _gcl_au=1.1.1238722976.1602705939; _fbp=fb.1.1602705939926.1048953155; _gid=GA1.2.445262349.1603531359; moe_uuid=56694985-c80f-499b-b8ee-353d2ba58144; movieDetails=qeoEzVnzBc-6cYMbYWwS4scp_uWZetsLEfEwEONYBHu6Ug3EcLkPOkkIJRxNIl21LoXAHMoiLl-K2GFvWFxLoLetERKNJ9mg2n5nJuGQnCTm4cLcKFW7kZ4wKrzk7QcgU5mbqjSflnb4_PeFk656nOlvLWaS7p8iFkS-zpiG8sRM94UJOeX_RAJBHeSg-2ca0iolX65I08aDzQXISNe834N45rFvnlXKnczOqHQxCJvkiScCXPEMudUt0mZ50_zT4mA6cD08aIHg-Hc-kaOI0Sg3RjPFVqt3tsn14JDZoCeu0PFyc7VLVr79jwvPn6r--qKRLudWoNJO5aJNQv_2smOTfz0_ZUF7RxCpwQ8geT_vx7XKrH_0c9o23bsv5jiokSdBTwrkHbiwYk4ITrwCkmhHtkHeJVYs3sKRoroNevKirCwY585fkH59_SHcrTA8RUc6JMj2ixXsezJeeszlngooxw8GHDdH5o1ASeVsvKFbOcHeWPCNjA5XgQZvyIFKoHDQjZXS5N-Tu0-G_wNFmL4aQBnOdvIbFw0_DfbDHLaFTfeJY9NuTSyhoZJP8mOaebaIZMokCCFINDhBcgerB1CcAhP5SUnKdXkeLbBADZskqh_sU-f8QzGsesP1dOa1tNQmRDwenGOKb3MDof1EkQCYenShYRMmJC7VY1SBqmlM8n0aOMycbc1kcoLME98Z7F4BGJUKMMxa4PB1XU_e3OIEZYobFZP6czI1juhh9yYHWum4Yyd_JVGXqjh622CGWUhIXWAjkwDX1n6n5C-nb5ar5UVbclfatS1YKyuUXAU_zODz2OFT8Wxo5Lto1OFtqEGYkKiIu-m9A7w4l8yQIUpb1tLpOvJnEbXe_1CWiqM6hEaixfrc7jJHQ-FncGApH7i0WNF4iALHGV0aeIwjHiL5jbE5rMrHi1K_suW7TM2xrzVg93DQQBlgvhnd7g5UJ4jTCR4XyWMKKMcPBhw3R-aNQEnlbLyhWznB3ljwjYwOV4EGb8iBSqBw0I2V0uTfk7tPhv8DRZi-GkAZznbyGxcNPw32wxy2hU33iWPTbk09TfVWsyySmAhSvdSZ3240g2jYn36zA11QnAIT-UlJynV5Hi2wQA2bJKof7FPn_EMxrHrD9XTmtbTUJkQ8HpxjAwoeVLSoTKPQ4y2TWLCzR9Ei5wWaWcn3MjZnddtzlBGOiECIDhKg5cvAi5xIRSpTWuDwdV1P3tziBGWKGxWT-nMyNY7oYfcmB1rpuGMnfyVRl6o4ettghllISF1gI5MA19Z-p-Qvp2-Wq-VFW3JX2lovt8CIT7PaD5XH9yjF98wF5oI0EPF53Lc738yxFmYEfw1Kbiphe4_NiXlcBxA2rIj5MI_W0zvmFZchj8C0eES6TXP_fFrixhgjHoboPhh0jSDlwXIV-kd1zBprw6hS4YPF4MlAm57mDdEnjV8a-GNx2JO20V7SeT9Jz852f9ooX6uZGVYXcaF7tpJ-xlK_lQJOV3XVyz_KJZRfILUk-QCoND7wXTraBj3qRM7h7rfdJ3SbyxHW4kpaM6i2DODUh5ZT8_yOKDzi7Ueba1g_6F3Uf97Rk_w4uNL8C58OyDdurk9Q_OweYQuFfmV4aoKNnF5r5Vq_Kc69zTw79tbFWEL0GrFW9QTj8WTr7r6dyup5NhKbmuzd6OL1mdCdxQGASSVesopwH44N0UIx-_UCNAn3zhfAlxD53CiOdBMGW5Clq-CQyaBo9TFZ2UH-CqdlTqDK_2z0XZKxvnSlBp--b9VRWoHoa9fnPMkB2lBmtrQHR1BO9A7Et6IPlpwqbOK2572nGc3FLffigcWEYxLiTv3N0QzKnxka6oldA7f0-Apqe40I5hu9OzFn-8kMwEnWxf1hWkUABpZeHdgdZkIRi5Ahz2mpBnqJwyDCX5pRE2tgjje_ST3iOzn7PbcXQhQzzt6nR0jz-ADG7-JkLXZ68Waud65ZrZ5oBkZDRk-JwMR0kM4LD9ARW-EVXsPJ9S5Y_fcAgUHIrU7AL_M_c5Eplx-OcA-zua4UhO5r5h69qLewm-E7V0KvfmJf77HDDjXxK-fFXsKQnjVzV18WLXLB-A35MgPPwaJ1R4ewcF8SNup8DeAykd6FzgS21uYAO4jMus-qf6rg4_RwUJ80eWBXSAoXHQV-EL5ULP74mXTdCQ5fsaaDv-NVkFreM1J8ci1geDlrqrH8QC0W5X-CJzqE-EzQ5RwkWYIdOx7v_LPhb5hi6bzodBbRzg_vCxKbz2dKDJs2K4vSvJPkXW50W1kUGWW6TXP_fFrixmV7HljSa-BEThFF1iSQwnPyGqH5QvX3kcOKuAqadrSKht423Ge2agI_uwUw9WL3I0zfewFuTT6RMFfaIWOAzRJtHzT-cK8X4e3OKggm-cCfFIA4KTo8DPGm48OQSnQHnDTzQPjeoSV0M-31M8cNvd6He6j6RS4QZmiaD4VShb8zkZu7h-UO-hsgt7Hlw8ufys580_sSRY0fzLEtSnB2As02oU262OM-_1ioC6hC_shFKq4XSUgj-lmi3iJsFVLL4ismpqxRrlaPrBdamlWixdh7sspXVzz_8r2dVcQxP57nmgmfg0kQ7e_lN68fsvocEbFsGrVmFvhBDBZR4C5ieSJZ2Mjx4jek_-c9epWdVKjG-7aYgR7b5Wy3TmnUpnzPLFSRzKMyQzF07yi9BRSlt0JNqJgxZut9aezSGoMxJOXEvmR28hbWK9fOHaqH_YgXWLnWwmPE_oE2w9v24I9mRqdz-Ev2Qrlb2itS5La3cXrApIqHcZdHKdQeXydAX9ZwzaRAcq1I8wLDToCntq1opN2sqkEYwOfK1iAz3kV16I7A-oXjWvBiYX848t7iua4KaYACrIc96WArIxMxW1zflgXJ1AAD0nLzLIZkMPd5lo7K257dGMCKo5TtlzVJNkrHMEXMV2FHgFqsS_UBHv9OLxynpA0ixs1Ixho-D4WpMgOiX2JLt3vyRG3CWNKrjoF5mY7AN_yiVifETdNtFtcWF6SJjku5ZJLHmD-pAW0Yx1gqFgbboUu1T8YhdHu58Km5Ri77GCZnj0wVcVFeePYSCMw=; _gat_UA-117333109-1=1; AccessTokenInfo=u2x96MRfae-glKK-nne0UV_A-GUIp1Pp36QiNk9wKOOkCGuHUNUsNAMdZQBNFno3kZ9VqVTPBMIxMGUOdzfyb1rGxtEq6lS8-iP8KeTvybVFqjc-5HctD_wkIJEF7-7kx8meVjzWxySwVgwkEZmqv5fGeVqv0EsLhQa05blbJJoF2HSdEMiOBwgyeTQ_lR6gOo_4s-N2npeI4xHYtG4p_TFRfLXvVa8llp8mIxBrHwUKfAJH_osh7K6v1RWm7ZvNIo4XwnuyUTmDeaeNmWtotuLjKE3MvCYYycGrak3AnBMuEX1EpR4synaZBqmGFgJK_RYyfuRoiqL-aFm9GVSfmKVGi2kiLBuAwTp0nuDlMoqjG6r53iG9x8D2RIRgv5DsgOgN8SS7KhNrQFoaL-rxlKmtrTSYPzWci8igX0lEBF7RrJV8qYnN1ER6V6KOQkwLQ1MhpROy3Lk3fu12Tz-_0UYHIzp9QNgFpL4y8b1ZsUmVxcyGkAqFg6TOPBi32mvnUdCre-QPTbA_dLwmF0yNETtVxAVZo4aeDOdihITWOZMCj6H5OLSglKMfWj615P9bWMf_Pihog7uRy-sDA5TjxLYhU4ZvH97xyQKEUWk6rnT_A6mH8DnfipmRBGFO1kkKUyrJvJBvADCt4nL567uFBvbGdFadUcq-JzBjzmFIe9CoU_VsEYtBWhAGV0sbajk_k_9Ls190ziS3d9lOSi5YRxAMLCipEKM3yGi2IduB_ERn1d5exZTCRolUrSdD4d3yFNlu1FQS7QtJD75FxN5BYCB03KgMBRUnyNejPU0RiqHx-liJQMQiPrRkDBpyxo-de5MBKoNSgt-nW44dmEWMrPK5h2jNpOwjtfbwxGxFFSp6txscWxaMDbo9mGSJeE6e27tb2WvX5YSNi68fccyo3PZLTF-H8ZixtfoTn4g1nL1JGA55-oXDCjq95ivHCJfGSdXmV99vayz6I_wp5O_JtUWqNz7kdy0Pf_SsPVbZS7bHyZ5WPNbHJLBWDCQRmaq_l8Z5Wq_QSwv4obJ14EiI6gO4QyDgrNISZkkg3fwMSDiTDKMoMVLi0xsXF7xJnGUoaH2Dvehd22ZFaozIpZB94wHIE0elFyUtXCLVqeNo-gyAUcIOdORSk7XqfCElKheoGzI4Op1kfF3rouycJtpjGcztaWblB-nY52VmuwOpsfRatMz60tA06ZSAQK3FzQmbJNPi_LyWagUDokf3pvAxfz1LJgnxe7cn55cPBW8IWOuHoxAPIZ7HePAxFtttra0C2F9_CB6SI11M9QSweb-rSgZwU_xc5wFsEb2CIWj3SgE4gbO3WxnbCJcXTd8RK_7yG9OzGhvLk-uzz7W6g1KXVFjb8mCWoxgGMK97SL_CjmkTQGcgwup24JzVo_IGkxVNJQyUDhfndbHoxLZstyyfKlrGxtEq6lS8JMPOGXaUEQK3yn_wkykYX0yrtmgM99sTXzHcpK1916aI_ev7q5X2KUjdDofJfybNKEVcSE8n-hSP8b652vCeFdkY7P4cXN29; _ga_EJRWLKGJNW=GS1.1.1603541129.5.1.1603542988.47; _ga=GA1.2.87188470.1602703684"); var result = await _http.Execute(o => { o.Host = new Uri("https://www.amccinemas.com/showtime/getallmovies"); o.Method = HttpMethod.Post; o.Headers = headers; o.Body = @"{""url"":""showdate=" + param + @"""}"; }); if (result.IsSuccess) { var config = Configuration.Default; //Create a new context for evaluating webpages with the given config var context = BrowsingContext.New(config); //Just get the DOM representation var document = await context.OpenAsync(req => req.Content(result.Response)); //Select all sessions of films var listofgroups = document.All.Where(m => m.ClassName == "amc-time-list"); foreach (var item in listofgroups) { string cinemaName = item.GetAttribute("data-cinemaname"); string movieName = item.GetAttribute("data-moviename"); var childdoc = await context.OpenAsync(req => req.Content(item.InnerHtml)); var listofsessions = childdoc.QuerySelectorAll("span").Where(m => m.ClassName == "amc-time"); List <Session> sessions = new List <Session>(); foreach (var c_session in listofsessions) { Session session = new Session(); DateTime sessionDate = new DateTime(date.Year, date.Month, date.Day); string time = c_session.InnerHtml; time = time.Remove(0, 1); time = time.Remove(time.Length - 1, 1); time = "10/10/2000 " + time; DateTime parsedTime = DateTime.ParseExact(time, "M/d/yyyy h:mm tt", CultureInfo.InvariantCulture); sessionDate = sessionDate.AddHours(parsedTime.Hour); sessionDate = sessionDate.AddMinutes(parsedTime.Minute); session.ShowTime = sessionDate; session.CinemaId = cinemas.First(x => x.Name == cinemaName).ExternalId; sessions.Add(session); } movies.First(x => x.Title == movieName).Sessions.AddRange(sessions); } return(new ParseResult <Data>(Result.Success) { Data = new Data() { Movies = movies } }); } return(new ParseResult <Parse.Data>(Result.Error)); }