diff options
| -rw-r--r-- | bin/serve.fnl | 4 | ||||
| -rw-r--r-- | parser/artoftea.fnl | 7 | ||||
| -rw-r--r-- | parser/parser.fnl | 11 |
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] |
