Features:
- Login automatically
- Automatically select an available seat
- Send a text message to your cellular phone via SMSGO API
In order to login to the reservation system, I use HTTP Analyzer to analyze HTTP/HTTPS traffic:
login.aspx?type=1&__EVENTTARGET=LinkButton1&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwUJNjY4NzU5MzE0ZGTZg4txRnBH%2Bs%2B84oIQlb%2Bz%2BJlJLQ%3D%3D&__EVENTVALIDATION=%2FwEWBQKoi57rDgLr%2F4HeAgK%2Bmv37AgLM9PumDwKxi96RBUBQxiaTFm%2FOXRelnZ%2BE%2FRkGRcDS&UserId=UserId;PassWd=PassWd
Then, I can use the above parameters to login to the system.
Also, there are two parameters used to select a seat: seatID and date.
Main Screen:
Available/Unavailable Seats:
Partial code:
if(iURLPos == 1)//iURLPos :current webpage (0: home; 1: login page; 2: select seat page; 3: reservation result) { Timer_Login->Enabled = false; Variant doc = CppWebBrowser_Main->ControlInterface->Document; if (((IDispatch *)doc) != NULL) { Variant body = doc.OlePropertyGet("Body"); Variant html = body.OlePropertyGet("InnerHTML"); AnsiString tmp_body = html; if(tmp_body.Pos("logout")>0) { Timer_Login->Enabled = false; Btn_Seat->OnClick(Sender); } else Timer_Login->Enabled = true; } } else if(iURLPos == 2) { Timer_Refresh->Enabled = false; Variant doc = CppWebBrowser_Main->ControlInterface->Document; if (((IDispatch *)doc) != NULL) { Variant body = doc.OlePropertyGet("Body"); Variant html = body.OlePropertyGet("InnerHTML"); AnsiString tmp_body = html; if(tmp_body.Pos("2013/2")>0 || tmp_body.Pos("2013/3")>0 || tmp_body.Pos("2013/4")>0 || tmp_body.Pos("2013/5")>0 || tmp_body.Pos("2013/6")>0 || tmp_body.Pos("2013/7")>0 || tmp_body.Pos("2013/8")>0) { Timer_Refresh->Enabled = false; Variant disp,alllinks,eachlink; int linkcount; disp = CppWebBrowser_Main->Document; alllinks = disp.OlePropertyGet("links"); //get all links linkcount = alllinks.OlePropertyGet("length"); //get link numbers for (int i=0;i <linkcount;i++) { eachlink = alllinks.OleFunction("item",i); if( i == 0) { eachlink.OleFunction("click"); Timer_FindWin->Enabled = true; iURLPos = 3; break; } } } else { if(pMode == 0) CppWebBrowser_Main->Navigate(Variant(Edit_URL1->Text)); else { Application->ProcessMessages(); Delay(pMode); CppWebBrowser_Main->Navigate(Variant(Edit_URL1->Text)); } } } } else if(iURLPos == 3) { Variant doc = CppWebBrowser_Main->ControlInterface->Document; if (((IDispatch *)doc) != NULL) { Variant body = doc.OlePropertyGet("Body"); Variant html = body.OlePropertyGet("InnerHTML"); AnsiString tmp_body = html; if(tmp_body.Pos("successful")>0) { isChoose = true; //reservation is successful; send a text message to your cell phone AnsiString SMSBody = "Reservation is Successful" + ChooseDate+"("+SeatID+")"; SMSURL="http://www.smsgo.com.tw/sms_gw/sendsms.asp?username=xxx&password=xxx&dstaddr=phone_number&smbody="+SMSBody;//SMSGO API iURLPos = -1; CppWebBrowser_SMS->Navigate(Variant(SMSURL)); } else { Timer_FindWin->Enabled = true; Btn_NextSeat->OnClick(Sender); } } }