diff options
author | Aleksei <email@email.email> | 2022-07-14 17:31:47 +0300 |
---|---|---|
committer | Aleksei <email@email.email> | 2022-07-14 17:31:47 +0300 |
commit | 62d382f913bfdb5f9bf724b91d013e51202f09ef (patch) | |
tree | f5c9061d2810d8bcf12645591fe89670708a90ff /rskrf.lua |
Diffstat (limited to 'rskrf.lua')
-rwxr-xr-x | rskrf.lua | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/rskrf.lua b/rskrf.lua new file mode 100755 index 0000000..e0ec180 --- /dev/null +++ b/rskrf.lua @@ -0,0 +1,132 @@ +#!/usr/bin/env lua +--rskrf.lua +--Copyright (C) 2020-2021 Aleksei Kovura + +--This program is free software: you can redistribute it and/or modify +--it under the terms of the GNU General Public License as published by +--the Free Software Foundation, either version 3 of the License, or +--(at your option) any later version. + +--This program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU General Public License for more details. + +--You should have received a copy of the GNU General Public License +--along with this program. If not, see <https://www.gnu.org/licenses/>. +local gumbo = require 'gumbo' +local inspect = require 'inspect' +local binser = require 'binser' +local http_request = require 'http.request' +trim = require 'string.trim' +json = require 'dkjson'.use_lpeg() + +function url_to_tbl(url) + headers, stream = assert(http_request.new_from_uri(url):go()) + response = assert(stream:get_body_as_string(), 'Can\'t fetch') + if headers:get ':status' ~= '200' then + error(response) + end + local out, pos, err = json.decode(response) + if err then + print ("Error:", err) + else + return out.response + end +end +--Бакалея(32)/Рис круглозерный(5107)/Fine Life Крупа рисовая. рис шлифованный. +--первый сорт(3439343) = 5 +-- hardcoded stuff +cats_block = {"Техника", "Обувь и аксессуары", "Одежда", "Цифровые продукты", + "Товары для детей"} +for _, cat in ipairs(cats_block) do + cats_block[cat]=1 +end +--cats_block = {["Техника"] = 1, ["Обувь и аксессуары"] = 1, ["Одежда"] = 1, ["Цифровые продукты"] = 1, ["Товары для детей"] = 1} +subcats_block = {"Алкогольные", "Колбасные изделия", "Кондитерские изделия", + "Рыба и морепродукты", "Соусы", "Овощи, фрукты", "Косметика", "Консервы"} +for _, subcat in ipairs(subcats_block) do + subcats_block[subcat]=1 +end +prod_groups_allow = {"Мед", "Гречневая крупа", "Ряженка", "Хлеб Бородинский", + "Кефир", "Творог 9% жирности", "Сыр Тильзитер", "Сметана", "Хлеб Дарницкий", + "Масло сливочное 82,5% жирности", "Масса творожная", "Куриные яйца", "Квас", + "Сыр «Российский»", "Креветки", "Филе цыпленка бройлера", "Молоко", + "Куры бройлеры", "Минтай мороженый обезглавленный", "Филе минтая", + "Лососи соленые в ломтиках", "Пресервы из сельди в масле", "Презервативы", + "Нерафинированное подсолнечное масло", "Рафинированное подсолнечное масло", + "Стиральные порошки", "Хлеб Дарницкий" } +for _, pg in ipairs(prod_groups_allow) do + prod_groups_allow[pg]=1 +end +-- /hardcoded stuff +groceries_ids = {} -- Продукты питания +burl = 'https://rskrf.ru/rest/1' +categories_raw = url_to_tbl(burl..'/catalog/categories/') +categories = {} +for c = 1,#categories_raw do + cat = categories_raw[c] + if not cats_block[cat.title] then + categories[cat.title] = cat.id + end +end +print('categories:\n'..inspect(categories)) +subcats = {} +for _, c_id in pairs(categories) do + subcats_raw = url_to_tbl(burl..'/catalog/categories/'..c_id) + for s = 1,#subcats_raw do + subcat = subcats_raw[s] + if not subcats_block[subcat.title] then + subcats[subcat.title] = subcat.id + end + end +end +print('subcats:\n'..inspect(subcats)) +prod_groups = {} +for _, subcat_id in pairs(subcats) do + prod_groups_raw = url_to_tbl(burl..'/catalog/categories/'..subcat_id.. + '/productGroups/').productGroups + for pg = 1,#prod_groups_raw do + prod_group = prod_groups_raw[pg] + pg_title = trim(prod_group.title) + if prod_groups_allow[pg_title] then + --if 1==1 then + prod_groups[pg_title] = {} + prod_groups[pg_title]['id'] = prod_group.id + end + end +end +print('prod_groups:\n'..inspect(prod_groups)) +for pg_title, pg in pairs(prod_groups) do + products_raw=url_to_tbl(burl..'/catalog/products/'..pg.id).products + for p = 1,#products_raw do + product=products_raw[p] + if product.total_rating > 4.5 then + --prod_groups[pg_title][product.title] = {} + manuf = string.format('%q', product.manufacturer) + prod_groups[pg_title][manuf] = {} + prod_groups[pg_title][manuf]['rating'] = product.total_rating + prod_groups[pg_title][manuf]['thumbnail'] = product.thumbnail + prod_groups[pg_title][manuf]['id'] = product.id + end + end +end +print('prod_groups:\n'..inspect(prod_groups)) + --prod_groups[ + --print('productGroup.title='..productGroup.title..','.. + --'product.title= '..product.title..','.. + --'product.id= '..product.id..','.. + --'product.manufacturer='.. + --string.format('%q', product.manufacturer)) + --if product.manufacturer==nil then + --print('product.manufacturer='..'nil') + --else + --print('product.manufacturer='..string.format('%q', product.manufacturer)) + --end + --product.total_rating) +if not io.open(rskrf.dat, r) then + print('file rskrf.dat doesn\'t exist, initializing') + io.open(rskrf.dat, 'wb'):close() + binser.writeFile(rskrf.dat, tbl) + os.exit() +end |