mirror of
https://github.com/Xevion/r2park.git
synced 2025-12-06 17:16:04 -06:00
Separate parsing into parse.go, add separate VIP get
This commit is contained in:
71
api.go
71
api.go
@@ -178,32 +178,14 @@ func GetForm(id uint) GetFormResult {
|
||||
}
|
||||
|
||||
// Check if this form is a VIP property
|
||||
guestCodeInput := doc.Find("div.form-group > input#guestCode").First()
|
||||
if guestCodeInput.Length() == 1 {
|
||||
log.Debugf("Guest Code input: %v", guestCodeInput)
|
||||
log.Debug("Guest Code form detected")
|
||||
if CheckGuestCodeRequired(doc) {
|
||||
return GetFormResult{
|
||||
requireGuestCode: true,
|
||||
}
|
||||
}
|
||||
|
||||
// Get the hidden inputs & form fields
|
||||
hiddenInputs := make([]string, 0, 5)
|
||||
formFields := make([]Field, 0, 5)
|
||||
doc.Find("#property-name-form > input[type=hidden]").Each(func(i int, s *goquery.Selection) {
|
||||
hiddenInputs = append(hiddenInputs, s.AttrOr("id", ""))
|
||||
})
|
||||
doc.Find("#property-name-form > div.form-group").Each(func(i int, s *goquery.Selection) {
|
||||
input := s.Find("input.form-control").First()
|
||||
label := s.Find("label").First().Text()
|
||||
|
||||
inputId, _ := input.Attr("id")
|
||||
|
||||
formFields = append(formFields, Field{
|
||||
text: label,
|
||||
id: inputId,
|
||||
})
|
||||
})
|
||||
formFields, hiddenInputs := GetFields(doc)
|
||||
|
||||
// Acquire the title/address
|
||||
titleElement := doc.Find("div > div > h4").First()
|
||||
@@ -211,10 +193,49 @@ func GetForm(id uint) GetFormResult {
|
||||
address := strings.TrimSpace(titleElement.Next().Text())
|
||||
|
||||
return GetFormResult{
|
||||
propertyName: title,
|
||||
address: address,
|
||||
fields: formFields,
|
||||
hiddenInputs: hiddenInputs,
|
||||
requireGuestCode: false,
|
||||
propertyName: title,
|
||||
address: address,
|
||||
fields: formFields,
|
||||
hiddenInputs: hiddenInputs,
|
||||
}
|
||||
}
|
||||
|
||||
func GetVipForm(id uint, guestCode string) GetFormResult {
|
||||
body := fmt.Sprintf("propertyIdSelected=%d&propertySource=parking-snap&guestCode=%s", id, guestCode)
|
||||
req := BuildRequestWithBody("POST", "/register-get-vehicle-form", nil, bytes.NewBufferString(body))
|
||||
SetTypicalHeaders(req, nil, nil, false)
|
||||
onRequest(req)
|
||||
|
||||
res, _ := client.Do(req)
|
||||
onResponse(res)
|
||||
|
||||
html, _ := io.ReadAll(res.Body)
|
||||
htmlString := string(html)
|
||||
|
||||
if htmlString == "guest-code" {
|
||||
return GetFormResult{
|
||||
requireGuestCode: true,
|
||||
err: fmt.Errorf("guest code is invalid"),
|
||||
}
|
||||
}
|
||||
|
||||
doc, err := goquery.NewDocumentFromReader(bytes.NewBufferString(htmlString))
|
||||
if err != nil {
|
||||
return GetFormResult{err: err}
|
||||
}
|
||||
|
||||
// Get the hidden inputs & form fields
|
||||
formFields, hiddenInputs := GetFields(doc)
|
||||
|
||||
// Acquire the title/address
|
||||
titleElement := doc.Find("div > div > h4").First()
|
||||
title := titleElement.Text()
|
||||
address := strings.TrimSpace(titleElement.Next().Text())
|
||||
|
||||
return GetFormResult{
|
||||
propertyName: title,
|
||||
address: address,
|
||||
fields: formFields,
|
||||
hiddenInputs: hiddenInputs,
|
||||
}
|
||||
}
|
||||
|
||||
33
parse.go
Normal file
33
parse.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package main
|
||||
|
||||
import "github.com/PuerkitoBio/goquery"
|
||||
|
||||
// CheckGuestCodeRequired checks whether the guest code is required to access the property.
|
||||
// This is done by checking whether the guest code input field exists on the page.
|
||||
// This function is pretty experimental as I am still unsure how the guest code is handled on a property by property basis.
|
||||
func CheckGuestCodeRequired(doc *goquery.Document) bool {
|
||||
return doc.Find("div.form-group > input#guestCode").Length() > 0
|
||||
}
|
||||
|
||||
func GetFields(doc *goquery.Document) ([]Field, []string) {
|
||||
hiddenInputs := make([]string, 0, 5)
|
||||
formFields := make([]Field, 0, 5)
|
||||
|
||||
doc.Find("#property-name-form > input[type=hidden]").Each(func(i int, s *goquery.Selection) {
|
||||
hiddenInputs = append(hiddenInputs, s.AttrOr("id", ""))
|
||||
})
|
||||
|
||||
doc.Find("#property-name-form > div.form-group").Each(func(i int, s *goquery.Selection) {
|
||||
input := s.Find("input.form-control").First()
|
||||
label := s.Find("label").First().Text()
|
||||
|
||||
inputId, _ := input.Attr("id")
|
||||
|
||||
formFields = append(formFields, Field{
|
||||
text: label,
|
||||
id: inputId,
|
||||
})
|
||||
})
|
||||
|
||||
return formFields, hiddenInputs
|
||||
}
|
||||
Reference in New Issue
Block a user