Skip to content

Commit e8bd535

Browse files
authored
TibiaCharactersCharacter: remove char info regex (TibiaData#226)
1 parent b14b58c commit e8bd535

File tree

3 files changed

+940
-52
lines changed

3 files changed

+940
-52
lines changed

src/TibiaCharactersCharacter.go

Lines changed: 50 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"log"
66
"net/http"
77
"reflect"
8-
"regexp"
98
"strings"
109

1110
"github.com/PuerkitoBio/goquery"
@@ -122,10 +121,6 @@ type CharacterResponse struct {
122121
// best to just simply use the Br constant value.
123122
const Br = 0x202
124123

125-
var (
126-
characterInfoRegex = regexp.MustCompile(`<td.*<nobr>[0-9]+\..(.*)<\/nobr><\/td><td.*><nobr>(.*)<\/nobr><\/td><td style="width: 70%">(.*)<\/td><td.*`)
127-
)
128-
129124
// TibiaCharactersCharacter func
130125
func TibiaCharactersCharacterImpl(BoxContentHTML string) (*CharacterResponse, error) {
131126
var (
@@ -516,52 +511,74 @@ func TibiaCharactersCharacterImpl(BoxContentHTML string) (*CharacterResponse, er
516511
// Removing line breaks
517512
CharacterListHTML = TibiaDataHTMLRemoveLinebreaks(CharacterListHTML)
518513

519-
subma1 := characterInfoRegex.FindAllStringSubmatch(CharacterListHTML, -1)
514+
if !strings.Contains(CharacterListHTML, "<td>Name</td><td>World</td><td>Status</td>") {
515+
const (
516+
nameIndexer = `<td style="width: 20%"><nobr>`
517+
worldIndexer = `<td style="width: 10%"><nobr>`
518+
)
519+
520+
nameIdx := strings.Index(
521+
CharacterListHTML, nameIndexer,
522+
) + len(nameIndexer)
523+
nameIdx += strings.Index(
524+
CharacterListHTML[nameIdx:], " ",
525+
) + 1
526+
endNameIdx := strings.Index(
527+
CharacterListHTML[nameIdx:], `</nobr></td>`,
528+
) + nameIdx
529+
530+
tmpCharName := CharacterListHTML[nameIdx:endNameIdx]
531+
532+
worldIdx := strings.Index(
533+
CharacterListHTML, worldIndexer,
534+
) + len(worldIndexer)
535+
endWorldIdx := strings.Index(
536+
CharacterListHTML[worldIdx:], `</nobr></td>`,
537+
) + worldIdx
520538

521-
if len(subma1) > 0 {
522-
TmpCharacterName := subma1[0][1]
539+
world := CharacterListHTML[worldIdx:endWorldIdx]
523540

524-
var TmpTraded bool
525-
if strings.Contains(TmpCharacterName, localTradedString) {
526-
TmpTraded = true
527-
TmpCharacterName = strings.ReplaceAll(TmpCharacterName, localTradedString, "")
541+
var tmpTraded bool
542+
if strings.Contains(tmpCharName, localTradedString) {
543+
tmpTraded = true
544+
tmpCharName = strings.ReplaceAll(tmpCharName, localTradedString, "")
528545
}
529546

530547
// If this character is the main character of the account
531-
TmpMain := false
532-
if strings.Contains(TmpCharacterName, "Main Character") {
533-
TmpMain = true
534-
Tmp := strings.Split(TmpCharacterName, "<")
535-
TmpCharacterName = strings.TrimSpace(Tmp[0])
548+
var tmpMain bool
549+
if strings.Contains(tmpCharName, "Main Character") {
550+
tmpMain = true
551+
tmp := strings.Split(tmpCharName, "<")
552+
tmpCharName = strings.TrimSpace(tmp[0])
536553
}
537554

538555
// If this character is online or offline
539-
TmpStatus := "offline"
540-
if strings.Contains(subma1[0][3], "<b class=\"green\">online</b>") {
541-
TmpStatus = "online"
556+
tmpStatus := "offline"
557+
if strings.Contains(CharacterListHTML, "<b class=\"green\">online</b>") {
558+
tmpStatus = "online"
542559
}
543560

544561
// Is this character is deleted
545-
TmpDeleted := false
546-
if strings.Contains(subma1[0][3], "deleted") {
547-
TmpDeleted = true
562+
var tmpDeleted bool
563+
if strings.Contains(CharacterListHTML, "deleted") {
564+
tmpDeleted = true
548565
}
549566

550567
// Is this character having a special position
551-
TmpPosition := ""
552-
if strings.Contains(subma1[0][3], "CipSoft Member") {
553-
TmpPosition = "CipSoft Member"
568+
var tmpPosition string
569+
if strings.Contains(CharacterListHTML, "CipSoft Member") {
570+
tmpPosition = "CipSoft Member"
554571
}
555572

556573
// Create the character and append it to the other characters list
557574
OtherCharactersData = append(OtherCharactersData, OtherCharacters{
558-
Name: TibiaDataSanitizeStrings(TmpCharacterName),
559-
World: subma1[0][2],
560-
Status: TmpStatus,
561-
Deleted: TmpDeleted,
562-
Main: TmpMain,
563-
Traded: TmpTraded,
564-
Position: TmpPosition,
575+
Name: TibiaDataSanitizeStrings(tmpCharName),
576+
World: world,
577+
Status: tmpStatus,
578+
Deleted: tmpDeleted,
579+
Main: tmpMain,
580+
Traded: tmpTraded,
581+
Position: tmpPosition,
565582
})
566583
}
567584

src/TibiaCharactersCharacter_test.go

Lines changed: 85 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ func TestNumber3(t *testing.T) {
153153
assert.Equal("Free Account", character.AccountStatus)
154154
assert.Equal("Fansite Admin", characterJson.Character.AccountInformation.Position)
155155
assert.Empty(characterJson.Character.AccountInformation.LoyaltyTitle)
156+
assert.True(characterJson.Character.OtherCharacters[0].Deleted)
157+
assert.False(characterJson.Character.OtherCharacters[1].Deleted)
156158
}
157159

158160
func TestNumber4(t *testing.T) {
@@ -2901,8 +2903,8 @@ func TestNumber7(t *testing.T) {
29012903
assert.Equal("___$$$$$$$$_______$$$$$$$$\n_$$$$$$$$$$$$__$$$$$$$$$$$$$$\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n_$$$$$$$$$$-Snulliz-$$$$$$$$$$$\n__$$$$$$$$$$$$$$$$$$$$$$$$$$\n____$$$$$$$$$$$$$$$$$$$$$$\n______$$$$$$$$$$$$$$$$$$\n________$$$$$$$$$$$$$$\n___________$$$$$$$$$\n____________$$$$$$\n_____________$$", character.Comment)
29022904
}
29032905

2904-
func TestNumber8(t *testing.T) {
2905-
file, err := static.TestFiles.Open("testdata/characters/Jowjow Invencivel.html")
2906+
func TestNumber9(t *testing.T) {
2907+
file, err := static.TestFiles.Open("testdata/characters/Akura Aleus.html")
29062908
if err != nil {
29072909
t.Fatalf("file opening error: %s", err)
29082910
}
@@ -2919,24 +2921,88 @@ func TestNumber8(t *testing.T) {
29192921
}
29202922

29212923
assert := assert.New(t)
2922-
29232924
character := characterJson.Character
2924-
assert.Len(character.Achievements, 5)
2925-
assert.Equal(character.Achievements[0].Name, "Alumni")
2926-
assert.Equal(character.Achievements[0].Grade, 2)
2927-
assert.Equal(character.Achievements[0].Secret, false)
2928-
assert.Equal(character.Achievements[1].Name, "Bad Timing")
2929-
assert.Equal(character.Achievements[1].Grade, 1)
2930-
assert.Equal(character.Achievements[1].Secret, true)
2931-
assert.Equal(character.Achievements[2].Name, "Cake Conqueror")
2932-
assert.Equal(character.Achievements[2].Grade, 1)
2933-
assert.Equal(character.Achievements[2].Secret, true)
2934-
assert.Equal(character.Achievements[3].Name, "Hat Hunter")
2935-
assert.Equal(character.Achievements[3].Grade, 2)
2936-
assert.Equal(character.Achievements[3].Secret, false)
2937-
assert.Equal(character.Achievements[4].Name, "Number of the Beast")
2938-
assert.Equal(character.Achievements[4].Grade, 1)
2939-
assert.Equal(character.Achievements[4].Secret, false)
2925+
2926+
assert.Len(character.OtherCharacters, 10)
2927+
assert.Equal(character.OtherCharacters[0].Deleted, false)
2928+
assert.Equal(character.OtherCharacters[0].Main, false)
2929+
assert.Equal(character.OtherCharacters[0].Name, "Akura Aleus")
2930+
assert.Equal(character.OtherCharacters[0].Position, "")
2931+
assert.Equal(character.OtherCharacters[0].Status, "offline")
2932+
assert.Equal(character.OtherCharacters[0].Traded, false)
2933+
assert.Equal(character.OtherCharacters[0].World, "Lobera")
2934+
2935+
assert.Equal(character.OtherCharacters[1].Deleted, false)
2936+
assert.Equal(character.OtherCharacters[1].Main, false)
2937+
assert.Equal(character.OtherCharacters[1].Name, "Armnox")
2938+
assert.Equal(character.OtherCharacters[1].Position, "")
2939+
assert.Equal(character.OtherCharacters[1].Status, "offline")
2940+
assert.Equal(character.OtherCharacters[1].Traded, false)
2941+
assert.Equal(character.OtherCharacters[1].World, "Ferobra")
2942+
2943+
assert.Equal(character.OtherCharacters[2].Deleted, false)
2944+
assert.Equal(character.OtherCharacters[2].Main, false)
2945+
assert.Equal(character.OtherCharacters[2].Name, "Cheradon")
2946+
assert.Equal(character.OtherCharacters[2].Position, "")
2947+
assert.Equal(character.OtherCharacters[2].Status, "offline")
2948+
assert.Equal(character.OtherCharacters[2].Traded, false)
2949+
assert.Equal(character.OtherCharacters[2].World, "Serdebra")
2950+
2951+
assert.Equal(character.OtherCharacters[3].Deleted, false)
2952+
assert.Equal(character.OtherCharacters[3].Main, false)
2953+
assert.Equal(character.OtherCharacters[3].Name, "Dollar Driver")
2954+
assert.Equal(character.OtherCharacters[3].Position, "")
2955+
assert.Equal(character.OtherCharacters[3].Status, "offline")
2956+
assert.Equal(character.OtherCharacters[3].Traded, false)
2957+
assert.Equal(character.OtherCharacters[3].World, "Ousabra")
2958+
2959+
assert.Equal(character.OtherCharacters[4].Deleted, false)
2960+
assert.Equal(character.OtherCharacters[4].Main, false)
2961+
assert.Equal(character.OtherCharacters[4].Name, "Goth angel sinner")
2962+
assert.Equal(character.OtherCharacters[4].Position, "")
2963+
assert.Equal(character.OtherCharacters[4].Status, "offline")
2964+
assert.Equal(character.OtherCharacters[4].Traded, true)
2965+
assert.Equal(character.OtherCharacters[4].World, "Ousabra")
2966+
2967+
assert.Equal(character.OtherCharacters[5].Deleted, false)
2968+
assert.Equal(character.OtherCharacters[5].Main, false)
2969+
assert.Equal(character.OtherCharacters[5].Name, "Halodrol")
2970+
assert.Equal(character.OtherCharacters[5].Position, "")
2971+
assert.Equal(character.OtherCharacters[5].Status, "offline")
2972+
assert.Equal(character.OtherCharacters[5].Traded, false)
2973+
assert.Equal(character.OtherCharacters[5].World, "Vunira")
2974+
2975+
assert.Equal(character.OtherCharacters[6].Deleted, false)
2976+
assert.Equal(character.OtherCharacters[6].Main, false)
2977+
assert.Equal(character.OtherCharacters[6].Name, "Halodrow")
2978+
assert.Equal(character.OtherCharacters[6].Position, "")
2979+
assert.Equal(character.OtherCharacters[6].Status, "offline")
2980+
assert.Equal(character.OtherCharacters[6].Traded, false)
2981+
assert.Equal(character.OtherCharacters[6].World, "Lobera")
2982+
2983+
assert.Equal(character.OtherCharacters[7].Deleted, false)
2984+
assert.Equal(character.OtherCharacters[7].Main, false)
2985+
assert.Equal(character.OtherCharacters[7].Name, "Incoggnita")
2986+
assert.Equal(character.OtherCharacters[7].Position, "")
2987+
assert.Equal(character.OtherCharacters[7].Status, "offline")
2988+
assert.Equal(character.OtherCharacters[7].Traded, false)
2989+
assert.Equal(character.OtherCharacters[7].World, "Ferobra")
2990+
2991+
assert.Equal(character.OtherCharacters[8].Deleted, false)
2992+
assert.Equal(character.OtherCharacters[8].Main, false)
2993+
assert.Equal(character.OtherCharacters[8].Name, "Lord Kabum")
2994+
assert.Equal(character.OtherCharacters[8].Position, "")
2995+
assert.Equal(character.OtherCharacters[8].Status, "offline")
2996+
assert.Equal(character.OtherCharacters[8].Traded, false)
2997+
assert.Equal(character.OtherCharacters[8].World, "Solidera")
2998+
2999+
assert.Equal(character.OtherCharacters[9].Deleted, false)
3000+
assert.Equal(character.OtherCharacters[9].Main, true)
3001+
assert.Equal(character.OtherCharacters[9].Name, "Lord Succubu")
3002+
assert.Equal(character.OtherCharacters[9].Position, "")
3003+
assert.Equal(character.OtherCharacters[9].Status, "offline")
3004+
assert.Equal(character.OtherCharacters[9].Traded, false)
3005+
assert.Equal(character.OtherCharacters[9].World, "Ferobra")
29403006
}
29413007

29423008
func BenchmarkNumber1(b *testing.B) {

0 commit comments

Comments
 (0)