HandyCache - Instalación paralelo a Mikrotik (14/05/2015)

Publicado por JVProducciones, Septiembre 19, 2014, 03:44:53 PM

Tema anterior - Siguiente tema

robertjs

Cita de: JVProducciones en Julio 30, 2015, 06:43:14 PM
Que bueno que compartas tu experiencia, seria bueno que tambien compartas la forma y lo nuevo que encuentras.......ya que así podemos mejorar al sistema...saludos

claro que si, apenas tenga un poco mas de resultados compartire con un video .. y de como hacerlo..




tonyvzla

Cita de: damian007 en Julio 31, 2015, 08:34:33 AM
https://www.youtube.com/watch?v=cXsF2dXaBFc

Pareciera que dijera Joen Maguiña como uestro gran creador de este foro, ojal se convierta en uno de el porque se aplica y nos diera aportazos a este proyecto, animate Bernardo  ;D ;D
En ayuda de los mas desprotegidos

JVProducciones

He visto en el vídeo el código de la extension.... Está bastante complejo.....intente transcribirlo pero no se aprecia parte del código.... A esperar nomas!!! Saludos

Enviado desde mi SM-E700M mediante Tapatalk


jamo

Gracias por tus respuestas. Pero se pude tener dos estenciones de youtube al mismo tiempo habilitadas ?? or ejemplo la de "youtube cache Flash y HTLM5 360p (14/042015)" y la de "youtube cache Flash x titulos" ???

y que trabajen las dos correctamente,, te pregunto por que he observado que el en la mayoria d equipos los reproduce de forma automatica en HTML5 y trabaja bien con esta extension "youtube cache Flash y HTLM5 360p (14/042015)" pero tambien hay bastantes equipos que por alguna razon solo los reproducen en formato FLASH y esa extension no los almacena.

Pero por el contrario esta extension "youtube cache Flash x titulos"  los almacena de manera correcta,,,, y tambien almacena los que los reproduce en HTML5 pero no hacen HIT.

Por eso la pregunta si se puede tener los dos al mismo tiempo.  Ya realice unas pruebas pero al activar los dos solo me estan almacenando con esta extension "youtube cache Flash x titulos" , y como comentaba con esta solo hace HIT en los que se realizo la peticion desde el navegador en formato FLASH .


Saludos y gracias

JVProducciones

Cita de: jamo en Agosto 01, 2015, 12:49:20 PM
Gracias por tus respuestas. Pero se pude tener dos estenciones de youtube al mismo tiempo habilitadas ?? or ejemplo la de "youtube cache Flash y HTLM5 360p (14/042015)" y la de "youtube cache Flash x titulos" ???

y que trabajen las dos correctamente,, te pregunto por que he observado que el en la mayoria d equipos los reproduce de forma automatica en HTML5 y trabaja bien con esta extension "youtube cache Flash y HTLM5 360p (14/042015)" pero tambien hay bastantes equipos que por alguna razon solo los reproducen en formato FLASH y esa extension no los almacena.

Pero por el contrario esta extension "youtube cache Flash x titulos"  los almacena de manera correcta,,,, y tambien almacena los que los reproduce en HTML5 pero no hacen HIT.

Por eso la pregunta si se puede tener los dos al mismo tiempo.  Ya realice unas pruebas pero al activar los dos solo me estan almacenando con esta extension "youtube cache Flash x titulos" , y como comentaba con esta solo hace HIT en los que se realizo la peticion desde el navegador en formato FLASH .


Saludos y gracias
No.... No es posible......

Enviado desde mi SM-E700M mediante Tapatalk


robertjs

por aca lo dejo el codigo :)
Código (cpp) [Seleccionar]

--[[ <HCExtension>
@name      Youtube Saver (HTTPS,HTML5,SINGLE,TITLE)
@author Komunitas Handycache Indonesia / Modified by euverve/thatskie84 @ www.HandyCache-Resources.com
@version    0.0.1.2
@rule youtube\.com/(watch\?|((get|api)\_video\_info|embed|v/))
@rule googlevideo\.com/(videoplayback|crossdomain\.xml)
@rule youtube\.com:443
@rule googlevideo\.com/videogoodput
@exception watch_fragments_ajax
@event      BeforeAnswerBodySend/GetVideoName
@event      RequestHeaderReceived/Request
@event      AnswerHeaderReceived/AnswerResponse
@event      URLToFileNameConverting/ConvertFilename
@event BeforeViewInMonitor/HideView
@event      Init/init
</HCExtension> ]]

function init()
    hc.put_msg(30, 'Youtube Saver \n(HTTPS,HTML5,SINGLE,TITLE)')

-- Create root directory
local path2 = hc.cache_path ..'youtube.com\\singles-full\\'
hc.prepare_path(path2)

end

-- Get Referrer.
function GetReferrer(s)
_,_,x = string.find(s, '[rR]eferer:(.*?)')
if x==nil then return -1 else return x end
end

-- Get remote file size.
function GetContentLength(s)
_,_,x = string.find(s, '[cC]ontent%-[lL]ength: *(%d+)')
if x==nil then return -1 else return tonumber(x) end
end

