/
bookinfo.go
61 lines (53 loc) · 1.25 KB
/
bookinfo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package yes24
import (
"fmt"
"os"
"strings"
)
type BookInfo struct {
Title string
Isbn string
Author string
PublishedDate string
Publisher string
Price string
PriceCurrency string
}
func (s *BookInfo) GetPublishedYear() string {
return s.PublishedDate[:4]
}
func GetBookInfo(id string) (*BookInfo, error) {
html, err := getGoodsHtml(id)
if err != nil {
return nil, err
}
info, err := extractGoodsInfo(html)
if err != nil {
return nil, err
}
bookInfo := BookInfo{
Title: info.Name,
Author: info.Author.Name,
Publisher: info.Publisher.Name,
}
if len(info.WorkExample) > 0 {
work := info.WorkExample[0]
bookInfo.Isbn = work.Isbn
bookInfo.PublishedDate = work.DatePublished
bookInfo.Price = work.PotentialAction.ExpectsAcceptanceOf.Price
bookInfo.PriceCurrency = work.PotentialAction.ExpectsAcceptanceOf.PriceCurrency
}
return &bookInfo, nil
}
func WriteBookInfo(info *BookInfo, filename string) error {
lines := []string{
fmt.Sprintf("isbn=%s", info.Isbn),
"origPubDate=",
"origTitle=",
fmt.Sprintf("pubDate=%s", info.PublishedDate),
"scanDate=",
"scanPages=",
fmt.Sprintf("price=%s", info.Price),
}
return os.WriteFile(filename, []byte(strings.Join(lines, "\n")), 0777)
}