CSV for lotr-lcg-set-generator
This commit is contained in:
@ -14,7 +14,7 @@ go_library(
|
||||
importpath = "github.com/squk/lotr/cmd/beornextract",
|
||||
deps = [
|
||||
"//cmd/beornextract/types",
|
||||
"@com_github_davecgh_go_spew//spew",
|
||||
"@com_github_grokify_html_strip_tags_go//:html-strip-tags-go",
|
||||
"@io_bazel_rules_go//go/tools/bazel:go_default_library",
|
||||
],
|
||||
)
|
||||
|
@ -1,15 +1,19 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/csv"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/bazelbuild/rules_go/go/tools/bazel"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
strip "github.com/grokify/html-strip-tags-go"
|
||||
"github.com/squk/lotr/cmd/beornextract/types"
|
||||
)
|
||||
|
||||
@ -32,19 +36,81 @@ func main() {
|
||||
}
|
||||
|
||||
// Open our jsonFile
|
||||
// jsonFile, err := os.Open("cmd/beornextract/data/Bot.Cards.json")
|
||||
jsonFile, err := bazel.Runfile("cmd/beornextract/data/Bot.Cards.json")
|
||||
jsonFile, err := os.Open("cmd/beornextract/data/Bot.Cards.json")
|
||||
// jsonFile, err := bazel.Runfile("cmd/beornextract/data/Bot.Cards.json")
|
||||
// if we os.Open returns an error then handle it
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
fmt.Println("Successfully Opened users.json")
|
||||
// defer the closing of our jsonFile so that we can parse it later on
|
||||
defer jsonFile.Close()
|
||||
|
||||
byteValue, _ := ioutil.ReadAll(jsonFile)
|
||||
c := []types.HallOfBeornCard{}
|
||||
json.Unmarshal(byteValue, &c)
|
||||
spew.Dump(c)
|
||||
cards := []types.HallOfBeornCard{}
|
||||
json.Unmarshal(byteValue, &cards)
|
||||
|
||||
// Open a file for writing
|
||||
csvFile, err := os.Create("/Users/christian/Downloads/lotr-lcg-set-generator.csv")
|
||||
defer csvFile.Close()
|
||||
if err != nil {
|
||||
// Handle error
|
||||
}
|
||||
|
||||
// Create a writer
|
||||
w := csv.NewWriter(csvFile)
|
||||
|
||||
// Write some rows
|
||||
for _, card := range cards {
|
||||
if card.EncounterSet != "" {
|
||||
continue // skip non=player cards
|
||||
}
|
||||
|
||||
w.Write(
|
||||
[]string{
|
||||
card.Octgnid,
|
||||
"", // hidden
|
||||
"", // hidden
|
||||
card.EncounterSet,
|
||||
strconv.Itoa(card.Position),
|
||||
strconv.Itoa(card.Quantity),
|
||||
card.Name,
|
||||
fmt.Sprintf(
|
||||
"%t",
|
||||
card.IsUnique,
|
||||
),
|
||||
card.TypeName,
|
||||
card.SphereName,
|
||||
card.Traits,
|
||||
extractKeywords(card.Text),
|
||||
card.Cost,
|
||||
card.EngagementCost,
|
||||
strconv.Itoa(card.Threat),
|
||||
strconv.Itoa(card.Willpower),
|
||||
strconv.Itoa(card.Attack),
|
||||
strconv.Itoa(card.Defense),
|
||||
strconv.Itoa(card.Health),
|
||||
"", // Quest Points
|
||||
"", // Victory Points
|
||||
"", // Special Icon
|
||||
transformText(card.Name, card.Text),
|
||||
card.Flavor,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// Close the writer
|
||||
w.Flush()
|
||||
// spew.Dump(c)
|
||||
}
|
||||
|
||||
func transformText(name, text string) string {
|
||||
return strip.StripTags(
|
||||
strings.ReplaceAll(text, name, "[name]"), // insert name tag
|
||||
)
|
||||
}
|
||||
|
||||
func extractKeywords(text string) string {
|
||||
pattern := regexp.MustCompile(`((?:(?:[A-Z][a-z]+(\.|\s[0-9]+\.)\s)+))`)
|
||||
return strings.TrimSpace(pattern.FindString(text))
|
||||
}
|
||||
|
@ -1,33 +1,37 @@
|
||||
package types
|
||||
|
||||
type HallOfBeornCard struct {
|
||||
PackCode string `json:"pack_code"`
|
||||
PackName string `json:"pack_name"`
|
||||
IsOfficial bool `json:"is_official"`
|
||||
TypeCode string `json:"type_code"`
|
||||
TypeName string `json:"type_name"`
|
||||
SphereCode string `json:"sphere_code"`
|
||||
SphereName string `json:"sphere_name"`
|
||||
Position int `json:"position"`
|
||||
Code string `json:"code"`
|
||||
Name string `json:"name"`
|
||||
Traits string `json:"traits"`
|
||||
Text string `json:"text"`
|
||||
Flavor string `json:"flavor"`
|
||||
IsUnique bool `json:"is_unique"`
|
||||
Threat int `json:"threat"`
|
||||
Willpower int `json:"willpower"`
|
||||
Attack int `json:"attack"`
|
||||
Defense int `json:"defense"`
|
||||
Health int `json:"health"`
|
||||
Quantity int `json:"quantity"`
|
||||
DeckLimit int `json:"deck_limit"`
|
||||
Illustrator string `json:"illustrator"`
|
||||
Octgnid string `json:"octgnid"`
|
||||
HasErrata bool `json:"has_errata"`
|
||||
URL string `json:"url"`
|
||||
Imagesrc string `json:"imagesrc"`
|
||||
PackCode string `json:"pack_code,omitempty"`
|
||||
PackName string `json:"pack_name,omitempty"`
|
||||
IsOfficial bool `json:"is_official,omitempty"`
|
||||
TypeCode string `json:"type_code,omitempty"`
|
||||
TypeName string `json:"type_name,omitempty"`
|
||||
SphereCode string `json:"sphere_code,omitempty"`
|
||||
SphereName string `json:"sphere_name,omitempty"`
|
||||
Position int `json:"position,omitempty"`
|
||||
Code string `json:"code,omitempty"`
|
||||
Cost string `json:"cost,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Traits string `json:"traits,omitempty"`
|
||||
Text string `json:"text,omitempty"`
|
||||
Flavor string `json:"flavor,omitempty"`
|
||||
IsUnique bool `json:"is_unique,omitempty"`
|
||||
Threat int `json:"threat,omitempty"`
|
||||
Willpower int `json:"willpower,omitempty"`
|
||||
Attack int `json:"attack,omitempty"`
|
||||
Defense int `json:"defense,omitempty"`
|
||||
Health int `json:"health,omitempty"`
|
||||
Quantity int `json:"quantity,omitempty"`
|
||||
DeckLimit int `json:"deck_limit,omitempty"`
|
||||
Illustrator string `json:"illustrator,omitempty"`
|
||||
Octgnid string `json:"octgnid,omitempty"`
|
||||
HasErrata bool `json:"has_errata,omitempty"`
|
||||
URL string `json:"url,omitempty"`
|
||||
Imagesrc string `json:"imagesrc,omitempty"`
|
||||
|
||||
EncounterSet string `json:"encounter_set,omitempty"`
|
||||
EngagementCost string `json:"engagement_cost,omitempty"`
|
||||
ThreatStrength int `json:"threat_strength,omitempty"`
|
||||
}
|
||||
|
||||
type NormalizedCard struct {
|
||||
}
|
||||
type NormalizedCard struct{}
|
||||
|
7
deps.bzl
7
deps.bzl
@ -30,6 +30,13 @@ def go_dependencies():
|
||||
sum = "h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=",
|
||||
version = "v1.5.2",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_grokify_html_strip_tags_go",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/grokify/html-strip-tags-go",
|
||||
sum = "h1:0fThFwLbW7P/kOiTBs03FsJSV9RM2M/Q/MOnCQxKMo0=",
|
||||
version = "v0.0.1",
|
||||
)
|
||||
|
||||
go_repository(
|
||||
name = "com_github_mattn_go_sqlite3",
|
||||
|
1
go.mod
1
go.mod
@ -6,5 +6,6 @@ require github.com/davecgh/go-spew v1.1.1
|
||||
|
||||
require (
|
||||
github.com/bazelbuild/rules_go v0.41.0 // indirect
|
||||
github.com/grokify/html-strip-tags-go v0.0.1 // indirect
|
||||
github.com/mattn/go-sqlite3 v1.14.17 // indirect
|
||||
)
|
||||
|
2
go.sum
2
go.sum
@ -2,5 +2,7 @@ github.com/bazelbuild/rules_go v0.41.0 h1:JzlRxsFNhlX+g4drDRPhIaU5H5LnI978wdMJ0v
|
||||
github.com/bazelbuild/rules_go v0.41.0/go.mod h1:TMHmtfpvyfsxaqfL9WnahCsXMWDMICTw7XeK9yVb+YU=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/grokify/html-strip-tags-go v0.0.1 h1:0fThFwLbW7P/kOiTBs03FsJSV9RM2M/Q/MOnCQxKMo0=
|
||||
github.com/grokify/html-strip-tags-go v0.0.1/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78=
|
||||
github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
|
||||
github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
||||
|
Reference in New Issue
Block a user