-- Get request status code.
function GetAnswerCode(s)
  _,_,x = string.find(s,'HTTP/1%.%d +(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end

-- Modify UserAgent
function Request()
--Get video id
if re.match(hc.url, [[youtube.com]])  then
if re.match(hc.url, [[v=(.{11})]])  then
local referer_host = re.find(hc.url, [[v=(.{11})]],1)
if referer_host then
hc.set_global (hc.user_ip..'_yvid', referer_host)
hc.set_global (hc.user_ip..'_yvURL', hc.url)
end
elseif re.match(hc.url, [[embed/(.{11})]]) then
local referer_host = re.find(hc.url, [[embed/(.{11})]],1)
if referer_host then
hc.set_global (hc.user_ip..'_yvid', referer_host)
end
end
end

-- GoogleBot is played in HTML5 player
if not re.match(hc.url, [[googlevideo\.com]])  then
local IsFlash = false
if IsFlash then
hc.request_header = re.replace(hc.request_header, [[^User\-Agent:.*?\r\n]], 'User-Agent: Mozilla/5.0 (Windows x86; rv:19.0) Gecko/20100101 Firefox/19.0')
else -- HTML5 / HTTP
--hc.request_header = re.replace(hc.request_header, [[^User\-Agent:.*?\r\n]], 'User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)')
hc.request_header = re.replace(hc.request_header, [[^User\-Agent:.*?\r\n]], 'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0')
end
end

-- Block navigation
local spf = re.find(hc.url, [[^.*youtube\.com/(.*)(spf=navigate|user_watch|watch_fragments_ajax|share_ajax)]])
if spf then
hc.action = 'stop'
end

end

function GetVideoName()
   if re.match(hc.url, [[.*youtube\.com\/watch]]) then
   
hc.update_url_info(hc.url)
local title = re.find(hc.url, [[v=.{11}]])
local title2 = re.replace(title, [[(v=)(.{11})]], [[\2]])
local x = re.match(hc.answer_body, [[<meta name="title" content="([^\n]*)">]])
local path = hc.cache_path ..'youtube.com\\temp\\'
--Write file
if x then
local i = re.substr(1)
local i = re.replace(i, [[([\\\/\:\*\?\!\"\<\>\|])]], '', true)
hc.prepare_path(path)   
local clr = io.open(path..title, "w")
clr:write(cleanTitle(i))
clr:close()
end

--Insert video id in url
hc.set_global (hc.user_ip..'_yvid', title2)
local SingleFile = true
if SingleFile then
if re.find(hc.url, [[^.*youtube\.com/watch\?.*]]) then
hc.answer_body = string.gsub(hc.answer_body, '"fmt_list"', '"dash":"0","vq":"tiny","fmt_list"')
end
if re.find(hc.url, [[^.*youtube\.com/((get|api)\_video\_info|embed|v/).*]]) then
hc.answer_body = string.gsub(hc.answer_body, '&eventid=', '&dash=0&vq=tiny&eventid=')
end
end
--Read file / Get Title
local idv = io.open(path..title, "r")   
local vTitle = idv:read('*a')
hc.monitor_string = hc.monitor_string..', YT-Title: '..cleanTitle(vTitle)
idv:close()
elseif re.match(hc.url, [[/embed/]]) then
--Active range
local vidID = hc.get_global(hc.user_ip..'_yvid')
hc.set_global (hc.user_ip..'_yvid_type', 'v='..vidID..'|EMBED')
end
end

function ConvertFilename()   
    if re.match(hc.url, [[^.*/videoplayback\?.*]]) then
local vidID = hc.get_global(hc.user_ip..'_yvid')
if vidID then
local itag = re.find(hc.url, [[itag=[^&]+]])
itag = re.replace(itag, [[itag=]], [[itag_]])
local path = hc.cache_path ..'youtube.com\\temp\\'
local idv = io.open(path..'v='..vidID, "r")   
local idv2 = idv:read('*a')

local path2 = hc.cache_path ..'youtube.com\\singles-full\\'
hc.prepare_path(path2)

if itag then
cache_file_iditag = path2..itag..'_'..vidID..'_'..idv2..'.mp4'
hc.preform_cache_file_name(cache_file_iditag)
hc.monitor_string = hc.monitor_string..', , Single'
end
idv:close()
end

local vidTYPE = hc.get_global(hc.user_ip..'_yvid_type')
if re.match(vidTYPE, [[EMBED]]) then
local newvidID = re.find(vidTYPE, [[v=(.{11})]],1)
-- Range or chunks
if re.match(hc.url, [[range=([a-zA-Z0-9-_]+)]]) then
local range = re.find(hc.url, [[(&|\?)range=([a-zA-Z0-9-_]+)]])
range = re.replace(range, [[(&|\?)range=]], [[range_]])
local itag = re.find(hc.url, [[(&|\?)itag=(\d+)]])
itag = re.replace(itag, [[(&|\?)itag=]], [[tag-]])
if re.match(hc.url, [[(&|\?)clen=(\d+)]]) then
local lmt = re.find(hc.url, [[(&|\?)lmt=(\d+)]])
lmt = re.replace(lmt, [[(&|\?)lmt=]], nil)
local clength = re.find(hc.url, [[(&|\?)clen=(\d+)]])
clength = re.replace(clength, [[(&|\?)clen=]], nil)
local cachefilename = hc.cache_path ..'youtube.com\\chunks\\'..lmt..'\\'..clength..'\\'..itag..'\\'..range
hc.preform_cache_file_name(cachefilename)
hc.monitor_string = hc.monitor_string..', Range'
else
local vidID = hc.get_global(hc.user_ip..'_yvid')
local cachefilename = hc.cache_path ..'youtube.com\\chunks\\'..vidID..'\\'..itag..'\\'..range
hc.preform_cache_file_name(cachefilename)
hc.monitor_string = hc.monitor_string..', Range'
end
end
end
   end
end

function AnswerResponse()
-- Skip
if re.match(hc.url, [[(.*?):443$]]) then
do return end
end

-- Apply player type
if re.match(hc.url, [[youtube\.com/(watch\?.*|embed)]]) then
local EnableHTML5 = true -- Also set IsFlash = true
local referer_host = GetReferrer(hc.request_header)
if re.match(referer_host, [[youtube.com]]) then
--Exit on embed
if re.match(hc.url, [[youtube\.com/embed/]]) then
do return end
end
if EnableHTML5 then
if not re.find(hc.url, [[&html5=1]]) then
local newURL = hc.url
newURL = re.replace(newURL, [[&html5=0]], nil)
hc.answer_header =
'HTTP/1.1 302 Moved Temporarily\r\n'..
'Location: '..newURL..'&html5=1'..'\r\n'..
'Server: HandyCache\r\n'..
'Connection: close\r\n\r\n'
hc.monitor_string = hc.monitor_string..', YT (HTML5)'
end
else
if not re.find(hc.url, [[&html5=0]]) then
local newURL = hc.url
newURL = re.replace(newURL, [[&html5=1]], nil)
hc.answer_header =
'HTTP/1.1 302 Moved Temporarily\r\n'..
'Location: '..newURL..'&html5=0'..'\r\n'..
'Server: HandyCache\r\n'..
'Connection: close\r\n\r\n'
hc.monitor_string = hc.monitor_string..', YT (Flash)'
end
end
end
-- No Referrer
if referer_host == -1 then
if EnableHTML5 then
if not re.find(hc.url, [[&html5=1]]) then
local newURL = hc.url
newURL = re.replace(newURL, [[&html5=0]], nil)
hc.answer_header =
'HTTP/1.1 302 Moved Temporarily\r\n'..
'Location: '..newURL..'&html5=1'..'\r\n'..
'Server: HandyCache\r\n'..
'Connection: close\r\n\r\n'
hc.monitor_string = hc.monitor_string..', YT (HTML5)'
end
else
if not re.find(hc.url, [[&html5=0]]) then
local newURL = hc.url
newURL = re.replace(newURL, [[&html5=1]], nil)
hc.answer_header =
'HTTP/1.1 302 Moved Temporarily\r\n'..
'Location: '..newURL..'&html5=0'..'\r\n'..
'Server: HandyCache\r\n'..
'Connection: close\r\n\r\n'
hc.monitor_string = hc.monitor_string..', YT (Flash)'
end
end
end
do return end -- Exit function
end

if hc.method == 'GET' then
--For Saving
if re.match(hc.url, [[^.*/videoplayback\?.*]]) then
-- Get request status code
local AnsCode = GetAnswerCode(hc.answer_header)

-- Modify status code
if AnsCode == 206 then
local ContentRange = re.match(hc.answer_header, [[^Content-Range: bytes 0-.*]])
if ContentRange then
hc.monitor_string = hc.monitor_string..', 206 OK'
else
hc.action = 'dont_save'
hc.monitor_string = hc.monitor_string..', No Save (Youtube)'
do return end
end
end

-- Return if 302
if AnsCode == 302 then
hc.monitor_string = hc.monitor_string..', Temp Resource (URI-Different)'
do return end
end

-- Return if 304
if AnsCode == 304 and re.match(hc.url, [[^http:]]) then
hc.monitor_string = hc.monitor_string..', No Save (HTTP-Error)'
do return end
end

-- File size matched.
local fLen = GetContentLength(hc.answer_header)
if hc.cache_file_name ~= nil and hc.cache_file_size == fLen then
hc.action = 'dont_update'
hc.monitor_string = hc.monitor_string..', Youtube-Hit'
do return end
end

-- Retrieve id
if hc.get_global(hc.user_ip..'_yvid') then
local itag = re.find(hc.url, [[itag=(\d+)]])
if itag then
hc.action = 'save'
hc.monitor_string = hc.monitor_string..', Save (Youtube)'
hc.set_global (hc.user_ip..'_yvid', nil)
do return end
end
end
-- Save if from embed
local vidTYPE = hc.get_global(hc.user_ip..'_yvid_type')
if re.match(vidTYPE, [[EMBED]]) then
hc.action = 'save'
hc.monitor_string = hc.monitor_string..', Save (Youtube)'
do return end
end

hc.monitor_string = hc.monitor_string..', Youtube-Error!'
end
end
end

function HideView()-- Hide 443
if re.match (hc.url, [[(.*?):443|crossdomain\.xml]]) then
hc.hide_in_active_list = true
hc.hide_in_monitor = true
end
end

function cleanTitle(title)
title = decode_URL(title)
title = decode_entity(title)
title = convert_latin(title)
return title
end

function decode_URL(s)
    local decode_URI
    do
        local char, gsub, tonumber = string.char, string.gsub, tonumber
        local function _(hex) return char(tonumber(hex, 16)) end
        function decode_URI(s)
            s = gsub(s, '%%(%x%x)', _)
            return s
        end
    end
s = decode_URI(s)
s = string.gsub(s, '+', ' ')
return (s)
end

function decode_entity(str)
entities = {'&#20;','&#21;','&#22;','&#23;','&#24;','&#25;','&#26;','&#27;','&#28;','&#29;',
'&#2A;','&#2B;','&#2C;','&#2D;','&#2E;', '&#2F;','&#32;','&#33;','&#34;','&#35;',
'&#36;','&#37;','&#38;','&#39;','&#40;',
'&#41;','&#42;','&#43;','&#44;','&#45;','&#46;','&#47;','&#48;','&#49;','&#50;',
'&#51;','&#52;','&#53;','&#54;','&#55;','&#56;','&#57;','&#58;','&#59;','&#60;',
'&#61;','&#62;','&#63;','&#64;','&#65;','&#66;','&#67;','&#68;','&#69;','&#70;',
'&#71;','&#72;','&#73;','&#74;','&#75;','&#76;','&#77;','&#78;','&#79;','&#80;',
'&#81;','&#82;','&#83;','&#84;','&#85;','&#86;','&#87;','&#88;','&#89;','&#90;',
'&#91;','&#92;','&#93;','&#94;','&#95;','&#96;','&#97;','&#98;','&#99;','&#100;',
'&#101;','&#102;','&#103;','&#104;','&#105;','&#106;','&#107;','&#108;','&#109;',
'&#110;','&#111;','&#112;','&#113;','&#114;','&#115;','&#116;','&#117;','&#118;',
'&#119;','&#120;','&#121;','&#122;','&#123;','&#124;','&#125;','&#126;','&#127;',
'&#128;','&#129;','&#130;','&#131;','&#132;','&#133;','&#134;','&#135;','&#136;',
'&#137;','&#138;','&#139;','&#140;','&#141;','&#142;','&#143;','&#144;','&#145;',
'&#146;','&#147;','&#148;','&#149;','&#150;','&#151;','&#152;','&#153;','&#154;',
'&#155;','&#156;','&#157;','&#158;','&#159;','&#160;','&#161;','&#162;','&#163;',
'&#164;','&#165;','&#166;','&#167;','&#168;','&#169;','&#170;','&#171;','&#172;',
'&#173;','&#174;','&#175;','&#176;','&#177;','&#178;','&#179;','&#180;','&#181;',
'&#182;','&#183;','&#184;','&#185;','&#186;','&#187;','&#188;','&#189;','&#190;',
'&#191;','&#192;','&#193;','&#194;','&#195;','&#196;','&#197;','&#198;','&#199;',
'&#200;','&#201;','&#202;','&#203;','&#204;','&#205;','&#206;','&#207;','&#208;',
'&#209;','&#210;','&#211;','&#212;','&#213;','&#214;','&#215;','&#216;','&#217;',
'&#218;','&#219;','&#220;','&#221;','&#222;','&#223;','&#224;','&#225;','&#226;',
'&#227;','&#228;','&#229;','&#230;','&#231;','&#232;','&#233;','&#234;','&#235;',
'&#236;','&#237;','&#238;','&#239;','&#240;','&#241;','&#242;','&#243;','&#244;',
'&#245;','&#246;','&#247;','&#248;','&#249;','&#250;','&#251;','&#252;','&#253;',
'&#254;','&#255;','&#338;','&#339;','&#352;','&#353;','&#376;','&#402;','&#8211;',
'&#8212;','&#8216;','&#8217;','&#8218;','&#8220;','&#8221;','&#8222;','&#8224;',
'&#8225;','&#8226;','&#8230;','&#8240;','&#8364;','&#8482'}

for i, entity in ipairs(entities) do
if string.match(str, entity) then
num, _ = string.gsub(entity, "(&#)", '')
num, _ = string.gsub(num, "(;)", '')
str = string.gsub(str, entity, string.char(num))
end
end

return str
end

function convert_latin(str)
entities = {'À','Á','Â','Ã','Ä','Å','Ă','Ā','Ą','Æ','Ǽ','à','á','â','ã','ä','å','ă','ā','ą','æ','ǽ',
'Þ','þ','ß','Ç','Č','Ć','Ĉ','Ċ','ç','č','ć','ĉ','ċ','Đ','Ď','Đ','đ','ď','È','É','Ê','Ë',
'Ĕ','Ē','Ę','Ė','è','é','ê','ë','ĕ','ē','ę','ė','Ĝ','Ğ','Ġ','Ģ','ĝ','ğ','ġ','ģ','Ĥ','Ħ',
'ĥ','ħ','Ì','Í','Î','Ï','İ','Ĩ','Ī','Ĭ','Į','ì','í','î','ï','į','ĩ','ī','ĭ','ı','Ĵ','ĵ',
'Ķ','ķ','ĸ','Ĺ','Ļ','Ľ','Ŀ','Ł','ĺ','ļ','ľ','ŀ','ł','Ñ','Ń','Ň','Ņ','Ŋ','ñ','ń','ň','ņ',
'ŋ','ʼn','Ò','Ó','Ô','Õ','Ö','Ø','Ō','Ŏ','Ő','Œ','ò','ó','ô','õ','ö','ø','ō','ŏ','ő','œ',
'ð','Ŕ','Ř','ŕ','ř','ŗ','Š','Ŝ','Ś','Ş','š','ŝ','ś','ş','Ŧ','Ţ','Ť','ŧ','ţ','ť','Ù','Ú',
'Û','Ü','Ũ','Ū','Ŭ','Ů','Ű','Ų','ù','ú','û','ü','ũ','ū','ŭ','ů','ű','ų','Ŵ','Ẁ','Ẃ','Ẅ',
'ŵ','ẁ','ẃ','ẅ','Ý','Ÿ','Ŷ','ý','ÿ','ŷ','Ž','Ź','Ż','Ž','ž','ź','ż','ž','z'}

latins = {["À"]='A',["Á"]='A',["Â"]='A',["Ã"]='A',["Ä"]='A',["Å"]='A',["Ă"]='A',["Ā"]='A',["Ą"]='A',["Æ"]='A',["Ǽ"]='A',
["à"]='a',["á"]='a',["â"]='a',["ã"]='a',["ä"]='a',["å"]='a',["ă"]='a',["ā"]='a',["ą"]='a',["æ"]='a',["ǽ"]='a',
["Þ"]='B',["þ"]='b',["ß"]='B',["Ç"]='C',["Č"]='C',["Ć"]='C',["Ĉ"]='C',["Ċ"]='C',["ç"]='c',["č"]='c',["ć"]='c',
["ĉ"]='c',["ċ"]='c',["Đ"]='D',["Ď"]='D',["Đ"]='D',["đ"]='d',["ď"]='d',["È"]='E',["É"]='E',["Ê"]='E',["Ë"]='E',
["Ĕ"]='E',["Ē"]='E',["Ę"]='E',["Ė"]='E',["è"]='e',["é"]='e',["ê"]='e',["ë"]='e',["ĕ"]='e',["ē"]='e',["ę"]='e',
["ė"]='e',["Ĝ"]='G',["Ğ"]='G',["Ġ"]='G',["Ģ"]='G',["ĝ"]='g',["ğ"]='g',["ġ"]='g',["ģ"]='g',["Ĥ"]='H',["Ħ"]='H',
["ĥ"]='h',["ħ"]='h',["Ì"]='I',["Í"]='I',["Î"]='I',["Ï"]='I',["İ"]='I',["Ĩ"]='I',["Ī"]='I',["Ĭ"]='I',["Į"]='I',
["ì"]='i',["í"]='i',["î"]='i',["ï"]='i',["į"]='i',["ĩ"]='i',["ī"]='i',["ĭ"]='i',["ı"]='i',["Ĵ"]='J',["ĵ"]='j',
["Ķ"]='K',["ķ"]='k',["ĸ"]='k',["Ĺ"]='L',["Ļ"]='L',["Ľ"]='L',["Ŀ"]='L',["Ł"]='L',["ĺ"]='l',["ļ"]='l',["ľ"]='l',
["ŀ"]='l',["ł"]='l',["Ñ"]='N',["Ń"]='N',["Ň"]='N',["Ņ"]='N',["Ŋ"]='N',["ñ"]='n',["ń"]='n',["ň"]='n',["ņ"]='n',
["ŋ"]='n',["ʼn"]='n',["Ò"]='O',["Ó"]='O',["Ô"]='O',["Õ"]='O',["Ö"]='O',["Ø"]='O',["Ō"]='O',["Ŏ"]='O',["Ő"]='O',
["Œ"]='O',["ò"]='o',["ó"]='o',["ô"]='o',["õ"]='o',["ö"]='o',["ø"]='o',["ō"]='o',["ŏ"]='o',["ő"]='o',["œ"]='o',
["ð"]='o',["Ŕ"]='R',["Ř"]='R',["ŕ"]='r',["ř"]='r',["ŗ"]='r',["Š"]='S',["Ŝ"]='S',["Ś"]='S',["Ş"]='S',["š"]='s',
["ŝ"]='s',["ś"]='s',["ş"]='s',["Ŧ"]='T',["Ţ"]='T',["Ť"]='T',["ŧ"]='t',["ţ"]='t',["ť"]='t',["Ù"]='U',["Ú"]='U',
["Û"]='U',["Ü"]='U',["Ũ"]='U',["Ū"]='U',["Ŭ"]='U',["Ů"]='U',["Ű"]='U',["Ų"]='U',["ù"]='u',["ú"]='u',["û"]='u',
["ü"]='u',["ũ"]='u',["ū"]='u',["ŭ"]='u',["ů"]='u',["ű"]='u',["ų"]='u',["Ŵ"]='W',["Ẁ"]='W',["Ẃ"]='W',["Ẅ"]='W',
["ŵ"]='w',["ẁ"]='w',["ẃ"]='w',["ẅ"]='w',["Ý"]='Y',["Ÿ"]='Y',["Ŷ"]='Y',["ý"]='y',["ÿ"]='y',["ŷ"]='y',["Ž"]='Z',
["Ź"]='Z',["Ż"]='Z',["Ž"]='Z',["ž"]='z',["ź"]='z',["ż"]='z',["ž"]='z'}

for i, entity in ipairs(entities) do
if string.match(str, entity) then
str = string.gsub(str, entity, latins)
end
end
return str
end


Esta extensión es independiente por lo que, por tanto, puede entrar en conflicto con los complementos del navegador relacionadas con Youtube como MagicActions / ChromeActions o SmartVideo.

Es necesario desactivar esos complementos del navegador para esta extensión funcione correctamente

JVProducciones

Cita de: robertjs en Agosto 01, 2015, 05:03:55 PM
por aca lo dejo el codigo :)
Código (cpp) [Seleccionar]

--[[ <HCExtension>
@name      Youtube Saver (HTTPS,HTML5,SINGLE,TITLE)
@author Komunitas Handycache Indonesia / Modified by euverve/thatskie84 @ www.HandyCache-Resources.com
@version    0.0.1.2
@rule youtube\.com/(watch\?|((get|api)\_video\_info|embed|v/))
@rule googlevideo\.com/(videoplayback|crossdomain\.xml)
@rule youtube\.com:443
@rule googlevideo\.com/videogoodput
@exception watch_fragments_ajax
@event      BeforeAnswerBodySend/GetVideoName
@event      RequestHeaderReceived/Request
@event      AnswerHeaderReceived/AnswerResponse
@event      URLToFileNameConverting/ConvertFilename
@event BeforeViewInMonitor/HideView
@event      Init/init
</HCExtension> ]]

function init()
    hc.put_msg(30, 'Youtube Saver \n(HTTPS,HTML5,SINGLE,TITLE)')

-- Create root directory
local path2 = hc.cache_path ..'youtube.com\\singles-full\\'
hc.prepare_path(path2)

end

-- Get Referrer.
function GetReferrer(s)
_,_,x = string.find(s, '[rR]eferer:(.*?)')
if x==nil then return -1 else return x end
end

-- Get remote file size.
function GetContentLength(s)
_,_,x = string.find(s, '[cC]ontent%-[lL]ength: *(%d+)')
if x==nil then return -1 else return tonumber(x) end
end

-- Get request status code.
function GetAnswerCode(s)
  _,_,x = string.find(s,'HTTP/1%.%d +(%d+)')
  if x==nil then return -1 else return tonumber(x) end
end

-- Modify UserAgent
function Request()
--Get video id
if re.match(hc.url, [[youtube.com]])  then
if re.match(hc.url, [[v=(.{11})]])  then
local referer_host = re.find(hc.url, [[v=(.{11})]],1)
if referer_host then
hc.set_global (hc.user_ip..'_yvid', referer_host)
hc.set_global (hc.user_ip..'_yvURL', hc.url)
end
elseif re.match(hc.url, [[embed/(.{11})]]) then
local referer_host = re.find(hc.url, [[embed/(.{11})]],1)
if referer_host then
hc.set_global (hc.user_ip..'_yvid', referer_host)
end
end
end

-- GoogleBot is played in HTML5 player
if not re.match(hc.url, [[googlevideo\.com]])  then
local IsFlash = false
if IsFlash then
hc.request_header = re.replace(hc.request_header, [[^User\-Agent:.*?\r\n]], 'User-Agent: Mozilla/5.0 (Windows x86; rv:19.0) Gecko/20100101 Firefox/19.0')
else -- HTML5 / HTTP
--hc.request_header = re.replace(hc.request_header, [[^User\-Agent:.*?\r\n]], 'User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)')
hc.request_header = re.replace(hc.request_header, [[^User\-Agent:.*?\r\n]], 'User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0')
end
end

-- Block navigation
local spf = re.find(hc.url, [[^.*youtube\.com/(.*)(spf=navigate|user_watch|watch_fragments_ajax|share_ajax)]])
if spf then
hc.action = 'stop'
end

end

function GetVideoName()
   if re.match(hc.url, [[.*youtube\.com\/watch]]) then
   
hc.update_url_info(hc.url)
local title = re.find(hc.url, [[v=.{11}]])
local title2 = re.replace(title, [[(v=)(.{11})]], [[\2]])
local x = re.match(hc.answer_body, [[<meta name="title" content="([^\n]*)">]])
local path = hc.cache_path ..'youtube.com\\temp\\'
--Write file
if x then
local i = re.substr(1)
local i = re.replace(i, [[([\\\/\:\*\?\!\"\<\>\|])]], '', true)
hc.prepare_path(path)   
local clr = io.open(path..title, "w")
clr:write(cleanTitle(i))
clr:close()
end

--Insert video id in url
hc.set_global (hc.user_ip..'_yvid', title2)
local SingleFile = true
if SingleFile then
if re.find(hc.url, [[^.*youtube\.com/watch\?.*]]) then
hc.answer_body = string.gsub(hc.answer_body, '"fmt_list"', '"dash":"0","vq":"tiny","fmt_list"')
end
if re.find(hc.url, [[^.*youtube\.com/((get|api)\_video\_info|embed|v/).*]]) then
hc.answer_body = string.gsub(hc.answer_body, '&eventid=', '&dash=0&vq=tiny&eventid=')
end
end
--Read file / Get Title
local idv = io.open(path..title, "r")   
local vTitle = idv:read('*a')
hc.monitor_string = hc.monitor_string..', YT-Title: '..cleanTitle(vTitle)
idv:close()
elseif re.match(hc.url, [[/embed/]]) then
--Active range
local vidID = hc.get_global(hc.user_ip..'_yvid')
hc.set_global (hc.user_ip..'_yvid_type', 'v='..vidID..'|EMBED')
end
end

function ConvertFilename()   
    if re.match(hc.url, [[^.*/videoplayback\?.*]]) then
local vidID = hc.get_global(hc.user_ip..'_yvid')
if vidID then
local itag = re.find(hc.url, [[itag=[^&]+]])
itag = re.replace(itag, [[itag=]], [[itag_]])
local path = hc.cache_path ..'youtube.com\\temp\\'
local idv = io.open(path..'v='..vidID, "r")   
local idv2 = idv:read('*a')

local path2 = hc.cache_path ..'youtube.com\\singles-full\\'
hc.prepare_path(path2)

if itag then
cache_file_iditag = path2..itag..'_'..vidID..'_'..idv2..'.mp4'
hc.preform_cache_file_name(cache_file_iditag)
hc.monitor_string = hc.monitor_string..', , Single'
end
idv:close()
end

local vidTYPE = hc.get_global(hc.user_ip..'_yvid_type')
if re.match(vidTYPE, [[EMBED]]) then
local newvidID = re.find(vidTYPE, [[v=(.{11})]],1)
-- Range or chunks
if re.match(hc.url, [[range=([a-zA-Z0-9-_]+)]]) then
local range = re.find(hc.url, [[(&|\?)range=([a-zA-Z0-9-_]+)]])
range = re.replace(range, [[(&|\?)range=]], [[range_]])
local itag = re.find(hc.url, [[(&|\?)itag=(\d+)]])
itag = re.replace(itag, [[(&|\?)itag=]], [[tag-]])
if re.match(hc.url, [[(&|\?)clen=(\d+)]]) then
local lmt = re.find(hc.url, [[(&|\?)lmt=(\d+)]])
lmt = re.replace(lmt, [[(&|\?)lmt=]], nil)
local clength = re.find(hc.url, [[(&|\?)clen=(\d+)]])
clength = re.replace(clength, [[(&|\?)clen=]], nil)
local cachefilename = hc.cache_path ..'youtube.com\\chunks\\'..lmt..'\\'..clength..'\\'..itag..'\\'..range
hc.preform_cache_file_name(cachefilename)
hc.monitor_string = hc.monitor_string..', Range'
else
local vidID = hc.get_global(hc.user_ip..'_yvid')
local cachefilename = hc.cache_path ..'youtube.com\\chunks\\'..vidID..'\\'..itag..'\\'..range
hc.preform_cache_file_name(cachefilename)
hc.monitor_string = hc.monitor_string..', Range'
end
end
end
   end
end

function AnswerResponse()
-- Skip
if re.match(hc.url, [[(.*?):443$]]) then
do return end
end

-- Apply player type
if re.match(hc.url, [[youtube\.com/(watch\?.*|embed)]]) then
local EnableHTML5 = true -- Also set IsFlash = true
local referer_host = GetReferrer(hc.request_header)
if re.match(referer_host, [[youtube.com]]) then
--Exit on embed
if re.match(hc.url, [[youtube\.com/embed/]]) then
do return end
end
if EnableHTML5 then
if not re.find(hc.url, [[&html5=1]]) then
local newURL = hc.url
newURL = re.replace(newURL, [[&html5=0]], nil)
hc.answer_header =
'HTTP/1.1 302 Moved Temporarily\r\n'..
'Location: '..newURL..'&html5=1'..'\r\n'..
'Server: HandyCache\r\n'..
'Connection: close\r\n\r\n'
hc.monitor_string = hc.monitor_string..', YT (HTML5)'
end
else
if not re.find(hc.url, [[&html5=0]]) then
local newURL = hc.url
newURL = re.replace(newURL, [[&html5=1]], nil)
hc.answer_header =
'HTTP/1.1 302 Moved Temporarily\r\n'..
'Location: '..newURL..'&html5=0'..'\r\n'..
'Server: HandyCache\r\n'..
'Connection: close\r\n\r\n'
hc.monitor_string = hc.monitor_string..', YT (Flash)'
end
end
end
-- No Referrer
if referer_host == -1 then
if EnableHTML5 then
if not re.find(hc.url, [[&html5=1]]) then
local newURL = hc.url
newURL = re.replace(newURL, [[&html5=0]], nil)
hc.answer_header =
'HTTP/1.1 302 Moved Temporarily\r\n'..
'Location: '..newURL..'&html5=1'..'\r\n'..
'Server: HandyCache\r\n'..
'Connection: close\r\n\r\n'
hc.monitor_string = hc.monitor_string..', YT (HTML5)'
end
else
if not re.find(hc.url, [[&html5=0]]) then
local newURL = hc.url
newURL = re.replace(newURL, [[&html5=1]], nil)
hc.answer_header =
'HTTP/1.1 302 Moved Temporarily\r\n'..
'Location: '..newURL..'&html5=0'..'\r\n'..
'Server: HandyCache\r\n'..
'Connection: close\r\n\r\n'
hc.monitor_string = hc.monitor_string..', YT (Flash)'
end
end
end
do return end -- Exit function
end

if hc.method == 'GET' then
--For Saving
if re.match(hc.url, [[^.*/videoplayback\?.*]]) then
-- Get request status code
local AnsCode = GetAnswerCode(hc.answer_header)

-- Modify status code
if AnsCode == 206 then
local ContentRange = re.match(hc.answer_header, [[^Content-Range: bytes 0-.*]])
if ContentRange then
hc.monitor_string = hc.monitor_string..', 206 OK'
else
hc.action = 'dont_save'
hc.monitor_string = hc.monitor_string..', No Save (Youtube)'
do return end
end
end

-- Return if 302
if AnsCode == 302 then
hc.monitor_string = hc.monitor_string..', Temp Resource (URI-Different)'
do return end
end

-- Return if 304
if AnsCode == 304 and re.match(hc.url, [[^http:]]) then
hc.monitor_string = hc.monitor_string..', No Save (HTTP-Error)'
do return end
end

-- File size matched.
local fLen = GetContentLength(hc.answer_header)
if hc.cache_file_name ~= nil and hc.cache_file_size == fLen then
hc.action = 'dont_update'
hc.monitor_string = hc.monitor_string..', Youtube-Hit'
do return end
end

-- Retrieve id
if hc.get_global(hc.user_ip..'_yvid') then
local itag = re.find(hc.url, [[itag=(\d+)]])
if itag then
hc.action = 'save'
hc.monitor_string = hc.monitor_string..', Save (Youtube)'
hc.set_global (hc.user_ip..'_yvid', nil)
do return end
end
end
-- Save if from embed
local vidTYPE = hc.get_global(hc.user_ip..'_yvid_type')
if re.match(vidTYPE, [[EMBED]]) then
hc.action = 'save'
hc.monitor_string = hc.monitor_string..', Save (Youtube)'
do return end
end

hc.monitor_string = hc.monitor_string..', Youtube-Error!'
end
end
end

function HideView()-- Hide 443
if re.match (hc.url, [[(.*?):443|crossdomain\.xml]]) then
hc.hide_in_active_list = true
hc.hide_in_monitor = true
end
end

function cleanTitle(title)
title = decode_URL(title)
title = decode_entity(title)
title = convert_latin(title)
return title
end

function decode_URL(s)
    local decode_URI
    do
        local char, gsub, tonumber = string.char, string.gsub, tonumber
        local function _(hex) return char(tonumber(hex, 16)) end
        function decode_URI(s)
            s = gsub(s, '%%(%x%x)', _)
            return s
        end
    end
s = decode_URI(s)
s = string.gsub(s, '+', ' ')
return (s)
end

function decode_entity(str)
entities = {'&#20;','&#21;','&#22;','&#23;','&#24;','&#25;','&#26;','&#27;','&#28;','&#29;',
'&#2A;','&#2B;','&#2C;','&#2D;','&#2E;', '&#2F;','&#32;','&#33;','&#34;','&#35;',
'&#36;','&#37;','&#38;','&#39;','&#40;',
'&#41;','&#42;','&#43;','&#44;','&#45;','&#46;','&#47;','&#48;','&#49;','&#50;',
'&#51;','&#52;','&#53;','&#54;','&#55;','&#56;','&#57;','&#58;','&#59;','&#60;',
'&#61;','&#62;','&#63;','&#64;','&#65;','&#66;','&#67;','&#68;','&#69;','&#70;',
'&#71;','&#72;','&#73;','&#74;','&#75;','&#76;','&#77;','&#78;','&#79;','&#80;',
'&#81;','&#82;','&#83;','&#84;','&#85;','&#86;','&#87;','&#88;','&#89;','&#90;',
'&#91;','&#92;','&#93;','&#94;','&#95;','&#96;','&#97;','&#98;','&#99;','&#100;',
'&#101;','&#102;','&#103;','&#104;','&#105;','&#106;','&#107;','&#108;','&#109;',
'&#110;','&#111;','&#112;','&#113;','&#114;','&#115;','&#116;','&#117;','&#118;',
'&#119;','&#120;','&#121;','&#122;','&#123;','&#124;','&#125;','&#126;','&#127;',
'&#128;','&#129;','&#130;','&#131;','&#132;','&#133;','&#134;','&#135;','&#136;',
'&#137;','&#138;','&#139;','&#140;','&#141;','&#142;','&#143;','&#144;','&#145;',
'&#146;','&#147;','&#148;','&#149;','&#150;','&#151;','&#152;','&#153;','&#154;',
'&#155;','&#156;','&#157;','&#158;','&#159;','&#160;','&#161;','&#162;','&#163;',
'&#164;','&#165;','&#166;','&#167;','&#168;','&#169;','&#170;','&#171;','&#172;',
'&#173;','&#174;','&#175;','&#176;','&#177;','&#178;','&#179;','&#180;','&#181;',
'&#182;','&#183;','&#184;','&#185;','&#186;','&#187;','&#188;','&#189;','&#190;',
'&#191;','&#192;','&#193;','&#194;','&#195;','&#196;','&#197;','&#198;','&#199;',
'&#200;','&#201;','&#202;','&#203;','&#204;','&#205;','&#206;','&#207;','&#208;',
'&#209;','&#210;','&#211;','&#212;','&#213;','&#214;','&#215;','&#216;','&#217;',
'&#218;','&#219;','&#220;','&#221;','&#222;','&#223;','&#224;','&#225;','&#226;',
'&#227;','&#228;','&#229;','&#230;','&#231;','&#232;','&#233;','&#234;','&#235;',
'&#236;','&#237;','&#238;','&#239;','&#240;','&#241;','&#242;','&#243;','&#244;',
'&#245;','&#246;','&#247;','&#248;','&#249;','&#250;','&#251;','&#252;','&#253;',
'&#254;','&#255;','&#338;','&#339;','&#352;','&#353;','&#376;','&#402;','&#8211;',
'&#8212;','&#8216;','&#8217;','&#8218;','&#8220;','&#8221;','&#8222;','&#8224;',
'&#8225;','&#8226;','&#8230;','&#8240;','&#8364;','&#8482'}

for i, entity in ipairs(entities) do
if string.match(str, entity) then
num, _ = string.gsub(entity, "(&#)", '')
num, _ = string.gsub(num, "(;)", '')
str = string.gsub(str, entity, string.char(num))
end
end

return str
end

function convert_latin(str)
entities = {'À','Á','Â','Ã','Ä','Å','Ă','Ā','Ą','Æ','Ǽ','à','á','â','ã','ä','å','ă','ā','ą','æ','ǽ',
'Þ','þ','ß','Ç','Č','Ć','Ĉ','Ċ','ç','č','ć','ĉ','ċ','Đ','Ď','Đ','đ','ď','È','É','Ê','Ë',
'Ĕ','Ē','Ę','Ė','è','é','ê','ë','ĕ','ē','ę','ė','Ĝ','Ğ','Ġ','Ģ','ĝ','ğ','ġ','ģ','Ĥ','Ħ',
'ĥ','ħ','Ì','Í','Î','Ï','İ','Ĩ','Ī','Ĭ','Į','ì','í','î','ï','į','ĩ','ī','ĭ','ı','Ĵ','ĵ',
'Ķ','ķ','ĸ','Ĺ','Ļ','Ľ','Ŀ','Ł','ĺ','ļ','ľ','ŀ','ł','Ñ','Ń','Ň','Ņ','Ŋ','ñ','ń','ň','ņ',
'ŋ','ʼn','Ò','Ó','Ô','Õ','Ö','Ø','Ō','Ŏ','Ő','Œ','ò','ó','ô','õ','ö','ø','ō','ŏ','ő','œ',
'ð','Ŕ','Ř','ŕ','ř','ŗ','Š','Ŝ','Ś','Ş','š','ŝ','ś','ş','Ŧ','Ţ','Ť','ŧ','ţ','ť','Ù','Ú',
'Û','Ü','Ũ','Ū','Ŭ','Ů','Ű','Ų','ù','ú','û','ü','ũ','ū','ŭ','ů','ű','ų','Ŵ','Ẁ','Ẃ','Ẅ',
'ŵ','ẁ','ẃ','ẅ','Ý','Ÿ','Ŷ','ý','ÿ','ŷ','Ž','Ź','Ż','Ž','ž','ź','ż','ž','z'}

latins = {["À"]='A',["Á"]='A',["Â"]='A',["Ã"]='A',["Ä"]='A',["Å"]='A',["Ă"]='A',["Ā"]='A',["Ą"]='A',["Æ"]='A',["Ǽ"]='A',
["à"]='a',["á"]='a',["â"]='a',["ã"]='a',["ä"]='a',["å"]='a',["ă"]='a',["ā"]='a',["ą"]='a',["æ"]='a',["ǽ"]='a',
["Þ"]='B',["þ"]='b',["ß"]='B',["Ç"]='C',["Č"]='C',["Ć"]='C',["Ĉ"]='C',["Ċ"]='C',["ç"]='c',["č"]='c',["ć"]='c',
["ĉ"]='c',["ċ"]='c',["Đ"]='D',["Ď"]='D',["Đ"]='D',["đ"]='d',["ď"]='d',["È"]='E',["É"]='E',["Ê"]='E',["Ë"]='E',
["Ĕ"]='E',["Ē"]='E',["Ę"]='E',["Ė"]='E',["è"]='e',["é"]='e',["ê"]='e',["ë"]='e',["ĕ"]='e',["ē"]='e',["ę"]='e',
["ė"]='e',["Ĝ"]='G',["Ğ"]='G',["Ġ"]='G',["Ģ"]='G',["ĝ"]='g',["ğ"]='g',["ġ"]='g',["ģ"]='g',["Ĥ"]='H',["Ħ"]='H',
["ĥ"]='h',["ħ"]='h',["Ì"]='I',["Í"]='I',["Î"]='I',["Ï"]='I',["İ"]='I',["Ĩ"]='I',["Ī"]='I',["Ĭ"]='I',["Į"]='I',
["ì"]='i',["í"]='i',["î"]='i',["ï"]='i',["į"]='i',["ĩ"]='i',["ī"]='i',["ĭ"]='i',["ı"]='i',["Ĵ"]='J',["ĵ"]='j',
["Ķ"]='K',["ķ"]='k',["ĸ"]='k',["Ĺ"]='L',["Ļ"]='L',["Ľ"]='L',["Ŀ"]='L',["Ł"]='L',["ĺ"]='l',["ļ"]='l',["ľ"]='l',
["ŀ"]='l',["ł"]='l',["Ñ"]='N',["Ń"]='N',["Ň"]='N',["Ņ"]='N',["Ŋ"]='N',["ñ"]='n',["ń"]='n',["ň"]='n',["ņ"]='n',
["ŋ"]='n',["ʼn"]='n',["Ò"]='O',["Ó"]='O',["Ô"]='O',["Õ"]='O',["Ö"]='O',["Ø"]='O',["Ō"]='O',["Ŏ"]='O',["Ő"]='O',
["Œ"]='O',["ò"]='o',["ó"]='o',["ô"]='o',["õ"]='o',["ö"]='o',["ø"]='o',["ō"]='o',["ŏ"]='o',["ő"]='o',["œ"]='o',
["ð"]='o',["Ŕ"]='R',["Ř"]='R',["ŕ"]='r',["ř"]='r',["ŗ"]='r',["Š"]='S',["Ŝ"]='S',["Ś"]='S',["Ş"]='S',["š"]='s',
["ŝ"]='s',["ś"]='s',["ş"]='s',["Ŧ"]='T',["Ţ"]='T',["Ť"]='T',["ŧ"]='t',["ţ"]='t',["ť"]='t',["Ù"]='U',["Ú"]='U',
["Û"]='U',["Ü"]='U',["Ũ"]='U',["Ū"]='U',["Ŭ"]='U',["Ů"]='U',["Ű"]='U',["Ų"]='U',["ù"]='u',["ú"]='u',["û"]='u',
["ü"]='u',["ũ"]='u',["ū"]='u',["ŭ"]='u',["ů"]='u',["ű"]='u',["ų"]='u',["Ŵ"]='W',["Ẁ"]='W',["Ẃ"]='W',["Ẅ"]='W',
["ŵ"]='w',["ẁ"]='w',["ẃ"]='w',["ẅ"]='w',["Ý"]='Y',["Ÿ"]='Y',["Ŷ"]='Y',["ý"]='y',["ÿ"]='y',["ŷ"]='y',["Ž"]='Z',
["Ź"]='Z',["Ż"]='Z',["Ž"]='Z',["ž"]='z',["ź"]='z',["ż"]='z',["ž"]='z'}

for i, entity in ipairs(entities) do
if string.match(str, entity) then
str = string.gsub(str, entity, latins)
end
end
return str
end


Esta extensión es independiente por lo que, por tanto, puede entrar en conflicto con los complementos del navegador relacionadas con Youtube como MagicActions / ChromeActions o SmartVideo.

Es necesario desactivar esos complementos del navegador para esta extensión funcione correctamente


mi mas sincero agradecimiento a Bernando, Jr. Minguita (euverve) "https://www.facebook.com/euverve" "http://www.handycache-resources.com/"



tonyvzla

Quien se anima a actualizar una nueva con todo estos aportazos? JV? Robert? si pueden actualizen este tema con estos nuevos aportes gracias por compartir  :-*
En ayuda de los mas desprotegidos

robertjs

Hola por aqui les dejo otro codigo :)

Código (cpp) [Seleccionar]
--[[ <HCExtension>
@name          Yutub sanguan v0.9
@author        Komunitas HandyCache Indonesia (noscar, reges007, bdstd)
@version       0.9
@description   Yutub http, replace ytimg, replace video, no-range, filter, tanpa save video
@rule          ^https?://www\.youtube\.com
@rule          ^https?://i\d?\.ytimg
@event  RequestHeaderReceived/karedok
@event  BeforeRequestHeaderSend/leunca
@event  BeforeAnswerBodySend/cilok
@event  Init/init
</HCExtension> ]]

function init()
hc.put_msg(30, 'YT sanguan 0.9')
end

function karedok()
        if re.match(hc.url, [[^https?://www\.youtube\.com/watch\?.*\&spf=nav]]) then
                hc.action = 'stop'
                -- hc.monitor_string = 'YT-nav block '
        end
        if re.match(hc.url, [[^https?://i\d?\.ytimg.*]]) then
                hc.answer_header=
                'HTTP/1.1 302 Moved Temporarily (sanguan)\r\n'..
                'Server: HandyCache\r\n'..
                'Location: http://icon-park.com/imagefiles/movie_play_orange-200x140.png\r\n'..
                'Connection: close\r\n\r\n'
                hc.monitor_string = 'YT pic '
        end
        if re.match(hc.url, [[^https?://www\.youtube\.com/watch\?v=(YdOJ|folR)]]) then
                hc.action = 'stop'
                -- blok porn non-latin
        end
        if re.match(hc.url, [[^https?://www\.youtube\.com/watch\?v=]]) then
                local vidx = re.replace(hc.url, [[450p7goxZqg]], 'Mk7-GRWq7wA')
                hc.request_header = re.replace(hc.request_header, [[\AGET \K[^\r\n]+(?= HTTP/)]], vidx)
                -- redir klip populer hot ke video lyric, sampel john legend all of me
        end
        if re.match(hc.url, [[^https?://www\.youtube\.com/watch\?v=]]) then
                local mvid = re.replace(hc.url, [[(1opp3AiTGdU|yLeQAS5xSAg)]], 'CVl8lIEQnx8')
                hc.request_header = re.replace(hc.request_header, [[\AGET \K[^\r\n]+(?= HTTP/)]], mvid)
                -- redir multi-video ke upin ipin, sampel goyang dumang | sakitnya tu dsni
        end
end

function leunca()
        hc.request_header = re.replace(hc.request_header, [[^User-Agent: \K[^\r\n]+]], 'Mozilla/5.0 (compatible; Googlebot/2.1')
        hc.monitor_string = 'YT http '
end

function cilok()
        if re.match(hc.url, [[^https?://www\.youtube\.com/watch\?]]) then
        hc.answer_body = string.gsub(hc.answer_body, '"dashmpd"', '"dash":"0","vq":"small","dashmpd"')
        -- hc.monitor_string = 'YT no-range '
                local porn = re.find(hc.answer_body, [[(18\+|\+18|bokep|porn|xxx|pamer\ssusu|tube8|boob|(tanpa|buka)\s(bh|baju|celana|cd|beha)|crot|perek|youjiz|bispak|binal|hentai|anak\skembar|membuat\sanak|pacaran|ulen|konak|sekret|nyepong|toge|bogel|(cewek?|gadis).*?(nakal|montok|mab[uo]k)|syur|\sjav\s|naked|slut|upskirt|pant(y|ies)|bohay|melorot|pe(me)?rkosa|bikini|cabul|gigolo|[ck]ondom|asusila|sora\saoi|scandal|seduction|call\sgirl|rape|kamasut|\sml\s|kama\ssut|topless|sange|ngaceng|titit|ciuman|ngewe|saori|shara|ria\ssakurai|cecil\sfujisaki|tsubasa\samami|tina\syuzuki|maria\stakagi|ento(d|t)|ameri\sichin|tetek|cabean|blue\s(film|movie)|vulgar|\shot|penis|kontol|memek|vagina|\sanu\s|pepek|malam\spert|mupeng|masturb|ngocok|onann?i|(pakai|pake)\s(bh|beha|cd)|lingerie|sex|seks|suami|iste?ri|playboy|stript(ease|is)|mesum|Remys1706|bercinta|birahi|gairah|\sintim|sodom|gituan|toket|payudara|(film|video|animasi|adegan)\s(panas|semi)|kimcil|skandal|horny|adult|fuck|making\slove|cipok|intip|kiss|mulus|bugil|ngenn?to[dt]|nud(e|ity)|telanjang|eroti[sc]|abg\s).*?</title>]])
                local xporn = re.find(hc.answer_body, [[(anatomy|rajin).*?</title>]])
                if not xporn and porn then
                        hc.client_disconnect()
                        -- hc.monitor_string = 'YT porn '
                end
        end
end


robertjs

Cita de: tonyvzla en Agosto 01, 2015, 10:11:58 PM
Quien se anima a actualizar una nueva con todo estos aportazos? JV? Robert? si pueden actualizen este tema con estos nuevos aportes gracias por compartir  :-*

claro man, yo ya tengo uno casi listo para aportar..
paciencia nada mas pido..

solo cabe decir que el ya tengo cuando activo apenas el handy en horas ya em da un rendimiento de ahorro de mas del 50% pero no a bjado del 80%

yo lo uso para una red no mayo de 30 clientes 20 simultaneos..

cabe recalcar que no estoy usando las configuracion de los videos ya aportados..

pero si que los files soportan para HTTP y HTTPS por si quieren hacer lo de los videos..
y separarlo por potocolos... saludos..!!

rivelino

Hola a todos.
Ayer instale el hc en paralelo con mikrotik y aparenteme todo bien, si hace cache paginas http. pero me dado cuenta que no hace cache a esa simple pagina web http://www.mikrotik.com/
No cachea los el archivo de actualizacion *.apk
Alguna recomendacion?  ::)

JVProducciones

Cita de: rivelino en Agosto 03, 2015, 08:26:33 AM
Hola a todos.
Ayer instale el hc en paralelo con mikrotik y aparenteme todo bien, si hace cache paginas http. pero me dado cuenta que no hace cache a esa simple pagina web http://www.mikrotik.com/
No cachea los el archivo de actualizacion *.apk
Alguna recomendacion?  ::)
Bastaria con agregar la extension apk en "guardar en cache" en Listas de Handycache.....
\.apk(\?|$)

rivelino

Gracias por responder, y para que haga cache de toda la pagina www.peru21.pe. solo cachea sus imagenes :)

Enrrike87

Cita de: rivelino en Agosto 03, 2015, 02:32:08 PM
Gracias por responder, y para que haga cache de toda la pagina www.peru21.pe. solo cachea sus imagenes :)
y k mas kisieras k haga hit?

rivelino


robertjs

Cita de: rivelino en Agosto 03, 2015, 02:32:08 PM
Gracias por responder, y para que haga cache de toda la pagina www.peru21.pe. solo cachea sus imagenes :)

jajajajajajjaaj te loquio el man de arriva,
bueno man por lo que de esa pagina tiene mas imagenes y lo que mas hace cache es las imagenes.. ahora si quiere que guarde las letras
tienes que hacer lo mismo que dijo el amigo JV
pero letra por letra

\.a(\?|$)  \.b(\?|$)  \.c(\?|$)  \.d(\?|$)  \.e(\?|$) ... etc :v :v

jejejej aburrido ando..!! :v

jejee

rivelino

Cita de: robertjs en Agosto 04, 2015, 10:06:26 AM
jajajajajajjaaj te loquio el man de arriva,
bueno man por lo que de esa pagina tiene mas imagenes y lo que mas hace cache es las imagenes.. ahora si quiere que guarde las letras
tienes que hacer lo mismo que dijo el amigo JV
pero letra por letra

\.a(\?|$)  \.b(\?|$)  \.c(\?|$)  \.d(\?|$)  \.e(\?|$) ... etc :v :v

jejejej aburrido ando..!! :v

jejee

Yo me imaginaba que guardaba la  pagina web completa. recien estoyempezando en esto  :-X