Add Micro Center support (#2)
As a good start, only the "shippable items" are parsed. Next enhancement would be to configure local shops. Signed-off-by: Julien Riou <julien@riou.xyz>
This commit is contained in:
parent
5e19efbad8
commit
42f79c03d4
1 changed files with 41 additions and 0 deletions
41
parser.go
41
parser.go
|
@ -124,6 +124,8 @@ func createQuery(shopName string, url string) (string, error) {
|
||||||
return createQueryForLDLC(url), nil
|
return createQueryForLDLC(url), nil
|
||||||
case "materiel.net":
|
case "materiel.net":
|
||||||
return createQueryForMaterielNet(url), nil
|
return createQueryForMaterielNet(url), nil
|
||||||
|
case "microcenter.com":
|
||||||
|
return createQueryForMicroCenter(url), nil
|
||||||
case "mediamarkt.ch":
|
case "mediamarkt.ch":
|
||||||
return createQueryForMediamarktCh(url), nil
|
return createQueryForMediamarktCh(url), nil
|
||||||
case "topachat.com":
|
case "topachat.com":
|
||||||
|
@ -333,3 +335,42 @@ RETURN FLATTEN(results)
|
||||||
`
|
`
|
||||||
return q
|
return q
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createQueryForMicroCenter(url string) string {
|
||||||
|
q := `
|
||||||
|
LET first_page = '` + url + `'
|
||||||
|
LET doc = DOCUMENT(first_page, {driver: "cdp"})
|
||||||
|
LET base_url = 'https://www.microcenter.com'
|
||||||
|
|
||||||
|
LET next_pages = (
|
||||||
|
FOR a IN ELEMENTS(doc, "div .pagination .pages a")
|
||||||
|
RETURN base_url + a.attributes.href
|
||||||
|
)
|
||||||
|
|
||||||
|
LET pages = SORTED_UNIQUE(APPEND(next_pages, first_page))
|
||||||
|
|
||||||
|
LET results = (
|
||||||
|
FOR page IN pages
|
||||||
|
NAVIGATE(doc, page)
|
||||||
|
LET products = (
|
||||||
|
FOR el IN ELEMENTS(doc, "div .products .product_wrapper")
|
||||||
|
LET details = ELEMENT(el, "h2")
|
||||||
|
LET name = INNER_TEXT(details)
|
||||||
|
LET url = ELEMENT(details, "a").attributes.href
|
||||||
|
LET price = TO_FLOAT(ELEMENT(details, "a").attributes."data-price")
|
||||||
|
LET available = LENGTH(ELEMENTS(el, "div .price_wrapper form .STBTN"))>0
|
||||||
|
RETURN {
|
||||||
|
name: name,
|
||||||
|
url: base_url + url,
|
||||||
|
price: price,
|
||||||
|
price_currency: "USD",
|
||||||
|
available: available,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
RETURN products
|
||||||
|
)
|
||||||
|
|
||||||
|
RETURN FLATTEN(results)
|
||||||
|
`
|
||||||
|
return q
|
||||||
|
}
|
||||||
|
|
Reference in a new issue