@ECHO off CLS REM BatchGemist.bat versie 1.3 REM REM Veranderingslogboek: REM 10-02-2016 v1.3: - Ondersteuning toegevoegd voor: NOS, 101TV, RTL Nieuws, alle regionale REM omroepen(!) en Disney uitzendingen. REM LET OP: Ondersteuning voor Disney uitzendingen is nog in ontwikkeling! REM - Alle andere websites opnieuw nagelopen, sterk geoptimaliseerd, REM ondersteuning uitgebreid en waar mogelijk bij :Input ondergebracht. REM - :NPO grondig aangepakt waardoor nog meer video's worden ondersteund, REM waaronder beveiligde progressieve videofragmenten. Op nos.nl, waar ze ook REM voorkomen, worden ze ook ondersteund. REM - Programmalink controle van NPO en NPOLive samengevoegd met prid-check, REM vanwege de livestream van NPO 3, die als enige 'live' niet in de url REM heeft. REM - Gerepareerd: escape characters in videolinks van Collegerama TU Delft. REM - De :Formats_xxx subroutines teruggebracht tot één grote. REM - Overzicht ondersteunde websites onder :Help ingekort. REM 15-11-2015 v1.2: - Extra FOR-loop toegevoegd voor eventueel achtervoegsel in rtl-embed-link. REM - :NPO opgedeeld in :NPO_meta en :NPO. REM - Ondersteuning toegevoegd voor: NPODoc, Eenvandaag, Telegraaf en Disney REM videoclips. REM - Door ondersteuning van Telegraaf, :Formats_json2 aangemaakt en :Tweakers REM ondergebracht bij :Input. REM - Door ondersteuning van Eenvandaag, tijdcode-calculaties voor :NPO video- REM fragmenten aan Xidel overgelaten. REM 04-10-2015 v1.1: - Script aanzienlijk verkort door websites en veel voorkomende functies REM onder te verdelen in aparte subroutines. REM - RTVNoord, RTVDrenthe en RTVDrenthe_Live vernieuwd. REM - Ondersteuning toegevoegd voor: Ketnet en 24Kitchen. REM 29-09-2015 v1.0: - Eerste versie. REM REM BatchGemist.bat is geschreven door Reino Wijnsma. REM http://reino.degeelebosch.nl/uitzendinggemist/batchgemist.htm REM Venster (buffer)grootte en kleur wijzigen (https://stackoverflow.com/a/13351373) MODE con: cols=100 lines=32 COLOR 1f FOR /F "tokens=4,5 delims=[.XP " %%A IN ('VER') DO ( IF %%A.%%B LSS 6.1 ( FOR /F "tokens=3" %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\PowerShell\1" /v Install ^| FIND "Install"') DO ( IF NOT "%%A"=="0x1" ( TITLE BatchGemist 1.3 ECHO Venster buffergrootte niet kunnen wijzigen, omdat PowerShell niet is ge‹nstalleerd. ECHO PowerShell 2.0 voor Windows XP: https://www.microsoft.com/en-us/download/details.aspx?id=16818 ECHO PowerShell 2.0 voor Windows Vista x86: https://www.microsoft.com/en-us/download/details.aspx?id=9864 ECHO PowerShell 2.0 voor Windows Vista x64: https://www.microsoft.com/en-us/download/details.aspx?id=9239 ECHO. ECHO. ) ELSE ( powershell -command "&{$H=get-host;$W=$H.ui.rawui;$B=$W.buffersize;$B.width=100;$B.height=1024;$W.buffersize=$B;$W.windowtitle='BatchGemist 1.3';}" ) ) ) ELSE ( powershell -command "&{$H=get-host;$W=$H.ui.rawui;$B=$W.buffersize;$B.width=100;$B.height=1024;$W.buffersize=$B;$W.windowtitle='BatchGemist 1.3';}" ) ) REM ================================================================================================ :Check SET xidel="xidel.exe" SET ffmpeg="ffmpeg.exe" SET check= IF NOT EXIST %xidel% ( SET check=1 ECHO %xidel% niet gevonden. ) IF NOT EXIST %ffmpeg% ( SET check=1 ECHO %ffmpeg% niet gevonden. ) IF NOT EXIST %SystemRoot%\System32\clip.exe ( SET check=1 ECHO "clip.exe" niet gevonden. ) IF DEFINED check ( GOTO Help ) ELSE ( GOTO Input ) REM ================================================================================================ :Input ENDLOCAL SETLOCAL ECHO Voer programmalink in (of 'h' voor hulp): SET /P url= IF /I "%url%"=="h" GOTO Help IF "%url%"=="" GOTO :EOF IF NOT "%url: =%"=="%url%" ( ECHO. ECHO Spaties in programmalink niet toegestaan. ECHO. ECHO. GOTO Input ) ELSE IF NOT "%url:www.npo.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "if (starts-with(//@data-prid,'LI')) then prid:=//@data-prid else ()" --output-format^=cmd^"') DO %%A IF DEFINED prid ( GOTO NPOLive_meta ) ELSE ( GOTO NPO_meta ) ) ELSE IF NOT "%url:gemi.st=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "url:=//input[@id='share_url']/@value" --output-format^=cmd^"') DO %%A GOTO NPO_meta ) ELSE IF NOT "%url:www.npodoc.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=concat(//h5[@class='media-platform-subtitle'],' - ',//h1[@class='media-platform-title h2'],replace(//time[@class='media-platform-date data']/@datetime,'(\d{4})-(\d{2})-(\d{2})',' ($3$2$1)')),prid:=(//@data-media-id)[1]" -f "concat('http://e.omroep.nl/metadata/',$prid)" -e "json(extract($raw,'\((.+)\)',1))/(pubopties:=pubopties,_url:=(streams)()/url,tt888:=tt888)" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO NPO ) ELSE IF NOT "%url:www.schooltv.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=concat(//meta[@property='name']/@content,' (',replace(//dd[span[@property='datePublished']],'-',''),')'),prid:=//div[@class='VideoPlayer js-videoPlayer']/@data-mid" -f "concat('http://e.omroep.nl/metadata/',$prid)" -e "json(extract($raw,'\((.+)\)',1))/(pubopties:=pubopties,tt888:=tt888)" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO NPO ) ELSE IF NOT "%url:nos.nl=%"=="%url%" ( SETLOCAL ENABLEDELAYEDEXPANSION FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "if (//@data-target='.js-video-wrapper') then //a[@data-target='.js-video-wrapper']/@href else $url" -e "name:=concat(//meta[@property='og:title']/@content,replace(//@datetime,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)')),pjson:=[//source/{'format':@type,'file':substring-after(@src,'.nl')}]" --output-encoding^=oem --output-format^=cmd^"') DO %%A FOR /F "delims=" %%A IN ('ECHO !pjson! ^| %xidel% -q - --xquery "replace(replace(replace($raw,'\"','\\"'),'{','{{'),'}','}}')"') DO ( FOR /F "delims=" %%B IN ('^"%xidel% -q -d "%%A" "http://nos.nl/video/resolve/" --xquery "json:=[$json()/{'format':format,'url':file}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-format^=cmd^"') DO %%B ) GOTO Formats ) ELSE IF NOT "%url:eenvandaag.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "var:=concat('EenVandaag - ',extract($raw,'title: \"(.+^)\"',1)),prid:=extract($raw,'prid: \"(.+^)\"',1),ss:=number(extract($raw,'startAt: (.+),',1)),to:=number(extract($raw,'endAt: (.+),',1)),t:=($to)-($ss)" -f "concat('http://e.omroep.nl/metadata/',$prid)" -e "json(extract($raw,'\((.+)\)',1))/(name:=concat($var,replace(.//sko_dt,'(\d{4})(\d{2})(\d{2})',' ($3$2$1)')),pubopties:=pubopties)" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO NPO ) ELSE IF NOT "%url:www.101.tv=%"=="%url%" ( SETLOCAL ENABLEDELAYEDEXPANSION FOR /F %%A IN ("%url%") DO ( FOR /F "delims=" %%B IN ('^"%xidel% -q --input-format=xml-strict "http://media.bnn.nl/video/%%~nA/bnntv" -e "name:=//title,pjson:=[{'file':substring-after(//file,'.nl')}]" --output-encoding^=oem --output-format^=cmd^"') DO %%B ) FOR /F "delims=" %%A IN ('ECHO !pjson! ^| %xidel% -q - --xquery "replace(replace(replace($raw,'\"','\\"'),'{','{{'),'}','}}')"') DO ( FOR /F "delims=" %%B IN ('^"%xidel% -q -d "%%A" "http://nos.nl/video/resolve/" -e "_url:=$json()/file" --output-format^=cmd^"') DO %%B ) GOTO Task ) ELSE IF NOT "%url:www.rtlxl.nl=%"=="%url%" ( FOR /F %%A IN ("%url%") DO SET "uuid=%%~nA" GOTO rtlXL ) ELSE IF NOT "%url:www.rtl.nl/system/videoplayer=%"=="%url%" ( FOR /F "tokens=2 delims==" %%A IN ("%url%") DO ( FOR /F "tokens=1 delims=/" %%B IN ("%%A") DO SET "uuid=%%B" ) GOTO rtlXL ) ELSE IF NOT "%url:www.rtlnieuws.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q --user-agent "Mozilla Firefox" "%url%" -e "uuid:=extract(//div[@class='videoContainer']//@src,'=(.+)\/',1)" --output-format^=cmd^"') DO %%A GOTO rtlXL ) ELSE IF NOT "%url:www.kijk.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=concat(//h1[@class='page-heading']/@title,' - ',(//@data-title)[1],replace(//meta[@property='og:video:release_date']/@content,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)'))" -f "replace(replace(//meta[@name='video_src']/@content,'federated_f9','htmlFederated'),'videoId','@videoPlayer')" -e "json(extract($raw,'experienceJSON = ({.+});',1))//mediaDTO/(videoid:=id,meta:=(renditions)()[size='0']/defaultURL)" -f "$meta" --xquery "json:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {'format':string(extract(.,'BANDWIDTH=(\d+)',1) idiv 1000),'resolution':extract(.,'RESOLUTION=(.+),C',1),'url':concat(resolve-uri('.'),extract(.,'(.+m3u8)',1))}],formats:=concat('meta, ',join(for $x in $json()/format order by $x return $x,', ')),best:=extract($formats,'(.+, )(.+)',2)" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.omropfryslan.nl/live=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "var:=json(extract($raw,'sources: (.+])\s+}',1,'s'))" -f "$var(1)/file" -e "meta:=$url,json:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {'format':string(extract(.,'BANDWIDTH=(\d+)',1) idiv 1000),'url':concat(resolve-uri('.'),extract(.,'(.+m3u8)',1))},{'format':concat('rtsp_',extract($var(2)/file,'_(.+)',1)),'url':replace($var(2)/file,'rtmp','rtsp')}],formats:=concat('meta, ',join($json()/format,', ')),best:=extract($formats,'(.+, )(.+)',2)" --output-format^=cmd^"') DO %%A FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=Omrop Fryslân - Live TV ^(%%A%%B%%C^)" GOTO Formats ) ELSE IF NOT "%url:www.omropfryslan.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=concat(substring-before(//meta[@property='og:title']/@content,' |'),replace(//meta[@property='article:published_time']/@content,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)')),_url:=extract($raw,'file: \"(.+^)\",',1)" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Task ) ELSE IF NOT "%url:www.rtvnoord.nl/live=%"=="%url%" ( FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO ( FOR /F "delims=" %%D IN ('^"%xidel% -q "%url%" -f "//iframe/@src" -f "//@src" -f "extract($raw,'playlist: \"(.+^)\",',1)" -e "name:=concat('RTV Noord - ',(//title)[1],' (%%A%%B%%C)'),hls:=//@file" --output-encoding^=oem --output-format^=cmd^"') DO %%D ) GOTO NPOLive ) ELSE IF NOT "%url:www.rtvnoord.nl/tv/programma=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=concat(//div[@class='media-details']/h3,replace(//@data-media,'.+?(\d+).{3}(\d{2})(\d{2}).+',' ($3$2$1)')),_url:=//@data-media" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Task ) ELSE IF NOT "%url:www.rtvnoord.nl/nieuws=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" --xquery "json:=[//div[@data-button='player-still-overlay icon-play']/{position()||'e':{'name':concat(replace(@title,'["']',''),replace(//@datetime,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)')),'url':@data-media}}],videos:=join($json()(),', ')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.rtvdrenthe.nl/tv/programma=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=concat(//div[@class='media-details']/h3,replace(//@data-media,'.+?(\d{4})(\d{2})(\d{2}).+',' ($3$2$1)')),_url:=//@data-media" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Task ) ELSE IF NOT "%url:www.rtvdrenthe.nl/tv=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "//@data-media" -e "meta:=$url,json:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {'format':string(extract(.,'BANDWIDTH=(\d+)',1) idiv 1000),'url':concat(resolve-uri('.'),extract(.,'(.+m3u8)',1))}],formats:=concat('meta, ',join($json()/format,', ')),best:=extract($formats,'(.+, )(.+)',2)" --output-format^=cmd^"') DO %%A FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=RTV Drenthe - Live TV ^(%%A%%B%%C^)" GOTO Formats ) ELSE IF NOT "%url:www.rtvdrenthe.nl/nieuws=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" --xquery "json:=[//div[@data-button='player-still-overlay icon-play']/{position()||'e':{'name':concat(replace(@title,'["']',''),replace(//@datetime,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)')),'url':@data-media}}],videos:=join($json()(),', ')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.rtvnh.nl/live/tv=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "var:=json(replace(extract($raw,'sources: (.+),\s+]',1,'s'),'rtmp','rtsp')||']')" -f "$var()[type='hls']/file" --xquery "meta:=$url,json:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {'format':string(extract(.,'BANDWIDTH=(\d+)',1) idiv 1000),'url':concat(resolve-uri('.'),extract(.,'(.+m3u8)',1))},$var()[type!='hls']/{'format':replace(file,'(.{4}).+(_.)','$1$2'),'url':file}],formats:=concat('meta, ',join(for $x in $json()/format order by $x return $x,', ')),best:=extract($formats,'(.+, )(.+)',2)" --output-format^=cmd^"') DO %%A FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=RTV NH - Live TV ^(%%A%%B%%C^)" GOTO Formats ) ELSE IF NOT "%url:www.rtvnh.nl/gemist=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=concat(//meta[@name='og:title']/@content,replace(//a[@class='video-player']/@href,'.+(\d{4})\/(\d{2})\/(\d{2}).+',' ($3$2$1)'))" -f "concat('http://www.rtvnh.nl/media/smil/video/',substring-after(//div[@class='video-container']/@id,'video'))" --xquery "json:=[//@src/{'format':concat('http',extract(.,'(_.+)\.',1)),'url':concat('http://rtvnh-dl1.streamgate.nl/',substring-after(.,'content2/'))},//@src/concat(replace(//@base,'rtmp','http'),substring-after(.,'mp4:'),'/playlist.m3u8') ! {'format':string(extract(tokenize(unparsed-text(.),'#EXT-X-STREAM-INF:')[position()>1],'BANDWIDTH=(\d+)',1) idiv 1000),'url':concat(substring-before(.,'playlist'),extract(tokenize(unparsed-text(.),'#EXT-X-STREAM-INF:')[position()>1],'(.+m3u8)',1))}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.rtvnh.nl/nieuws=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" --xquery "name:=concat(replace(//meta[@property='og:title']/@content,'["']',''),replace(//meta[@property='article:published_time']/@content,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)'))" -f "concat('http://www.rtvnh.nl/media/smil/video/',(//@data-video)[2])" --xquery "json:=[//@src/{'format':concat('http',extract(.,'(_.+)\.',1)),'url':concat('http://rtvnh-dl1.streamgate.nl/',substring-after(.,'content2/'))},//@src/concat(replace(//@base,'rtmp','http'),substring-after(.,'mp4:'),'/playlist.m3u8') ! {'format':string(extract(tokenize(unparsed-text(.),'#EXT-X-STREAM-INF:')[position()>1],'BANDWIDTH=(\d+)',1) idiv 1000),'url':concat(substring-before(.,'playlist'),extract(tokenize(unparsed-text(.),'#EXT-X-STREAM-INF:')[position()>1],'(.+m3u8)',1))}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.omroepflevoland.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=concat(//meta[@property='og:title']/@content,replace(//meta[@property='article:published_time']/@content,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)')),var:=json(extract($raw,concat((//div[@class='jwplayercontainer'])[1]/div/@id,'.+?sources:(.+?}])'),1,'s'))()/{'format':replace(file,'(.{4}).+\.(.+)','$1_$2'),'url':file}" -f "$var[format='http_m3u8']/url" --xquery "meta:=$url,json:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {'format':string(extract(.,'BANDWIDTH=(\d+)',1) idiv 1000),'url':concat(resolve-uri('.'),extract(.,'(.+m3u8)',1))},$var[format!='http_m3u8']],formats:=concat('meta, ',join(for $x in $json()/format order by $x return $x,', ')),best:=extract($formats,'(.+, )(.+)',2)" --output-encoding^=oem --output-format^=cmd^"') DO %%A IF NOT DEFINED name ( FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=Omroep Flevoland - Live TV ^(%%A%%B%%C^)" ) GOTO Formats ) ELSE IF NOT "%url:www.rtvoost.nl/tv/live=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "extract($raw,'\$.+\"(.+^)\"',1)" -e "hls:=$json//file" --output-format^=cmd^"') DO %%A FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=RTV Oost - Live TV ^(%%A%%B%%C^)" GOTO NPOLive ) ELSE IF NOT "%url:www.rtvoost.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=//meta[@property='og:title']/@content" -f "//iframe/@src" -f "extract($raw,'\$.+\"(.+^)\"',1)" --xquery "json:=[($json//sources)()/{'format':label,'url':file}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=extract($formats,'(.+, )(.+)',2)" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.at5.nl/live=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q --input-format=json "http://www.at5.nl/video/json?s=live" -f "($json//def)()[type='hls']/file" --xquery "meta:=$url,json:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {'format':string(extract(.,'BANDWIDTH=(\d+)',1) idiv 1000),'url':concat(resolve-uri('.'),extract(.,'(.+m3u8)',1))},{'format':'rtsp_360p','url':replace(($json//def)()[type='rtmp']/file,'rtmp','rtsp')}],formats:=concat('meta, ',join(for $x in $json()/format order by $x return $x,', ')),best:=extract($formats,'(.+, )(.+)',2)" --output-format^=cmd^"') DO %%A FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=AT5 - Live TV ^(%%A%%B%%C^)" GOTO Formats ) ELSE IF NOT "%url:www.at5.nl/gemist=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=concat(//meta[@name='og:title']/@content,replace(//a[@class='video-player']/@href,'.+(\d{4})\/(\d{2})\/(\d{2}).+',' ($3$2$1)'))" -f "xquery version '3.0'; extract($raw,'file: '(.+smil.+)' ',1)" --xquery "json:=[//@src/{'format':concat('http',extract(.,'(_.+)\.',1)),'url':concat('http://rtvnh-dl1.streamgate.nl/',substring-after(.,'content2/'))},//@src/concat(replace(//@base,'rtmp','http'),substring-after(.,'mp4:'),'/playlist.m3u8') ! {'format':string(extract(tokenize(unparsed-text(.),'#EXT-X-STREAM-INF:')[position()>1],'BANDWIDTH=(\d+)',1) idiv 1000),'url':concat(substring-before(.,'playlist'),extract(tokenize(unparsed-text(.),'#EXT-X-STREAM-INF:')[position()>1],'(.+m3u8)',1))}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.at5.nl/artikelen=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" --xquery "name:=concat(replace(//meta[@property='og:title']/@content,'["']',''),replace(//meta[@property='article:published_time']/@content,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)'))" -f "concat('http://www.at5.nl/embedder/smil?m=',(//@data-video)[2])" --xquery "json:=[//@src/{'format':concat('http',extract(.,'(_.+)\.',1)),'url':concat('http://rtvnh-dl1.streamgate.nl/',substring-after(.,'content2/'))},//@src/concat(replace(//@base,'rtmp','http'),substring-after(.,'mp4:'),'/playlist.m3u8') ! {'format':string(extract(tokenize(unparsed-text(.),'#EXT-X-STREAM-INF:')[position()>1],'BANDWIDTH=(\d+)',1) idiv 1000),'url':concat(substring-before(.,'playlist'),extract(tokenize(unparsed-text(.),'#EXT-X-STREAM-INF:')[position()>1],'(.+m3u8)',1))}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.rtvutrecht.nl/live=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "prid:=extract($raw,'\"prid\": \"(.+^)\"',1)" --output-format^=cmd^"') DO %%A GOTO NPOLive_meta ) ELSE IF NOT "%url:www.rtvutrecht.nl/gemist=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" --xquery "name:=concat(substring-before(//h2[@class='h2-large-met-grijs border-top'][1],' -'),replace($_url,'.+(\d{4})\/(\d{2})\/(\d{2}).+',' ($3$2$1)')),_url:=extract($raw,'file: '(.+)',',1)" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Task ) ELSE IF NOT "%url:www.rtvutrecht.nl/nieuws=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=concat(//p[@class='margin-bottom-5 fragment-bijschrift'],replace($_url,'.+(\d{4})\/(\d{2})\/(\d{2}).+',' ($3$2$1)')),_url:=extract($raw,'file: \"(.+^)\"',1)" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Task ) ELSE IF NOT "%url:www.omroepgelderland.nl/tv/programma=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=concat(//div[@class='media-details']/h3,replace(binary-to-string(base64Binary(//div/@data-id)),'.+?\|(\d{4})(\d{2})(\d{2}).+',' ($3$2$1)')),_url:=//@data-media" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Task ) ELSE IF NOT "%url:www.omroepgelderland.nl/tv=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "//@data-media" -e "meta:=$url,json:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {'format':string(extract(.,'BANDWIDTH=(\d+)',1) idiv 1000),'url':extract(.,'(.+m3u8)',1)}],formats:=concat('meta, ',join($json()/format,', ')),best:=extract($formats,'(.+, )(.+)',2)" --output-format^=cmd^"') DO %%A FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=Omroep Gelderland - Live TV ^(%%A%%B%%C^)" GOTO Formats ) ELSE IF NOT "%url:www.omroepgelderland.nl/nieuws=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" --xquery "json:=[//div[@data-button='player-still-overlay icon-play']/{position()||'e':{'name':concat(replace(@title,'["']',''),replace(//@datetime,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)')),'url':@data-media}}],videos:=join($json()(),', ')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.omroepwest.nl/tv/programma=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "//@data-script" --xquery "json(extract($raw,'var opts = (.+);',1))/(uri:=replace(publicationData/defaultMediaAssetPath,'https','http'),clipData/(name:=replace(title,'(\d{4})-(\d{2})-(\d{2}).+- (.+)','$4 ($3$2$1)'),json:=[(assets)()/{'format':bandwidth,'url':concat($uri,src)}])),formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.omroepwest.nl/tv=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "//@data-script" --xquery "json:=json(extract($raw,'var opts = (.+);',1))/clipData/[(assets)()/{'format':string(extract(tokenize(unparsed-text(src),'#EXT-X-STREAM-INF:')[position()>1],'BANDWIDTH=(\d+)',1) idiv 1000),'url':concat('http:',substring-before(src,'playlist'),extract(tokenize(unparsed-text(src),'#EXT-X-STREAM-INF:')[position()>1],'(.+m3u8)',1))}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-format^=cmd^"') DO %%A FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=Omroep West - Live TV ^(%%A%%B%%C^)" GOTO Formats ) ELSE IF NOT "%url:www.omroepwest.nl/nieuws=%"=="%url%" ( REM of (let $uri:=replace(...) return clipData/...) FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" --xquery "json:=[//div[@data-button='player-still-overlay icon-play']/{position()||'e':{'name':concat(replace(@title,'["']',''),replace(//@datetime,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)')),'formats':json(extract(unparsed-text(@data-script),'var opts = (.+);',1))/((uri:=replace(publicationData/defaultMediaAssetPath,'https','http'))[0],clipData/(assets)()/{'format':bandwidth,'url':concat($uri,src)})}}],videos:=join($json()(),', ')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.rijnmond.nl/tv/programma=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "//@data-script" --xquery "json(extract($raw,'var opts = (.+);',1))/(uri:=replace(publicationData/defaultMediaAssetPath,'https','http'),clipData/(name:=concat(substring-before(title,' -'),replace(publisheddate,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)')),json:=[(assets)()/{'format':bandwidth,'url':concat($uri,src)}])),formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.rijnmond.nl/tv=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "//@data-script" --xquery "json:=json(extract($raw,'var opts = (.+);',1))/clipData/[(assets)()/{'format':string(extract(tokenize(unparsed-text(src),'#EXT-X-STREAM-INF:')[position()>1],'BANDWIDTH=(\d+)',1) idiv 1000),'url':concat('http:',substring-before(src,'playlist'),extract(tokenize(unparsed-text(src),'#EXT-X-STREAM-INF:')[position()>1],'(.+m3u8)',1))}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-format^=cmd^"') DO %%A FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=RTV Rijnmond - Live TV ^(%%A%%B%%C^)" GOTO Formats ) ELSE IF NOT "%url:www.rijnmond.nl/nieuws=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" --xquery "json:=[//div[@data-button='player-still-overlay icon-play']/{position()||'e':{'name':concat(replace(@title,'["']',''),replace(//@datetime,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)')),'formats':json(extract(unparsed-text(@data-script),'var opts = (.+);',1))/((uri:=replace(publicationData/defaultMediaAssetPath,'https','http'))[0],clipData/(assets)()/{'format':bandwidth,'url':concat($uri,src)})}}],videos:=join($json()(),', ')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.omroepzeeland.nl/streams/tv=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "//script/@src" --xquery "json:=json(extract($raw,'var opts = (.+);',1))/clipData/[(assets)()[mediatype='MP4_IPOD']/{'format':string(extract(tokenize(unparsed-text(src),'#EXT-X-STREAM-INF:')[position()>1],'BANDWIDTH=(\d+)',1) idiv 1000),'url':concat(substring-before(src,'playlist'),extract(tokenize(unparsed-text(src),'#EXT-X-STREAM-INF:')[position()>1],'(.+m3u8)',1))}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-format^=cmd^"') DO %%A FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=Omroep Zeeland - Live TV ^(%%A%%B%%C^)" GOTO Formats ) ELSE IF NOT "%url:www.omroepzeeland.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "concat('http://omroepzeeland.bbvms.com/p/OmroepZeelandDefault/c/',//@data-bbwid,'.js')" --xquery "json(extract($raw,'var opts = (.+);',1))/(uri:=publicationData/defaultMediaAssetPath,clipData/(name:=concat(title,replace(publisheddate,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)')),json:=[(assets)()/{'format':bandwidth,'url':concat($uri,src)}])),formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.omroepbrabant.nl/Portal=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "//@data-url" -f "json(extract($raw,'var opts = (.+);',1))/clipData/(assets)()[mediatype='MP4_IPOD']/src" -f "//meta[@rel='streamer']" --xquery "meta:=$url,json:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {'format':string(extract(.,'BANDWIDTH=(\d+)',1) idiv 1000),'url':extract(.,'(.+m3u8)',1)}],formats:=concat('meta, ',join(for $x in $json()/format order by $x return $x,', ')),best:=extract($formats,'(.+, )(.+)',2)" --output-format^=cmd^"') DO %%A FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=Omroep Brabant - Live TV ^(%%A%%B%%C^)" GOTO Formats ) ELSE IF NOT "%url:www.omroepbrabant.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "//@data-url" --xquery "json(extract($raw,'var opts = (.+);',1))/clipData/(name:=concat(title,replace(publisheddate,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)')),json:=[(assets)()/{'format':bandwidth,'url':src}]),formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.l1.nl/epg_nowon/popup/tv=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "//iframe/@src" -e "prid:=extract($raw,'prid: \"(.+^)\"',1)" --output-format^=cmd^"') DO %%A GOTO NPOLive_meta ) ELSE IF NOT "%url:www.l1.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "if (//div[@class='hoofdafbeelding video']) then //div[@class='hoofdafbeelding video']//@href else $url" -f "//div[@class='field-item odd']/script/@src" --xquery "json(extract($raw,'var opts = (.+);',1))/(uri:=publicationData/defaultMediaAssetPath,clipData/(name:=concat(title,replace(publisheddate,'(\d{4})-(\d{2})-(\d{2}).+',' ($3$2$1)')),json:=[(assets)()/{'format':bandwidth,'url':concat($uri,src)}])),formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.telegraaf.nl=%"=="%url%" ( REM ... -e "()" -f "xquery version '3.0'; extract($raw,'loadPlayer\('(.+)',',1)" ... (-e "()" voor bug workaround) REM ... --follow-kind=xquery3 -f "extract($raw,'loadPlayer\('(.+)',',1)" ... (komt hopelijk in volgende versie) FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "()" -f "xquery version '3.0'; extract($raw,'loadPlayer\('(.+)',',1)" --xquery "name:=//title,json:=[//location/{'format':integer(@s1:height),'url':.}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:nickelodeon.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=concat(//meta[@itemprop='name']/@content,replace(//meta[@itemprop='uploadDate']/@content,'(\d+)-(\d+)-(\d+)',' ($3$2$1)'))" -f "//div[@class='player-wrapper']/@data-mrss" -f "//media:content/@url" -e "json:=[//rendition/{'format':integer(@bitrate),'resolution':concat(@width,'x',@height),'url':src}],formats:=join($json()/format,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:ketnet.be=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "json(extract($raw,'playerConfig = ({.+})',1))/(name:=.//episode,meta:=.//hls)" -f "$meta" --xquery "json:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {'format':string(extract(.,'BANDWIDTH=(\d+)',1) idiv 1000),'url':concat(resolve-uri('.'),extract(.,'(.+m3u8)',1))}],formats:=concat('meta, ',join(for $x in $json()/format order by $x return $x,', ')),best:=extract($formats,'(.+, )(.+)',2)" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:video.disney.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" --xquery "json(substring-before(substring-after($raw,'burger='),':('))/(name:=.//externals//name,json:=[(.//flavors)()/{'format':concat('mp4_',bitrate),'resolution':concat(width,'x',height),'url':url}]),formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:www.disney.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "json(extract($raw,'Config = (.+?);',1,'s'))/(eid:=entryId,pid:=partnerId)" -f "concat('http://cdnapi.kaltura.com/api_v3/index.php?widgetId=',$pid,'&service=session&format=1&apiVersion=3.1&expiry=86400&action=startWidgetSession')" -e "sig:=$json/ks" -f "concat('http://cdnapi.kaltura.com/api_v3/index.php?1:version=-1&2:service=flavorAsset&service=multirequest&format=1&2:action=getbyentryid&clientTag=kdp:v3.8.5&ks=',$sig,'&1:service=baseentry&2:entryId=',$eid,'&apiVersion=3.1.5&action=null&1:entryId=',$eid,'&1:action=get')" -e "burl:=$json(1)/dataUrl,pformats:=$json(2)()/{'format':if (isOriginal='true') then 'source' else concat(fileExt,'_',bitrate),'resolution':concat(width,'x',height),'url':concat($burl,'/flavorId/',id,'?referrer=aHR0cDovL3d3dy5kaXNuZXkubmw=')},fids:=join($json(2)()[isWeb='true']/id,',')" -f "concat(substring-before($burl,'format'),'flavorIds/',$fids,'/format/applehttp/protocol/http?referrer=aHR0cDovL3d3dy5kaXNuZXkubmw=')" --xquery "meta:=$url,json:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {'format':string(extract(.,'BANDWIDTH=(\d+)',1)idiv 1000),'resolution':extract(.,'.RESOLUTION=(.+),C',1),'url':extract(.,'(.+m3u8)',1)},$pformats],formats:=concat('meta, ',join(for $x in $json()/format order by $x return $x,', ')),best:=extract($formats,'(.+, )(.+)',2)" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:24kitchen.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=substring-before(//meta[@name='title']/@content,' |')" -f "extract($raw,'tp:releaseUrl=\"(.+^)\"',1)" --xquery "json:=[//video/{'format':(integer(@system-bitrate) idiv 1000),'resolution':concat(@width,'x',@height),'url':@src}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:dumpert.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q -H "Cookie: nsfw=1;cpc=10" --user-agent "Mozilla Firefox" "%url%" -f "if (//@data-files) then $url else //meta[@property='og:url']/@content" -e "name:=//meta[@name='title']/@content,let $var:=json(binary-to-string(base64Binary(//div/@data-files))) return json:=[$var()[.!='still'] ! {'format':.,'url':$var(.)}],formats:=join($json()/format,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:comedycentral.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=(//h2)[1]" -f "//div[@class='media_player']/@data-mrss" -f "//media:content/@url" -e "json:=[//rendition/{'format':@bitrate,'resolution':concat(@width,'x',@height),'url':src}],formats:=join($json()/format,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:nl.funnyclips.cc=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=//meta[@property='og:title']/@content" -f "xquery version '3.0'; extract($raw,'{}, '(.+)'',1)" -f "//media:content/@url" -e "json:=[//rendition/{'format':integer(@bitrate),'resolution':concat(@width,'x',@height),'url':src}],formats:=join($json()/format,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:mtv.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=//h1[@class='page-title']" -f "if (//meta[@property='og:video']) then extract(//meta[@property='og:video']/@content,'mrss=(.+)&mrssvars',1) else json(extract($raw,'window.pagePlaylist = (.+);',1))(1)/mrss" -f "//media:content/@url" --xquery "json:=[//rendition/{'format':integer(@bitrate),'resolution':concat(@width,'x',@height),'url':replace(src,'rtmpe','rtmp')}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:tweakers.net=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q --method^=POST "%url%" -f "if (//iframe) then //iframe/@src else $url" -e "id:=extract($raw,'\"videoId\":(.+?),',1)" -f "json('['||extract($raw,'embedSWF.+?({.+})\)',1)||']')//playlist_url" -e "name:=concat(//title,'-',$id),json:=[//location/{'format':integer(@s1:height),'url':.}],formats:=join($json()/format,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats ) ELSE IF NOT "%url:collegerama.tudelft.nl=%"=="%url%" ( SETLOCAL ENABLEDELAYEDEXPANSION FOR /F "tokens=2 delims=:." %%X IN ('CHCP') DO SET codepage=%%X CHCP 1252>NUL REM FOR /F %%A IN ('^"%xidel% -q -e "extract('%url%','y\/(.+)\?',1)"^"') DO ( FOR /F "tokens=5 delims=/?" %%A IN ("%url%") DO ( FOR /F "delims=" %%B IN ('^"%xidel% -q -H "Content-Type: application/json" -d "{{\"getPlayerOptionsRequest\":{{\"ResourceId\":\"%%A\",\"QueryString\":\"\"}}}}" https://collegerama.tudelft.nl/Mediasite/PlayerService/PlayerService.svc/json/GetPlayerOptions -e "$json/(name:=concat(join((.//Presenters/Name),', '),' - ',.//Title,' (',join(tokenize(.//AirDate,'-') ^! (if (. < 10) then '0'||. else .),''),')'),_url:=(.//VideoUrls)()[MediaType='MP4']/Location)" --output-format^=cmd^"') DO %%B ) CHCP !codepage!>NUL GOTO Task ) ELSE ( ECHO. ECHO Ongeldige programmalink. ECHO. ECHO. GOTO Input ) REM ================================================================================================ :NPO_meta REM Terwijl voor "Content-Type: text/html" --output-encoding=oem voldoende is, is voor "application/javascript" en "application/json" CHCP nodig FOR /F "tokens=2 delims=:." %%X IN ('CHCP') DO SET codepage=%%X CHCP 1252>NUL FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=concat(substring-before(//title,' kijk je op npo.nl'),replace($url,'.+(\d{2})-(\d{2})-(\d{4}).+',' ($1$2$3)'))" -f "concat('http://e.omroep.nl/metadata/',(//@data-prid)[1])" -e "json(extract($raw,'\((.+)\)',1))/(prid:=prid,pubopties:=pubopties,streams:=streams,t:=if (tijdsduur instance of string) then hours-from-time(tijdsduur)*3600+minutes-from-time(tijdsduur)*60+seconds-from-time(tijdsduur) else (),ss:=hours-from-time(start)*3600+minutes-from-time(start)*60+seconds-from-time(start),to:=hours-from-time(eind)*3600+minutes-from-time(eind)*60+seconds-from-time(eind),tt888:=tt888)" --output-format^=cmd^"') DO %%A CHCP %codepage%>NUL GOTO NPO REM ================================================================================================ :NPO SETLOCAL ENABLEDELAYEDEXPANSION IF DEFINED pubopties ( REM ... -e "string-join(extract(extract($raw,'\"(.+^)\"',1),'^(.{5})((.*?)(\d)(.*?)(\d)(.*)|(.{6})(.)(.)(.*))(.{5})$',(1,3,6,5,4,7,8,10,9,11,12)))" ... FOR /F %%A IN ('^"%xidel% -q "http://ida.omroep.nl/npoplayer/i.js" -e "replace(extract($raw,'\"(.+^)\"',1),'^(.{5})((.*?)(\d)(.*?)(\d)(.*)|(.{6})(.)(.)(.*))(.{5})$','$1$3$6$5$4$7$8$10$9$11$12')"^"') DO ( FOR /F %%B IN ('ECHO %pubopties% ^| %xidel% -q - -e "$json()"') DO ( FOR /F "delims=" %%C IN ('^"%xidel% -q "http://ida.omroep.nl/odi/?prid=%prid%&puboptions=%%B&adaptive=yes&token=%%A" -e "$json/if (success) then substring-before((streams)(),'p&callback') else 'error'"^"') DO ( IF "%%C"=="error" ( IF NOT DEFINED pformats ( ECHO. ECHO Video niet beschikbaar. ECHO. ECHO. ENDLOCAL GOTO Input ) ) ELSE ( IF "%%B"=="adaptive" ( REM FOR /F %%D IN ('^"%xidel% -q "%%C" -e "$json/if (errorstring) then 'error' else url"^"') DO ( REM IF "%%D"=="error" ( REM ECHO. REM ECHO Video niet beschikbaar. REM ECHO. REM ECHO. REM ENDLOCAL REM GOTO Input REM ) ELSE ( REM {"errorstring":"De opgevraagde aflevering is niet beschikbaar."} verschijnt alleen i.c.m. "HTTP/1.1 404 Not Found", maar Xidel accepteerd alleen "HTTP/1.1 200 OK", dus als de video niet beschikbaar is, dan geeft dit op dit moment wel een foutmelding FOR /F "delims=" %%D IN ('^"%xidel% -q "%%C" -e "meta:=$json/url" --output-format^=cmd^"') DO %%D FOR /F "delims=" %%D IN ('^"%xidel% -q "!meta!" -e "tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ^! {'format':string(extract(.,'BANDWIDTH=(\d+)',1) idiv 1000),'resolution':extract(.,'RESOLUTION=(.+)',1),'url':concat(resolve-uri('.'),extract(.,'(.+m3u8)',1))}"^"') DO ( IF DEFINED aformats ( SET "aformats=!aformats!%%D" ) ELSE ( SET "aformats=%%D" ) ) ) ELSE ( FOR /F "delims=" %%D IN ('^"%xidel% -q "%%C" -e "if (errorcode=0) then {'format':'%%B','url':substring-before($json/url,'?')} else ()"^"') DO ( IF DEFINED pformats ( SET "pformats=!pformats!%%D" ) ELSE ( SET "pformats=%%D" ) ) ) ) ) ) ) IF DEFINED aformats ( IF DEFINED pformats ( FOR /F "delims=" %%A IN ('ECHO !aformats!!pformats! ^| %xidel% -q - --xquery "json:=[$json],formats:=concat('meta, ',join(for $x in $json()/format order by $x return $x,', ')),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-format^=cmd') DO %%A ) ELSE ( FOR /F "delims=" %%A IN ('ECHO !aformats! ^| %xidel% -q - --xquery "json:=[$json],formats:=concat('meta, ',join(for $x in $json()/format order by $x return $x,', ')),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-format^=cmd') DO %%A ) ) ELSE ( FOR /F "delims=" %%A IN ('ECHO !pformats! ^| %xidel% -q - --xquery "json:=[$json],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')" --output-format^=cmd') DO %%A ) ) ELSE IF DEFINED streams ( FOR /F "delims=" %%A IN ('ECHO %streams% ^| %xidel% -q - -e "streams:=$json,pjson:=$json()[formaat^!='wmv']/serialize-json({'format':concat(formaat,'_',kwaliteit),'file':substring-after(url,'.nl')})" -d "[{(join($pjson,', '))}]" "http://nos.nl/video/resolve/" --xquery "json:=[$json()/{'format':format,'url':file},$streams()[formaat='wmv']/{'format':concat(formaat,'_',kwaliteit),'url':url}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=max(tokenize(if (contains($formats,'h264')) then (if (contains($formats,'wmv')) then substring-before($formats,', wmv') else $formats) else $formats,', '))" --output-format^=cmd^"') DO %%A ) ELSE ( ECHO. ECHO Video niet beschikbaar. ECHO. ECHO. ENDLOCAL GOTO Input ) GOTO Formats REM ================================================================================================ :NPOLive_meta FOR /F "tokens=2 delims=:." %%X IN ('CHCP') DO SET codepage=%%X CHCP 1252>NUL FOR /F "delims=" %%A IN ('^"%xidel% -q "http://e.omroep.nl/metadata/%prid%" -e "json(extract($raw,'\((.+)\)',1))/(name:=titel,hls:=(streams)()[type='hls']/url)" --output-format^=cmd^"') DO %%A FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=%name% - Live TV ^(%%A%%B%%C^)" CHCP %codepage%>NUL GOTO NPOLive REM ================================================================================================ :NPOLive FOR /F "delims=" %%A IN ('^"%xidel% -q "http://ida.omroep.nl/npoplayer/i.js" -f "concat('http://ida.omroep.nl/aapi/?stream=%hls%&token=',replace(extract($raw,'\"(.+^)\"',1),'^(.{5})((.*?)(\d)(.*?)(\d)(.*)|(.{6})(.)(.)(.*))(.{5})$','$1$3$6$5$4$7$8$10$9$11$12'))" -f "$json/if (success) then stream else ()" --xquery "meta:=$url,json:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {'format':string(extract(.,'BANDWIDTH=(\d+)',1) idiv 1000),'resolution':extract(.,'RESOLUTION=(.+)',1),'url':concat(resolve-uri('.'),extract(.,'(.+m3u8)',1))}],formats:=concat('meta, ',join(for $x in $json/format order by $x return $x,', ')),best:=extract($formats,'(.+, )(.+)',2)" --output-format^=cmd^"') DO %%A IF NOT DEFINED meta ( ECHO. ECHO Livestream niet beschikbaar. ECHO. ECHO. GOTO Input ) GOTO Formats REM ================================================================================================ :rtlXL FOR /F "tokens=2 delims=:." %%X IN ('CHCP') DO SET codepage=%%X CHCP 1252>NUL FOR /F "delims=" %%A IN ('^"%xidel% -q "http://www.rtl.nl/system/s4m/vfd/version=2/uuid=%uuid%/fmt=adaptive/" --xquery "name:=$json/concat(abstracts/name,' - ',replace(if (.//classname='uitzending') then episodes/name else .//title,'"',''),replace((.//marketing_params)()[label='sko_dt']/value,'(\d{4})(\d{2})(\d{2})',' ($3$2$1)'))" -f "$json/if (meta/nr_of_videos_total=0) then () else concat(meta/videohost,material/videopath)" --xquery "meta:=$url,json:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {'format':string(extract(.,'BANDWIDTH=(\d+)',1) idiv 1000),'resolution':extract(.,'RESOLUTION=(.+)',1),'url':extract(.,'(.+m3u8)',1)},{'format':'pg-sd','resolution':'512x288','url':concat('http://pg.us.rtl.nl/rtlxl/network/a2m/progressive/',substring-before(substring-after($meta,'/adaptive/'),'.m3u8'),'.mp4')},{'format':'pg-hd','resolution':'1280x720','url':concat('http://pg.us.rtl.nl/rtlxl/network/a3m/progressive/',substring-before(substring-after($meta,'/adaptive/'),'.m3u8'),'.mp4')}],formats:=concat('meta, ',join(for $x in $json()/format order by $x return $x,', ')),best:=extract($formats,'(.+, )(.+)',2)" --output-format^=cmd^"') DO %%A CHCP %codepage%>NUL IF NOT DEFINED meta ( ECHO. ECHO Video nog niet, of niet meer beschikbaar. ECHO. ECHO. GOTO Input ) GOTO Formats REM ================================================================================================ :Formats SETLOCAL ENABLEDELAYEDEXPANSION IF DEFINED videos ( ECHO. ECHO Beschikbare video's: %videos% SET /P "video=Kies gewenste video: " FOR /F %%A IN ('^"%xidel% -q -e "if (matches('%videos%','!video!')) then '!video!' else 'error'"^"') DO ( IF "%%A"=="error" ( ECHO. ECHO Ongeldige video. ECHO. ECHO. ENDLOCAL GOTO Input ) ) FOR /F "delims=" %%A IN ('ECHO !json! ^| %xidel% -q - --xquery "if ($json//formats) then (formats:=join(for $x in $json()('!video!')/(formats)()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3')) else ()" --output-format^=cmd') DO %%A ) IF DEFINED formats ( ECHO. ECHO Beschikbare formaten: %formats% SET /P "format=Voer gewenst formaat in: [%best%] " IF "!format!"=="" SET "format=%best%" FOR /F %%A IN ('^"%xidel% -q -e "if (matches('%formats%','!format!')) then '!format!' else 'error'"^"') DO ( IF "%%A"=="error" ( ECHO. ECHO Ongeldig formaat. ECHO. ECHO. ENDLOCAL GOTO Input ) ) IF DEFINED videos ( FOR /F "delims=" %%A IN ('ECHO !json! ^| %xidel% -q - -e "$json()('%video%')/(name:=name,_url:=(formats)()[format='!format!']/url)" --output-encoding^=oem --output-format^=cmd') DO %%A ) ELSE IF "!format!"=="meta" ( SET "_url=%meta%" ) ELSE ( FOR /F "delims=" %%A IN ('ECHO !json! ^| %xidel% -q - -e "if (starts-with($json()[format='!format!']/url,'youtube:')) then replace($json()[format='!format!']/url,'youtube:','https://youtu.be/') else $json()[format='!format!']/url"') DO ( IF "%%~xA"==".asf" ( FOR /F "delims=" %%B IN ('^"%xidel% -q "%%A" -e "_url:=//@href" --output-format^=cmd^"') DO %%B ) ELSE ( SET "_url=%%A" ) ) ) ) ELSE ( FOR /F "delims=" %%A IN ('ECHO !json! ^| %xidel% -q - -e "$json()('%video%')/(name:=name,_url:=url)" --output-encoding^=oem --output-format^=cmd') DO %%A ) GOTO Task REM ================================================================================================ :Task ECHO. SET /P "task=Videolink achterhalen, of Downloaden? [V/d] " IF /I "%task%"=="d" GOTO Download IF DEFINED ss ( FOR /F "delims=" %%A IN ('^"%xidel% -q -e "_url:=concat('%_url%?start=',round(%ss%),'&end=',round(%to%))" --output-format^=cmd^"') DO %%A ) ECHO. ECHO Videolink: ECHO %_url% ECHO|SET /P ="%_url:^=%"|clip.exe ECHO. ECHO Videolink gekopieerd naar het klembord. ECHO. ECHO. ENDLOCAL ENDLOCAL GOTO Input REM ================================================================================================ :Download ECHO. ECHO Doelmap: %~dp0 SET /P "remap=Wijzigen? [J/n] " IF /I "%remap%"=="n" ( SET "map=%~dp0" ) ELSE ( SET /P "map=Opslaan in: " ) IF NOT "%map:~-1%"=="\" SET "map=%map%\" FOR /F "tokens=1 delims=?" %%A IN ("%_url%") DO ( IF /I "%%~xA"==".m4a" SET "ext=.m4a" IF /I "%%~xA"==".m4v" SET "ext=.mp4" IF /I "%%~xA"==".mp4" SET "ext=.mp4" IF /I "%%~xA"==".m3u8" SET "ext=.mp4" IF /I "%%~xA"==".asf" SET "ext=.wmv" ) ECHO. FOR /F "delims=" %%A IN ('^"%xidel% -q -e "name:=replace(replace(replace('%name%',':','-'),'^\s+|\s+$',''),'[<>/\\|?*^^]','')" --output-encoding^=oem --output-format^=cmd^"') DO %%A ECHO Bestandsnaam: %name% SET /P "rename=Wijzigen? [J/n] " SETLOCAL ENABLEDELAYEDEXPANSION IF /I "%rename%"=="n" ( SET "filename=%name%%ext%" ) ELSE ( SET /P "name=Nieuwe bestandsnaam: " SET "filename=!name!%ext%" ) IF "%tt888%"=="ja" ( ECHO. SET /P "subs=Ondertiteling Downloaden? [j/N] " IF /I "!subs!"=="j" ( SET subs=1 ) ELSE ( SET subs= ) ) IF NOT "%_url:mms://=%"=="%_url%" SET "_url=%_url:mms://=mmsh://%" ECHO. IF DEFINED ss ( %ffmpeg% -hide_banner -ss %ss% -i "%_url%" -t %t% -c copy -bsf:a aac_adtstoasc -flags global_header "!map!%filename%" IF DEFINED subs ECHO. & %ffmpeg% -hide_banner -ss %ss% -sub_charenc CP1252 -i "http://e.omroep.nl/tt888/%prid%" -t %t% "!map!%name%.srt" ) ELSE ( SET /P "part=Fragment downloaden? [j/N] " IF /I "!part!"=="j" ( SET /P "ss=Voer begintijd in (in seconden, of als uu:mm:ss[.xxx]) []: " SET /P "t=Voer tijdsduur in (in seconden, of als uu:mm:ss[.xxx]) []: " ECHO. IF NOT DEFINED ss ( %ffmpeg% -hide_banner -i "%_url%" -t !t! -c copy -bsf:a aac_adtstoasc -flags global_header "!map!%filename%" IF DEFINED subs ECHO. & %ffmpeg% -hide_banner -sub_charenc CP1252 -i "http://e.omroep.nl/tt888/%prid%" -t !t! "!map!%name%.srt" ) ELSE IF "!ss!"=="0" ( %ffmpeg% -hide_banner -i "%_url%" -t !t! -c copy -bsf:a aac_adtstoasc -flags global_header "!map!%filename%" IF DEFINED subs ECHO. & %ffmpeg% -hide_banner -sub_charenc CP1252 -i "http://e.omroep.nl/tt888/%prid%" -t !t! "!map!%name%.srt" ) ELSE IF NOT DEFINED t ( %ffmpeg% -hide_banner -ss !ss! -i "%_url%" -c copy -bsf:a aac_adtstoasc -flags global_header "!map!%filename%" IF DEFINED subs ECHO. & %ffmpeg% -hide_banner -ss !ss! -sub_charenc CP1252 -i "http://e.omroep.nl/tt888/%prid%" "!map!%name%.srt" ) ELSE ( %ffmpeg% -hide_banner -ss !ss! -i "%_url%" -t !t! -c copy -bsf:a aac_adtstoasc -flags global_header "!map!%filename%" IF DEFINED subs ECHO. & %ffmpeg% -hide_banner -ss !ss! -sub_charenc CP1252 -i "http://e.omroep.nl/tt888/%prid%" -t !t! "!map!%name%.srt" ) ) ELSE ( ECHO. %ffmpeg% -hide_banner -i "%_url%" -c copy -bsf:a aac_adtstoasc -flags global_header "!map!%filename%" IF DEFINED subs ECHO. & %ffmpeg% -hide_banner -sub_charenc CP1252 -i "http://e.omroep.nl/tt888/%prid%" "!map!%name%.srt" ) ) ECHO. ECHO. ENDLOCAL ENDLOCAL ENDLOCAL GOTO Input REM ================================================================================================ :Help ECHO. ECHO [Beschrijving] ECHO BatchGemist is een batchscript om video's van verscheidene websites te downloaden, of de ECHO videolink ervan te achterhalen. ECHO. ECHO [Benodigdheden] ECHO - xidel.exe (http://videlibri.sourceforge.net/xidel.html#downloads) ECHO Xidel is het hart van BatchGemist en is verantwoordelijk voor het ontleden van zo'n beetje ECHO alle gegevens. ECHO Download Xidel en plaats 'xidel.exe' in dezelfde map als dit batchscript, of wijzig de ECHO programma-map in dit script onder ":Check". ECHO - ffmpeg.exe (http://ffmpeg.zeranoe.com/builds) ECHO Met de gegenereerde videolink als invoer zorgt FFMpeg ervoor dat de video effici‰nt wordt ECHO gedownload. ECHO Download FFMpeg en plaats 'ffmpeg.exe' in dezelfde map als dit batchscript, of wijzig de ECHO programma-map in dit script onder ":Check". ECHO - clip.exe (http://www.c3scripts.com/tutorials/msdos/clip.zip) [Windows XP] ECHO Clip kopieert de videolink naar het klembord. Vanaf Windows Vista wordt 'clip.exe' standaard ECHO meegeleverd, dus dit is alleen voor Windows XP gebruikers. ECHO Download Clip en plaats 'clip.exe' in de C:\WINDOWS\system32 map. ECHO. ECHO [Ondersteunde websites] ECHO www.omropfryslan.nl/ www.omroepgelderland.nl/ www.npo.nl/ ECHO www.rtvnoord.nl/ www.omroepwest.nl/ gemi.st/ ECHO www.rtvdrenthe.nl/ www.rijnmond.nl/ www.npodoc.nl/ ECHO www.rtvnh.nl www.omroepzeeland.nl/ www.schooltv.nl/ ECHO www.omroepflevoland.nl www.omroepbrabant.nl/ www.nos.nl/ ECHO www.rtvoost.nl/ www.l1.nl/ www.eenvandaag.nl/ ECHO www.at5.nl www.101.tv/ ECHO www.rtvutrecht.nl ECHO. PAUSE ECHO. ECHO www.rtlxl.nl/ www.telegraaf.nl www.dumpert.nl ECHO www.rtl.nl/system/.../video_embed.html#uuid=... www.comedycentral.nl ECHO www.rtlnieuws.nl/ www.nickelodeon.nl nl.funnyclips.cc ECHO www.kijk.nl/ www.ketnet.be www.mtv.nl ECHO video.disney.nl tweakers.net ECHO www.disney.nl collegerama.tudelft.nl ECHO www.24kitchen.nl ECHO. ECHO [Gebruik] ECHO Surf naar ‚‚n van de ondersteunde websites en kopieer de programmalink van een gewenst ECHO programma. Start dit batch-script en plak deze link d.m.v. rechtermuis-knop + plakken (Ctrl+V ECHO werkt hier niet). ECHO. ECHO Dan volgt een opsomming van beschikbare formaten en wordt er gevraagd een keuze te maken. ECHO E‚n formaat, tussen blokhaken, is altijd voorgeselecteerd. Voor dit formaat kun je gewoon op ECHO ENTER drukken. Formaten met alleen een getal zijn dynamische videostreams, de rest is van de ECHO progressieve variant. Deze stap wordt overgeslagen als er maar ‚‚n formaat beschikbaar is. ECHO. ECHO De ja/nee-vragen die dan volgen spreken voor zich. Bij '[J/n]' kun je voor 'ja' gewoon op ECHO ENTER drukken. Voor 'nee' moet je wel 'n' invullen. ECHO. ECHO Druk op ENTER om BatchGemist af te sluiten. ECHO. ECHO. IF DEFINED check ( PAUSE & GOTO :EOF ) ELSE ( GOTO Input )