comparison data/build.luan @ 1:bd2abcd7190a

mostly done
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 20 Sep 2022 19:40:39 -0600
parents
children
comparison
equal deleted inserted replaced
0:6b17b5030868 1:bd2abcd7190a
1 local Luan = require "luan:Luan.luan"
2 local error = Luan.error
3 local ipairs = Luan.ipairs or error()
4 local type = Luan.type or error()
5 local stringify = Luan.stringify or error()
6 local Io = require "luan:Io.luan"
7 local uri = Io.uri or error()
8 local print = Io.print or error()
9 local String = require "luan:String.luan"
10 local starts_with = String.starts_with or error()
11 local Html = require "luan:Html.luan"
12 local html_parse = Html.parse or error()
13 local Table = require "luan:Table.luan"
14 local copy = Table.copy or error()
15
16 function Io.schemes.site(path)
17 return uri( "file:../src"..path )
18 end
19
20 local Db = require "site:/lib/Db.luan"
21
22 Db.delete_all()
23
24
25 local function get_user_htmls(html)
26 local rtn = {}
27 local n = #html
28 local i = 1
29 local el
30 while true do
31 while true do
32 if i > n then
33 return rtn
34 end
35 el = html[i]
36 if type(el)=="table" and el.type=="tag" and el.name=="div" and el.attributes.userid~=nil then
37 break
38 end
39 i = i + 1
40 end
41 local start = i
42 local nesting = 0
43 repeat
44 if type(el)=="table" and el.type=="tag" then
45 if el.name=="div" then
46 nesting = nesting + 1
47 elseif el.name=="/div" then
48 nesting = nesting - 1
49 end
50 end
51 i = i + 1
52 el = html[i]
53 until nesting==0
54 rtn[#rtn+1] = copy(html,start,i-1)
55 end
56 end
57
58 local function process_user_html(html)
59 --print(stringify(html[1]))
60 local user_id = html[1].attributes.userid or error()
61 if Db.count("user_id:"..user_id) > 0 then
62 return
63 end
64 local doc = {}
65 doc.user_id = user_id
66 for i, el in ipairs(html) do
67 if not (type(el)=="table" and el.type=="tag") then
68 continue
69 end
70 local name = el.name
71 local attributes = el.attributes
72 local class = attributes.class
73 if name=="span" and class=="organization" then
74 local user_name = html[i+1]
75 if type(user_name)=="table" and user_name.type=="tag" and user_name.name=="/span" then
76 user_name = ""
77 end
78 doc.user_name = user_name
79 elseif name=="a" and class~=nil and starts_with(class,"afftag ") then
80 doc.category = doc.category or {}
81 doc.category[#doc.category+1] = html[i+1]
82 elseif name=="section" and class=="description" then
83 doc.description = html[i+1]
84 elseif name=="a" and class=="aff-website" then
85 doc.websites = doc.websites or {}
86 doc.websites[#doc.websites+1] = attributes.href
87 end
88 end
89 Db.save(doc)
90 end
91
92 local pages_dir = uri "file:pages"
93
94 for _, dir in ipairs(pages_dir.children()) do
95 if starts_with( dir.name(), "." ) then
96 continue
97 end
98 --print(dir.name())
99 for _, file in ipairs(dir.children()) do
100 local text = file.read_text()
101 local html = html_parse(text)
102 local user_htmls = get_user_htmls(html)
103 print(file.name().." "..#user_htmls)
104 for _, user_html in ipairs(user_htmls) do
105 process_user_html(user_html)
106 end
107 --break
108 end
109 end