Skip to content

Commit 03d5ef6

Browse files
authored
Apply hotfix for the new website layout (#46)
1 parent f962229 commit 03d5ef6

File tree

5 files changed

+33
-27
lines changed

5 files changed

+33
-27
lines changed

handlers/getAdventurerSearch.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ func getAdventurerSearch(w http.ResponseWriter, r *http.Request) {
1616
return
1717
}
1818

19-
query, queryOk, queryValidationMessage := validators.ValidateAdventurerNameQueryParam(r.URL.Query()["query"], region)
19+
searchTypeQueryParam := r.URL.Query()["searchType"]
20+
searchType := validators.ValidateSearchTypeQueryParam(searchTypeQueryParam)
21+
22+
query, queryOk, queryValidationMessage := validators.ValidateAdventurerNameQueryParam(r.URL.Query()["query"], region, searchType)
2023
if !queryOk {
2124
giveBadRequestResponse(w, queryValidationMessage)
2225
return
2326
}
2427

25-
searchTypeQueryParam := r.URL.Query()["searchType"]
26-
searchType := validators.ValidateSearchTypeQueryParam(searchTypeQueryParam)
27-
2828
if data, status, date, expires, ok := cache.ProfileSearch.GetRecord([]string{region, query, searchType}); ok {
2929
w.Header().Set("Expires", expires)
3030
w.Header().Set("Last-Modified", date)

handlers/getStatus.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
)
1313

1414
var initTime = time.Now()
15-
var version = "1.11.2"
15+
var version = "1.11.3"
1616

1717
func getStatus(w http.ResponseWriter, r *http.Request) {
1818
json.NewEncoder(w).Encode(map[string]interface{}{

scraper/scrapeAdventurer.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package scraper
33
import (
44
"fmt"
55
"net/http"
6+
"regexp"
67
"strconv"
78
"strings"
89

@@ -102,14 +103,14 @@ func scrapeAdventurer(body *colly.HTMLElement, region, profileTarget string) {
102103
return false
103104
}
104105

105-
fields := strings.Split(e.Text, "Lv")
106-
wordLevel := fields[0]
106+
fields := regexp.MustCompile(`(\D+)([0-9]+)`).FindStringSubmatch(e.Text)
107+
wordLevel := strings.Replace(strings.Replace(fields[1], "Lv. ", "", 1), "Nv. ", "", 1)
107108

108109
if region != "EU" && region != "NA" {
109110
translators.TranslateSpecLevel(&wordLevel)
110111
}
111112

112-
value := wordLevel + fields[1]
113+
value := wordLevel + " " + fields[2]
113114

114115
switch i {
115116
case 0:

validators/ValidateAdventurerNameQueryParam.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,21 @@ import (
88

99
// The naming policies in BDO are fucked up
1010
// This function only checks the length and allowed symbols
11-
func ValidateAdventurerNameQueryParam(query []string, region string) (name string, ok bool, errorMessage string) {
11+
func ValidateAdventurerNameQueryParam(query []string, region string, searchType string) (name string, ok bool, errorMessage string) {
1212
if 1 > len(query) {
1313
return "", false, "Adventurer name is missing from request"
1414
}
1515

1616
minLength := map[string]int{
17-
"SA": 2,
18-
"NA": 3,
19-
"EU": 3,
20-
}[region]
17+
"EU1": 2,
18+
"EU2": 1,
19+
"KR1": 2,
20+
"KR2": 1,
21+
"NA1": 2,
22+
"NA2": 1,
23+
"SA1": 2,
24+
"SA2": 2,
25+
}[region+searchType]
2126

2227
name = strings.ToLower(query[0])
2328

validators/ValidateAdventurerNameQueryParam_test.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,26 @@ func TestValidateAdventurerNameQueryParam(t *testing.T) {
99
expectedMessage string
1010
input []string
1111
region string
12+
searchType string
1213
}{
13-
{input: []string{"1Number"}, region: "EU", expectedName: "1number", expectedOk: true, expectedMessage: ""},
14-
{input: []string{"Adventurer_123"}, region: "EU", expectedName: "adventurer_123", expectedOk: true, expectedMessage: ""},
15-
{input: []string{"JohnDoe"}, region: "EU", expectedName: "johndoe", expectedOk: true, expectedMessage: ""},
16-
{input: []string{"Name1", "Name2"}, region: "EU", expectedName: "name1", expectedOk: true, expectedMessage: ""},
17-
{input: []string{"고대신"}, region: "EU", expectedName: "고대신", expectedOk: true, expectedMessage: ""},
14+
{input: []string{"1Number"}, region: "EU", searchType: "1", expectedName: "1number", expectedOk: true, expectedMessage: ""},
15+
{input: []string{"Adventurer_123"}, region: "EU", searchType: "1", expectedName: "adventurer_123", expectedOk: true, expectedMessage: ""},
16+
{input: []string{"JohnDoe"}, region: "EU", searchType: "1", expectedName: "johndoe", expectedOk: true, expectedMessage: ""},
17+
{input: []string{"Name1", "Name2"}, region: "EU", searchType: "1", expectedName: "name1", expectedOk: true, expectedMessage: ""},
18+
{input: []string{"고대신"}, region: "EU", searchType: "1", expectedName: "고대신", expectedOk: true, expectedMessage: ""},
1819

19-
{input: []string{""}, region: "EU", expectedName: "", expectedOk: false, expectedMessage: "Adventurer name should be between 3 and 16 symbols long"},
20-
{input: []string{"Ad"}, region: "EU", expectedName: "ad", expectedOk: false, expectedMessage: "Adventurer name should be between 3 and 16 symbols long"},
21-
{input: []string{"With Spaces"}, region: "EU", expectedName: "with spaces", expectedOk: false, expectedMessage: "Adventurer name contains a forbidden symbol at position 5: ' '"},
22-
{input: []string{"AdventurerNameTooLong12345"}, region: "EU", expectedName: "adventurernametoolong12345", expectedOk: false, expectedMessage: "Adventurer name should be between 3 and 16 symbols long"},
23-
{input: []string{"Name$"}, region: "EU", expectedName: "name$", expectedOk: false, expectedMessage: "Adventurer name contains a forbidden symbol at position 5: '$'"},
24-
{input: []string{}, region: "EU", expectedName: "", expectedOk: false, expectedMessage: "Adventurer name is missing from request"},
20+
{input: []string{""}, region: "EU", searchType: "1", expectedName: "", expectedOk: false, expectedMessage: "Adventurer name should be between 2 and 16 symbols long"},
21+
{input: []string{"With Spaces"}, region: "EU", searchType: "1", expectedName: "with spaces", expectedOk: false, expectedMessage: "Adventurer name contains a forbidden symbol at position 5: ' '"},
22+
{input: []string{"AdventurerNameTooLong12345"}, region: "EU", searchType: "1", expectedName: "adventurernametoolong12345", expectedOk: false, expectedMessage: "Adventurer name should be between 2 and 16 symbols long"},
23+
{input: []string{"Name$"}, region: "EU", searchType: "1", expectedName: "name$", expectedOk: false, expectedMessage: "Adventurer name contains a forbidden symbol at position 5: '$'"},
24+
{input: []string{}, region: "EU", searchType: "1", expectedName: "", expectedOk: false, expectedMessage: "Adventurer name is missing from request"},
2525

26-
{input: []string{""}, region: "SA", expectedName: "", expectedOk: false, expectedMessage: "Adventurer name should be between 2 and 16 symbols long"},
27-
{input: []string{"Ad"}, region: "SA", expectedName: "ad", expectedOk: true, expectedMessage: ""},
26+
{input: []string{""}, region: "SA", searchType: "2", expectedName: "", expectedOk: false, expectedMessage: "Adventurer name should be between 2 and 16 symbols long"},
27+
{input: []string{"Ad"}, region: "SA", searchType: "2", expectedName: "ad", expectedOk: true, expectedMessage: ""},
2828
}
2929

3030
for _, test := range tests {
31-
name, ok, message := ValidateAdventurerNameQueryParam(test.input, test.region)
31+
name, ok, message := ValidateAdventurerNameQueryParam(test.input, test.region, test.searchType)
3232
if name != test.expectedName || ok != test.expectedOk || message != test.expectedMessage {
3333
t.Errorf("Input: %v %v, Expected: %v %v %v, Got: %v %v %v", test.input, test.region, test.expectedName, test.expectedOk, test.expectedMessage, name, ok, message)
3434
}

0 commit comments

Comments
 (0)