Wonderboy
Новичок
Репутация: +0/-1
Offline
Сообщений: 27
|
|
« : 04 января 2008, 12:17:58 » |
|
Собственно вышла уже новая версия НС, а на форуме затишье по этому поводу. Я понимаю, что программеры и так все поймут, но может кто-нибудь снизойдет к обыкновенным юзерам и накропает пару примеров на Lua? Конкретно, интересует обработка заголовков рисунков для автоматической фильтрации баннеров по размерам. Возможно, есть и еще какие-то полезные методы, но больше ничего не приходит в голову. - Полное описание структуры расширений HandyCache, их глобальных переменных и функций находится в файле HCExtensions.html из свежего комплекта HC. - О синтаксисе языка Lua можно почитать на сайте: http://www.lua.ru/doc/
|
|
|
|
|
alex208210
|
|
« Ответ #1 : 28 мая 2009, 12:51:58 » |
|
нарпимер имеется такой скрипт: function GetRelPath(s) _,_,x = string.find(s, "^http://[^/]+/(.*)") x,_ = string.gsub(x, "/", "\\") return x end
function main() hc_answer_header= 'HTTP/1.1 200 OK\r\n'.. 'Server: HandyCache\r\n'.. 'Content-Type: text/html\r\n'.. 'Pragma: no-cache\r\n'.. 'Cache-control: no-cache, must-revalidate, no-store\r\n'.. 'Connection: close\r\n\r\n'
catalog = "C:\\Downloads\\" rel_path = GetRelPath(hc_url) hc_answer_body = "file="..catalog..rel_path end
как будет выглядеть текст расширения?
|
|
|
|
|
4e4ako
Пользователь
Репутация: +3/-0
Offline
Сообщений: 68
|
|
« Ответ #2 : 28 мая 2009, 13:14:57 » |
|
очень хорошая справка по расширениям - HC\Extensions\HCExtensions.html
|
|
|
|
|
mai62
|
|
« Ответ #3 : 28 мая 2009, 14:39:52 » |
|
как будет выглядеть текст расширения? Как-то так: --[[ <HCExtension> @name Example @author alex208210 @version 0.01 @description Проба @event RequestHeaderReceived/request </HCExtension> ]]
function GetRelPath(s) _,_,x = string.find(s, "^http://[^/]+/(.*)") x,_ = string.gsub(x, "/", "\\") return x end
function request() hc.answer_header= 'HTTP/1.1 200 OK\r\n'.. 'Server: HandyCache\r\n'.. 'Content-Type: text/html\r\n'.. 'Pragma: no-cache\r\n'.. 'Cache-control: no-cache, must-revalidate, no-store\r\n'.. 'Connection: close\r\n\r\n'
catalog = "C:\\Downloads\\" rel_path = GetRelPath(hc.url) hc.answer_body = "file="..catalog..rel_path end
|
|
|
|
|
alex208210
|
|
« Ответ #4 : 28 мая 2009, 16:11:08 » |
|
раньше для lua в luar.lst прописывалось +stat.local/ <script=lua\_send_my_response.lua> таким образом скрипт работал только при запросе http://stat.localкак это сделать для расширения?
|
|
|
|
|
mai62
|
|
« Ответ #5 : 28 мая 2009, 16:18:43 » |
|
В заголовок добавь строку @rule http://stat\.local
|
|
|
|
|
alex208210
|
|
« Ответ #6 : 28 мая 2009, 16:20:20 » |
|
спасибо.. все работает
|
|
|
|
|
Влад22
Пользователь
Репутация: +2/-9
Offline
Сообщений: 97
|
|
« Ответ #7 : 28 мая 2009, 20:00:33 » |
|
В связи с появлением новой версии не поможете переделать скрипт? function GetContentLength(s) _,_,x= string.find(s, "[cC]ontent%-[lL]ength: (%d*)") if x==nil then return 0 else return tonumber(x) end end
function main() x= GetContentLength(hc_header) if x>999 then os.execute([["d:\Program\HandyCache\lua\invmp3.exe d:\Program\HandyCache\lua\beep.mp3"]]) end end
|
|
|
|
|
Влад22
Пользователь
Репутация: +2/-9
Offline
Сообщений: 97
|
|
« Ответ #8 : 28 мая 2009, 20:51:44 » |
|
Огромное спасибо!!! Да еще такая оперативность!!!
|
|
|
|
|
mai62
|
|
« Ответ #9 : 28 мая 2009, 20:53:29 » |
|
Влад22--[[ <HCExtension> @name Beeper @author ____ @version 0.02 @description ____ @event AnswerHeaderReceived/answer </HCExtension> ]]
function GetContentLength(s) _,_,x= string.find(s, "[cC]ontent%-[lL]ength: (%d*)") if x==nil then return 0 else return tonumber(x) end end
function answer() x= GetContentLength(hc.answer_header) if x>999 then os.execute([["d:\Program\HandyCache\lua\invmp3.exe d:\Program\HandyCache\lua\beep.mp3"]]) end end
|
|
|
|
|
Влад22
Пользователь
Репутация: +2/-9
Offline
Сообщений: 97
|
|
« Ответ #10 : 28 мая 2009, 21:48:39 » |
|
Спасибо. работает. Попробовал заменить os.execute([["d:\Program\HandyCache\lua\invmp3.exe d:\Program\HandyCache\lua\beep.mp3"]]) на hc.shell_execute('d:\Program\HandyCache\Extensions\invmp3.exe', 'd:\Program\HandyCache\Extensions\beep.mp3', nil, 'SW_SHOW') что бы окошко не выскакивало - не работает совсем. Не то, что бы для меня это очень критично - но хотелось бы разобраться где тут собака зарыта, что я не так делаю?
|
|
|
|
|
mai62
|
|
« Ответ #11 : 28 мая 2009, 22:02:33 » |
|
Попробуй заменить \ на \\ Lua съедает одиночные символы \
|
|
|
|
|
hc_user
Гость
|
|
« Ответ #12 : 29 мая 2009, 07:00:10 » |
|
помогите с таким скриптом... очень нужно... function main()
if hc_user_name == 'user_name' and hc_user_from_internet > 26214400 then hc_action = 'only_from_cache' end
end
|
|
|
|
|
mai62
|
|
« Ответ #13 : 29 мая 2009, 10:45:12 » |
|
Dan ClaimantПокажи свое расширение, я же не знаю, что у тебя получилось. hc_user--[[ <HCExtension> @name For_hc_user @author ___ @version 0.01 @description Блокирует пользователя при переборе трафика @event RequestHeaderReceived/request </HCExtension> ]] function request()
if hc.user_name == 'user_name' and hc.user_from_internet > 26214400 then hc.action = 'only_from_cache' end
end
|
|
|
|
|
hc_user
Гость
|
|
« Ответ #14 : 29 мая 2009, 12:02:51 » |
|
mai62, спасибо
|
|
|
|
|
divinets
Пользователь
Репутация: +1/-0
Offline
Сообщений: 59
|
|
« Ответ #15 : 29 мая 2009, 12:48:59 » |
|
Помогите пожалуйста со скриптом вызываемым из луа.лст следующим образом: !divinets.ru #.* <script=lua\block_long_file_by_time.lua> <new_block> --***************************************************************** -- Скрипт для HandyCache v 1.00 RC1 (1.0.0.11) и выше -- Автор: DenZzz -- Назначение: Блокировать загрузку больших файлов в зависимости -- от системного времени --*****************************************************************
function GetContentLength(s) _,_,x = string.find(s, "[cC]ontent%-[lL]ength: *(%d+)") if x==nil then return -1 else return tonumber(x) end end
function main() -- Узнаем текущее системное время time = os.date("*t")
if time.hour >= 18 then -- забираем размер файла из заголовка "Content-Length" len = GetContentLength(hc_header) -- если размер файла есть в заголовке и он больше 512 KБайт if len > 1048576 then -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку if hc_action=="" or hc_action==nil or hc_action=="save" then hc_action = "stop" end end end
if time.hour >= 0 and time.hour < 3 then -- забираем размер файла из заголовка "Content-Length" len = GetContentLength(hc_header) -- если размер файла есть в заголовке и он больше 10 МБайт if len > 52428800 then -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку if hc_action=="" or hc_action==nil or hc_action=="save" then hc_action = "stop" end end end
if time.hour >= 3 and time.hour < 6 then -- забираем размер файла из заголовка "Content-Length" len = GetContentLength(hc_header) -- если размер файла есть в заголовке и он больше 10 МБайт if len > 252428800 then -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку if hc_action=="" or hc_action==nil or hc_action=="save" then hc_action = "stop" end end end if time.hour >= 6 and time.hour < 20 then -- забираем размер файла из заголовка "Content-Length" len = GetContentLength(hc_header) -- если размер файла есть в заголовке и он больше 10 МБайт if len > 8388608 then -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку if hc_action=="" or hc_action==nil or hc_action=="save" then hc_action = "stop" end end end
end
|
|
|
|
|
Dan Claimant
Новичок
Репутация: +0/-0
Offline
Сообщений: 16
|
|
« Ответ #16 : 29 мая 2009, 12:50:51 » |
|
mai62, раньше у меня работаловсе (то есть обрезало все))) через "управление загрузкой" - script://lua/request и script://lua/answer и luaR.lst и lua.lst у меня были вида такого: ; Файл-список скриптов LUA для обработки заголовков запросов клиентов ;--------------------------------------------------------------------
#. <script=lua\_dont_update_image_by_type_in_cache.lua>
# !#\b(imageshack\.us|photofile\.ru|radikal\.ru)/ #. <script=lua\_block_external_links.lua>
и ; Файл-список скриптов LUA для обработки заголовков ответов серверов ;-------------------------------------------------------------------
#. <script=lua\save_or_block_403_and_404.lua> #/favicon\.ico$ <script=lua\save_404.lua> #. <script=lua\dont_update_image_by_type.lua> #. <script=lua\dont_update_file_by_size.lua> ;#. <script=lua\block_long_file.lua>
может быть стоит ещё добавить какой-нить скрипт к _dont_update_image_by_type_in_cache.lua?
|
|
|
|
|
mai62
|
|
« Ответ #17 : 29 мая 2009, 13:10:02 » |
|
Dan ClaimantСтроку url_host = GetHost(hc_url) нужно заменить на url_host = GetHost(hc.url) (моя недоработка в сообщении #9) После строки hc.action = "stop" предлагаю добавить строку hc.monitor_string = hc.monitor_string.."BlockExternal " Тогда заблокированные запросы будут видны в мониторе в колонке Правила. Как исправишь файл расширения в НС не забудь нажать кнопку Перечитать расширение. Добавлено: 29 Мая 2009, 12:59:08
divinetsПробуй --[[ <HCExtension> @name BlockLongFiles @author DenZzz @version 0.02 @description Блокировать загрузку больших файлов в зависимости от системного времени @exception divinets.ru @event AnswerHeaderReceived/answer </HCExtension> ]]
function GetContentLength(s) _,_,x = string.find(s, "[cC]ontent%-[lL]ength: *(%d+)") if x==nil then return -1 else return tonumber(x) end end
function answer() -- Узнаем текущее системное время time = os.date("*t")
if time.hour >= 18 then -- забираем размер файла из заголовка "Content-Length" len = GetContentLength(hc.answer_header) -- если размер файла есть в заголовке и он больше 512 KБайт if len > 1048576 then -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку if hc.action=="" or hc.action==nil or hc.action=="save" then hc.action = "stop" end end end
if time.hour >= 0 and time.hour < 3 then -- забираем размер файла из заголовка "Content-Length" len = GetContentLength(hc.answer_header) -- если размер файла есть в заголовке и он больше 10 МБайт if len > 52428800 then -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку if hc.action=="" or hc.action==nil or hc.action=="save" then hc.action = "stop" end end end
if time.hour >= 3 and time.hour < 6 then -- забираем размер файла из заголовка "Content-Length" len = GetContentLength(hc.answer_header) -- если размер файла есть в заголовке и он больше 10 МБайт if len > 252428800 then -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку if hc.action=="" or hc.action==nil or hc.action=="save" then hc.action = "stop" end end end if time.hour >= 6 and time.hour < 20 then -- забираем размер файла из заголовка "Content-Length" len = GetContentLength(hc.answer_header) -- если размер файла есть в заголовке и он больше 10 МБайт if len > 8388608 then -- и действие HC еще не присвоено или присвоено "Сохранять", то блокировать загрузку if hc.action=="" or hc.action==nil or hc.action=="save" then hc.action = "stop" end end end
end
|
|
|
|
|
Dan Claimant
Новичок
Репутация: +0/-0
Offline
Сообщений: 16
|
|
« Ответ #18 : 29 мая 2009, 13:35:24 » |
|
mai62, теперь всё работает отлично большое спасибо... осталось теперь понять, куда вписывать исключения, чтобы адреса некоторых сайтов проходили мимо скрипта... Пы.Сы. за авотматическую очистку кэша - отдельный РЕСПЕКТ - очень удобно
|
|
|
|
|
mai62
|
|
« Ответ #19 : 29 мая 2009, 13:55:41 » |
|
Про исключения. В заголовок расширения добавляешь строку вида @exception regex regex - регулярное выражение, оно работает с полным (вместе с http://) входным URL. Таких строк в заголовке может быть много.
|
|
|
|
|
|