diff options
Diffstat (limited to 'tools/importer/ACDReader.go')
-rw-r--r-- | tools/importer/ACDReader.go | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/tools/importer/ACDReader.go b/tools/importer/ACDReader.go new file mode 100644 index 0000000..694087e --- /dev/null +++ b/tools/importer/ACDReader.go | |||
@@ -0,0 +1,81 @@ | |||
1 | package main | ||
2 | |||
3 | import ( | ||
4 | "encoding/json" | ||
5 | "fmt" | ||
6 | "io/ioutil" | ||
7 | "os" | ||
8 | "regexp" | ||
9 | "strconv" | ||
10 | "strings" | ||
11 | |||
12 | "fagott.pw/grilist/modules/grils" | ||
13 | ) | ||
14 | |||
15 | var tagRegex = regexp.MustCompile(`\<a.*?\>(.+)\<\/a\>`) | ||
16 | |||
17 | type ACDReader struct{} | ||
18 | |||
19 | func ifErrExit(err error) { | ||
20 | if err != nil { | ||
21 | fmt.Fprintf(os.Stderr, "%v\n", err) | ||
22 | os.Exit(1) | ||
23 | } | ||
24 | } | ||
25 | |||
26 | func toInt(s string) int { | ||
27 | i, err := strconv.ParseInt(s, 10, 32) | ||
28 | ifErrExit(err) | ||
29 | return int(i) | ||
30 | } | ||
31 | |||
32 | func (r *ACDReader) Read(path string) WrappedGril { | ||
33 | g := WrappedGril{} | ||
34 | g.Gril = grils.Gril{} | ||
35 | data, err := ioutil.ReadFile(path) | ||
36 | ifErrExit(err) | ||
37 | var jObj interface{} | ||
38 | err = json.Unmarshal(data, &jObj) | ||
39 | ifErrExit(err) | ||
40 | for k, v := range jObj.(map[string]interface{}) { | ||
41 | switch k { | ||
42 | case "Character ID": | ||
43 | g.Gril.ID = toInt(v.(string)) | ||
44 | case "Romaji Name": | ||
45 | g.Gril.RomajiName = v.(string) | ||
46 | case "Japanese Name": | ||
47 | g.Gril.KanjiName = v.(string) | ||
48 | case "Aliases": | ||
49 | g.Gril.OtherNames = make([]string, 0) | ||
50 | for _, n := range strings.Split(v.(string), ",") { | ||
51 | if n == "" { | ||
52 | continue | ||
53 | } | ||
54 | g.Gril.OtherNames = append( | ||
55 | g.Gril.OtherNames, | ||
56 | strings.TrimSpace(n)) | ||
57 | } | ||
58 | case "Tagged": | ||
59 | g.Gril.Tags = make([]string, 0) | ||
60 | for _, n := range strings.Split(v.(string), ",") { | ||
61 | if n == "" { | ||
62 | continue | ||
63 | } | ||
64 | tag := strings.TrimSpace(n) | ||
65 | tag = tagRegex.FindStringSubmatch(tag)[1] | ||
66 | g.Gril.Tags = append( | ||
67 | g.Gril.Tags, | ||
68 | tag) | ||
69 | } | ||
70 | case "__img": | ||
71 | g.Image = v.(string) | ||
72 | case "__thumb": | ||
73 | g.Thumb = v.(string) | ||
74 | } | ||
75 | } | ||
76 | return g | ||
77 | } | ||
78 | |||
79 | func (r *ACDReader) ID() int { | ||
80 | return int(grils.DataSourceACD) | ||
81 | } | ||