private static void ConductSearch(Dictionary<string, int> notes, SearchParameters searchParameters, string targetDate, ref CookieContainer cookieJar, out string convoId) { targetDate = targetDate.Replace("/", "%2F"); string postString = string.Format("webBindCommandName=tableServiceSearchForm" + "&mode=async&_eventId=SubmitDiningSearch" + "&locations=" + "&cuisines=" + "&searchRestaurantName={0}" + "&searchRestaurantId={1}" + "&searchDate={2}" + "×={3}" + "&allAvailableTimes=06%3A30%20am" + "&partySizes={4}" + "&_onlyShowDiningPlans=on" + "&WDW_SchEvts_Global_QQContDine_Link=Search%20for%20a%20Table" + "&mode=async", searchParameters.restaurantName, searchParameters.restaurantId, targetDate, searchParameters.times, searchParameters.partySize); string result; Console.Write("second request, to get conversation id: "); CookieContainer cookies = cookieJar; cookieJar = getCookiesFromRequest(cookies, searchParameters, searchParameters.rootUrl + searchParameters.siteUrl, postString, out result); convoId = Regex.Match(result, "ConversationId\":\"([^\"]*)\"").Groups[1].Value; Console.WriteLine("{0}", convoId); string nextURL = Regex.Match(result, "NextURL\":\"([^\"]*)\"").Groups[1].Value.Replace("\\/", "/"); string redirectURL = ""; while (redirectURL == "") { System.Threading.Thread.Sleep(1000); Console.WriteLine("searching..."); cookieJar = getCookiesFromRequest(cookieJar, searchParameters, searchParameters.rootUrl + nextURL, postString, out result, "GET", convoId); redirectURL = Regex.Match(result, "RedirectURL\":\"([^\"]*)\"").Groups[1].Value.Replace("\\/", "/"); } Console.WriteLine("getting results page"); cookieJar = getCookiesFromRequest(cookieJar, searchParameters, searchParameters.rootUrl + redirectURL, postString, out result, "GET"); Console.WriteLine(new string('-', 25)); string r = ""; r = getTagContents(result, "SearchFailMessage", "div", "id").Trim(); if (r.Length > 0) Console.WriteLine(r); r = getTagContents(result, "reserveFormLabel", "label", "class").Trim(); if (r.Length > 0) Console.WriteLine("Available Times: {0}", r); r = getTagContents(result, "alternativeTimesSectionMessage", "p", "id").Trim(); if (r.Length > 0) Console.WriteLine(r); Console.WriteLine(new string('-', 25)); if (result.Contains("Sorry, we were unable to find available times.")) { Console.WriteLine("no times found"); } else { LaVie.MusicBox.Beethovens5th(); Console.WriteLine("***** possible success ***** press any key to continue"); Console.ReadKey(); } }
private static CookieContainer getCookiesFromRequest(CookieContainer cookieJar, SearchParameters searchParameters, string url, string postString, out string result, string method = "POST", string conversationid = "") { byte[] postBytes = Encoding.ASCII.GetBytes(postString); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = method; request.Referer = searchParameters.rootUrl + searchParameters.siteUrl; request.Headers.Add("X-Requested-With", "XMLHttpRequest"); request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"; request.CookieContainer = cookieJar; if (conversationid != "") { request.Headers.Add("X-Conversation-Id", conversationid); request.Headers.Add("X-Service-Request", "type=poll, attempt=1"); } if (method == "POST") { request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postBytes.Length; request.Headers.Add("Pragma", "no-cache"); Stream postStream = request.GetRequestStream(); postStream.Write(postBytes, 0, postBytes.Length); postStream.Close(); } try { HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse(); Stream responseStream = webResponse.GetResponseStream(); StreamReader responseStreamReader = new StreamReader(responseStream); result = responseStreamReader.ReadToEnd(); foreach (Cookie item in webResponse.Cookies) { cookieJar.Add(item); } responseStream.Close(); webResponse.Close(); } catch (Exception ex) { Console.WriteLine("Error: {0}\nPress any key to continue", ex.Message); Console.ReadKey(); result = "error"; } return cookieJar; }
static void Main(string[] args) { DateTime startTime = DateTime.Now; Dictionary<string, int> notes = new Dictionary<string, int>(); Console.WriteLine("Initializing..."); LaVie.MusicBox.StartUpSong(); string[] targetDates = { #region December //December //"12/01/2012", // "12/02/2012", // "12/03/2012", // "12/04/2012", // "12/05/2012", // "12/06/2012", // "12/07/2012", // "12/08/2012", // "12/09/2012", // "12/10/2012", // "12/11/2012", // "12/12/2012", // "12/13/2012", // "12/14/2012", // "12/15/2012", // "12/16/2012", // "12/17/2012", // "12/18/2012", // "12/19/2012", // "12/20/2012", // "12/21/2012", // "12/22/2012", // "12/23/2012", // "12/24/2012", // "12/25/2012", // "12/26/2012", // "12/27/2012", // "12/28/2012", // "12/29/2012", // "12/30/2012", // "12/31/2012" #endregion #region January //January //"01/01/2013", // "01/02/2013", // "01/03/2013", // "01/04/2013", // "01/05/2013", // "01/06/2013", // "01/07/2013", // "01/08/2013", // "01/09/2013", // "01/10/2013", // "01/11/2013", // "01/12/2013", // "01/13/2013", // "01/14/2013", // "01/15/2013", // "01/16/2013", // "01/17/2013", // "01/18/2013", // "01/19/2013", // "01/20/2013", // "01/21/2013", // "01/22/2013", // "01/23/2013", // "01/24/2013", // "01/25/2013", // "01/26/2013", // "01/27/2013", // "01/28/2013", // "01/29/2013", // "01/30/2013", // "01/31/2013" #endregion #region February //February //"02/01/2013", //"02/02/2013", //"02/03/2013", //"02/04/2013", //"02/05/2013", //"02/06/2013", //"02/07/2013", //"02/08/2013", //"02/09/2013", //"02/10/2013", //"02/11/2013", //"02/12/2013", //"02/13/2013", //"02/14/2013", //"02/15/2013", //"02/16/2013", //"02/17/2013", //"02/18/2013", //"02/19/2013", //"02/20/2013", //"02/21/2013", //"02/22/2013", //"02/23/2013", //"02/24/2013", //"02/25/2013", //"02/26/2013", //"02/27/2013", //"02/28/2013" #endregion "04/01/2013" }; string convoId = ""; SearchParameters sp = new SearchParameters(); Console.WriteLine("creating cookie jar"); CookieContainer cookieJar = new CookieContainer(); Console.WriteLine("first request, to get cookies and initial info"); string result = ""; cookieJar = getCookiesFromRequest(cookieJar, sp, sp.rootUrl + sp.siteUrl, "", out result, "GET"); Console.WriteLine("conducting search"); foreach (string searchDate in targetDates) { Console.WriteLine("\nsearching on {0}...", searchDate); ConductSearch(notes, sp, searchDate, ref cookieJar, out convoId); } Console.WriteLine("\nfinished searching. press any key to exit..."); Console.ReadKey(); }