summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/serve.fnl4
-rw-r--r--parser/artoftea.fnl7
-rw-r--r--parser/parser.fnl11
3 files changed, 14 insertions, 8 deletions
diff --git a/bin/serve.fnl b/bin/serve.fnl
index c22becb..b498ece 100644
--- a/bin/serve.fnl
+++ b/bin/serve.fnl
@@ -504,6 +504,7 @@
texts.meta-title
(.. form.query " | " texts.meta-title)))
(local canonical-url (str.trim (.. "https://everytea.ru" path) "/"))
+
[:html {:lang "ru-RU"}
[:head {}
[:meta {:charset "utf-8"}]
@@ -627,4 +628,5 @@
(must (luna.router.route "GET /robots.txt" robots-handler))
(must (luna.router.static "GET /static/" "static/"))
-(must (luna.repl (fn [code] (fennel.eval code {:env _G}))))
+(when luna.debug
+ (must (luna.evalfn (fn [code] (fennel.eval code {:env _G})))))
diff --git a/parser/artoftea.fnl b/parser/artoftea.fnl
index 773f038..5c7efff 100644
--- a/parser/artoftea.fnl
+++ b/parser/artoftea.fnl
@@ -26,8 +26,7 @@
(*
(parser.anywhere
(parser.tag :option {:value "*" :selected "selected"}
- (* (peg.Cg parser.pegs.number :weight) (+ (peg.P "г") " гр")
- parser.pegs.spaces)))
+ (peg.Cg (parser.till "</option>") :weight)))
(parser.anywhere
(parser.tag :p {:class "price"}
(parser.tag :span {:id "*"}
@@ -41,8 +40,10 @@
(fn normalize [product]
(local year (parser.guess-year product.title))
- (local weight (number.string->number product.weight))
+ (local weight (or (parser.guess-weight product.weight ["г"])
+ (parser.guess-weight product.title)))
(local price (number.string->number product.price))
+
{:site "artoftea"
:title product.title
:url product.url
diff --git a/parser/parser.fnl b/parser/parser.fnl
index 78df882..e97351f 100644
--- a/parser/parser.fnl
+++ b/parser/parser.fnl
@@ -137,14 +137,17 @@
(- (+ (peg.P "г") "год") (peg.P "гр"))))
:match text)))
-(fn guess-weight [text]
+(fn guess-weight [text extra-metrics]
(if text
(let [peg (peg.Ct
(anywhere
(* (peg.C pegs.number)
(maybe " ")
- (+ (* (peg.C (+ (peg.P "гр") "кг"))
- (+ (peg.P " ") "." "\n" -1))))))]
+ (+ (* (peg.C (+ (peg.P "гр") "кг"
+ (if extra-metrics
+ (table.unpack extra-metrics)
+ "")))
+ (+ (peg.P " ") "\t" "." "\n" -1))))))]
(let [result (peg:match text)]
(if result
(let [[number metric] result]
@@ -159,7 +162,7 @@
(* (peg.C pegs.number)
(maybe " ")
(+ (* (peg.C (+ (peg.P "мл") "л"))
- (+ (peg.P " ") "." "\n" -1))))))]
+ (+ (peg.P " ") "\t" "." "\n" -1))))))]
(let [result (peg:match text)]
(if result
(let [[number metric] result]