summaryrefslogtreecommitdiff
path: root/rskrf.lua
diff options
context:
space:
mode:
authorAleksei <email@email.email>2022-07-14 17:31:47 +0300
committerAleksei <email@email.email>2022-07-14 17:31:47 +0300
commit62d382f913bfdb5f9bf724b91d013e51202f09ef (patch)
treef5c9061d2810d8bcf12645591fe89670708a90ff /rskrf.lua
Diffstat (limited to 'rskrf.lua')
-rwxr-xr-xrskrf.lua132
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