Pavel
for h2_name in p_body:gmatch("<h2😠.-)</h2>") do
print(h2_name)
end
Pavel
круто. пашет
Pavel
а я правильно понял что в lua нет чтото вроде visualC++ чтобы брекпоинты. отладчик
mva
mva
для кого я мейнтейню luahtmlparser?
Pavel
парсер мне нужно чтобы из C++ кода разобрать определенную. страницу
Pavel
в скрипты унес чтобы можно было быстро подменять алгоритм если поменяется сайт
Pavel
luahtmlparser - я не знал про такой )
mva
:(
mva
шатает ваш луарокс там себе что-то, а я потом гадай как чинить
7
как отлаживате нативный код байдингов с++ обьектов для луа?
Pavel
у меня там особо нет отладки. я на С++ качаю html сырой и скидываю в lua - получаю результат в виде json
Pavel
для вызова lua использую https://github.com/jeremyong/Selene
Pavel
а https://github.com/msva/lua-htmlparser в один скрипт можно склеить?
Pavel
что-то вроде amalgamation
mva
разрешаю
Pavel
) запустил под виндой lua-htmlparser\doc>lua53.exe sample.lua
Pavel
chapters
lua53.exe: sample.lua:29: attempt to index a number value (local 'e')
stack traceback:
sample.lua:29: in main chunk
[C]: in ?
Pavel
выдал вот так
Pavel
счас попробу свой html ему скормить
Pavel
может действительно лучше всзять готовый парсер
Pavel
хм. круто все разобрал )
Pavel
о. поставил юбилейную 100 звезду на гитхабе
Pavel
@mva_name сможешь подсказать по строке https://github.com/msva/lua-htmlparser/blob/master/doc/sample.lua#L17
Pavel
она не выводит значение тэга h2
Pavel
в выходе вот так
Pavel
div id=[[index]]
h2
table width=[[100%]]
Pavel
хотя в html </script><div id="index"><h2>Топ торренты за последние 24 часа</h2><table width="100%"><tr class="back
Pavel
это где-то нужно подкрутить чтобы парсил h2 как-то ?
Pavel
я парсеру скормил вот этот html http://fast-bit.org/top
Pavel
дернул wget-ом и отдал как sample.html
Vsevolod
а что за вопрос?
Vsevolod
ну, я писал диссер и некоторое количество статей и презентаций в техе
Vsevolod
но "шарит" - это скользкий вопрос
Pavel
мелкий вопрос.
Pavel
elseif v:match("(.-)MGNT") then
local _tm = v:match("(.-)MGNT")
res = res..'"magnet" : "'.._tm..'"'
elseif v:match("(.-)GROUP_ID") then
local _th = v:match("(.-)GROUP_ID")
res = res..'"group_id" : "'.._th..'"'
Pavel
вот кусок кода - тут match два раза зовется в if и ниж. lua так-же вызовет это 2 раза или сможет оптимизнуть на лету?
Pavel
как принято такие конструкции писать в lua?
ㅤ
Два раза вызовет.
fgntfg
local tmp = v:match("хуёмаё"); if tmp
fgntfg
elseif local _th = v:match("хуёмаё") then
fgntfg
по идее должно работать, но у меня, как обычно, нет lua компе
Pavel
elseif local _th = v:match("хуёмаё") then - не пашет. lua53.exe: torrent-parser_2.lua:124: unexpected symbol near 'local'
fgntfg
значи объяви переменную раньше или возьми в скобки
Pavel
пробовал - тоже не пашет.
ShadoWalkeR
Коллеги, подкиньте пример написания прослойки, для работы Lua с so библиотекой
fgntfg
но если это не хайлоад, то разницы между 2мя вызовами и одним - никакой
Pavel
нагрузки там нет просто думал что есть сахар в языке чтобы красивее написать
Pavel
все считать вначале тоже не правильно - уменя таких блоков много. а сработает только один 0
Pavel
но наверно так и сделаю - с дублированием есть риск - в if поменял условие а ниже забыл.
Pavel
copy-paste зло в любом языке
fgntfg
А сделай таблицу, в качестве ключа - твой матч, в качестве занчения - значение матча
fgntfg
for k,v in pairs(thiscrap) do v=match(k) end
fgntfg
или как-то так
ShadoWalkeR
А может сделать так: local _th = v:match("(.-)(GROUP_ID|MGNT)") if _th then
fgntfg
а там от _th зависит всякая логика
ShadoWalkeR
Ну так в нее же и сохраняется что найдено
ShadoWalkeR
Там же наверняка цепочка ifelse на тему "Если найдено то сохранить в перменную еще раз поиск регэкспа и дальше в res подставить"
fgntfg
оставим это автору
ShadoWalkeR
А теперь ответьте на мой вопрос 😃
Pavel
да. у меня цепочка.
fgntfg
повезло что снус спит/ест
fgntfg
он бы объяснил что мы все не правы
Pavel
мой кусок говно-кода выглядит так: https://pastebin.com/62z6Mju7
ShadoWalkeR
Если программист, столкнувшись с проблемой, думает что решит её при помощи регулярок, то он получит 2 проблемы.
ShadoWalkeR
А если с помощью параллельного программирования, то 10 😃
fgntfg
а зачем тебе матчить вообще? gsub во все поля
fgntfg
тебе, по идее, хватит сматчить что строка подходит под шаблон и дёрнуть из неё нужные подстроки
fgntfg
а дальше всё без условно перехреначивать
Pavel
ну ког не совсем мой... я его просто немного правлю
fgntfg
придумай свой :)
fgntfg
часто это проще, чем чужое ковырять
ShadoWalkeR
ShadoWalkeR
Главное понять что надо сделать и как лучше это сделать
Pavel
я в lua очень плохо разбираюсь - недавно только его стал использовать.
Dmitry
Всех с наступающим http://img0.liveinternet.ru/images/attach/c/4/82/270/82270182_large_yerotika72786.jpg
Snusmumriken
elseif v:match("(.-)MGNT") then
local _tm = v:match("(.-)MGNT")
res = res..'"magnet" : "'.._tm..'"'
elseif v:match("(.-)GROUP_ID") then
local _th = v:match("(.-)GROUP_ID")
res = res..'"group_id" : "'.._th..'"'
Я бы цеплялся за что-то другое, вида:
-- регулярка '(bla-13:asd!) (bla_BLAH) ... any_sym'
local subj, mode = v:match'(%S+)%s([%w_]+)'
if mode == 'GROUP_ID' then subj = .. end
...
А если совсем красиво:
local mode_switch = {}
function mode_switch['GROUP_ID'](subj, full_data)
return subj..full_data..'bla-bla'
end
function mode_switch['MGNT'](subj, full_data)
return subj..full_data..'bla-bla-bla'
end
local subj, mode = v:match'(%S+)%s([%w_]+)'
if mode_switch[mode] then
mode_switch[mode](subj, v)
end
Подходит для хайлоада и просто добавлять новые реакции.
Если не получается цепляться - то же самое, только:
for key, func in pairs(mode_switch) do
local _tm = v:match('(.-)'..key)
if _tm then res = func(v); break end
end
Но это тебе уже давали, и это не настолько хорошо для хайлоада: многократные вызовы поиска, плодение кучи строк и т.п.
Pavel
@Snusmumriken спасибо. у меня нет большой нагрузки. на вход подаетс 250кб html и это работает на клиентской машине
Snusmumriken
Нормась, хватай какой-нибудь из вариантов, это просто самое рациональное, чтобы не плодить безумие с if-else.