-
Notifications
You must be signed in to change notification settings - Fork 0
/
structure.go
346 lines (300 loc) · 6.83 KB
/
structure.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
package amazon
import (
"encoding/xml"
"fmt"
"time"
)
// ItemSearchResponse represents itemSearchResponse
type ItemSearchResponse struct {
XMLName xml.Name `xml:"ItemSearchResponse"`
Items Items `xml:"Items"`
}
// Request represents request
type Request struct {
IsValid bool
Errors *Errors
}
// Items represents items
type Items struct {
Request Request
TotalResults int
TotalPages int
MoreSearchResultsURL string `xml:"MoreSearchResultsUrl"`
Item []Item
}
// Item represents item
type Item struct {
XMLName xml.Name `xml:"Item"`
ASIN string
DetailPageURL string
SalesRank int
ItemLinks ItemLinks
SmallImage Image
MediumImage Image
LargeImage Image
ImageSets ImageSets
ItemAttributes ItemAttributes
OfferSummary OfferSummary
Offers Offers
CustomerReviews CustomerReviews
SimilarProducts SimilarProducts
BrowseNodes BrowseNodes
}
// BrowseNodes represents BrowseNodes
type BrowseNodes struct {
BrowseNode []BrowseNode
Request Request
}
// BrowseNode represents BrowseNode
type BrowseNode struct {
ID string `xml:"BrowseNodeId"`
Name string
Ancestors BrowseNodes
Children BrowseNodes
TopSellers TopSellers
TopItemSet []TopItemSet
}
// ItemLinks represents ItemLinks
type ItemLinks struct {
ItemLink []ItemLink
}
// ItemLink represents ItemLink
type ItemLink struct {
Description string
URL string
}
// Image represents Image
type Image struct {
URL string
Height Size
Width Size
}
// Size represents Size
type Size struct {
Value int `xml:",chardata"`
Units string `xml:",attr"`
}
// ImageSets represents ImageSets
type ImageSets struct {
ImageSet []ImageSet
}
// ImageSet represents ImageSet
type ImageSet struct {
Category string `xml:",attr"`
SwatchImage Image
SmallImage Image
ThumbnailImage Image
TinyImage Image
MediumImage Image
LargeImage Image
}
// Date represents short form date with yyyy-mm-dd date format
type Date struct {
time.Time
}
// UnmarshalXML parse time
func (c *Date) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
var v string
d.DecodeElement(&v, &start)
for _, shortForm := range []string{
"2006-01-02",
"2006-01",
"2006/01/02",
"2006/01",
"2006",
} {
parse, err := time.Parse(shortForm, v)
if err == nil {
*c = Date{parse}
return nil
}
}
return fmt.Errorf("Invalid date %v", v)
}
// ItemAttributes represents ItemAttributes
type ItemAttributes struct {
Author []string
Artist string
Actor string
AspectRatio string
AudienceRating string
Binding string
Creator Creator
EAN string
EANList EANList
CatalogNumberList CatalogNumberList
Format []string
IsAdultProduct bool
ISBN string
Label string
Languages Languages
ListPrice Price
Manufacturer string
NumberOfPages int
PackageDimensions PackageDimensions
ProductGroup string
ProductTypeName string
PublicationDate *Date
PackageQuantity int
PartNumber string
UPC string
UPCList UPCList
Publisher string
Studio string
Title string
NumberOfDiscs []int
}
// Creator represents Creator
type Creator struct {
Role string `xml:",attr"`
Name string `xml:",chardata"`
}
// EANList represents EANList
type EANList struct {
Element []string `xml:"EANListElement"`
}
// Languages represents Languages
type Languages struct {
Language []Language
}
// Language represents Language
type Language struct {
Name string
Type string
AudioFormat string
}
// Price represents Price
type Price struct {
Amount string
CurrencyCode string
FormattedPrice string
}
// PackageDimensions represents PackageDimensions
type PackageDimensions struct {
Height Size
Length Size
Weight Size
Width Size
}
// OfferSummary represents OfferSummary
type OfferSummary struct {
LowestNewPrice Price
LowestUsedPrice Price
TotalNew int
TotalUsed int
TotalCollectible int
TotalRefurbished int
}
// Offers represents Offers
type Offers struct {
TotalOffers int
TotalOfferPages int
MoreOffersURL string `xml:"MoreOffersUrl"`
Offer []Offer
}
// Offer represents Offer
type Offer struct {
OfferAttributes OfferAttributes
OfferListing OfferListing
LoyaltyPoints LoyaltyPoints
Merchant Merchant
}
// Merchant represents Merchant
type Merchant struct {
Name string
}
// OfferAttributes represents OfferAttributes
type OfferAttributes struct {
Condition string
}
// OfferListing represents OfferListing
type OfferListing struct {
ID string `xml:"OfferListingId"`
Price Price
Availability string
AvailabilityAttributes AvailabilityAttributes
IsEligibleForSuperSaverShipping bool
IsEligibleForPrime bool
}
// AvailabilityAttributes represents AvailabilityAttributes
type AvailabilityAttributes struct {
AvailabilityType string
MinimumHours int
MaximumHours int
}
// LoyaltyPoints represents LoyaltyPoints
type LoyaltyPoints struct {
Points int
TypicalRedemptionValue Price
}
// CustomerReviews represents CustomerReviews
type CustomerReviews struct {
IFrameURL string
HasReviews bool
}
// SimilarProducts represents SimilarProducts
type SimilarProducts struct {
SimilarProduct []SimilarProduct
}
type asinTitle struct {
ASIN string
Title string
}
// SimilarProduct represents SimilarProduct
type SimilarProduct struct {
asinTitle
}
// TopSellers represents TopSellers
type TopSellers struct {
TopSeller []TopSeller
}
// TopSeller represents TopSelle
type TopSeller struct {
asinTitle
}
// NewReleases represents NewReleases
type NewReleases struct {
NewRelease []NewRelease
}
// NewRelease represents NewRelease
type NewRelease struct {
asinTitle
}
// SimilarViewedProducts represents SimilarViewedProducts
type SimilarViewedProducts struct {
SimilarViewedProduct []SimilarViewedProduct
}
// SimilarViewedProduct represents SimilarViewedProduct
type SimilarViewedProduct struct {
asinTitle
}
// TopItemSet represents TopItemSet
type TopItemSet struct {
Type string
TopItem []TopItem
}
// TopItem represents TopItem
type TopItem struct {
asinTitle
DetailPageURL string
ProductGroup string
Author string
}
// CatalogNumberList represents CatalogNumberList
type CatalogNumberList struct {
Element []string `xml:"CatalogNumberListElement"`
}
// UPCList represents UPCList
type UPCList struct {
Element []string `xml:"UPCListElement"`
}
// Errors represents Errors
type Errors struct {
XMLName xml.Name `xml:"Errors"`
ErrorNode []Error `xml:"Error"`
}
// Error represents Error
type Error struct {
Code string
Message string
}