@ECHO off CLS REM BatchGemist.bat versie 1.2 REM REM Veranderingslogboek: 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 voor NPODoc, Eenvandaag, Telegraaf en Disney videoclips REM toegevoegd. 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 voor Ketnet en 24Kitchen toegevoegd. 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 TITLE BatchGemist 1.2 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 ) IF NOT "%url:www.npo.nl/live=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "prid:=//@data-prid" --output-format^=cmd^"') DO %%A GOTO NPOLive ) ELSE IF NOT "%url:www.npo.nl=%"=="%url%" ( GOTO NPO_meta ) ELSE IF NOT "%url:www.npodoc.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "(prid:=//div[@class='media-player media-platform-media-player']/@data-media-id,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'),')'))" -f "concat('http://e.omroep.nl/metadata/',$prid)" -e "json(extract($raw,'\((.+)\)',1))/(pubopties:=pubopties,_url:=(streams)()/url,tt888:=tt888)" --output-format^=cmd^"') DO %%A IF DEFINED pubopties ( GOTO NPO ) ELSE ( GOTO Task ) ) ELSE IF NOT "%url:gemi.st=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "url:=//meta[@name='og:url']/@content" --output-format^=cmd^"') DO %%A GOTO NPO_meta ) ELSE IF NOT "%url:eenvandaag.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "ss:=round(number(extract($raw,'startAt:(.+),',1))),to:=round(number(extract($raw,'endAt: (.+),',1))),t:=($to)-($ss)" -f "xquery version '3.0'; concat('http://gemi.st/',extract($raw,'prid: "(.+)",',1))" -e "url:=//meta[@name='og:url']/@content" --output-format^=cmd^"') DO %%A GOTO NPO_meta ) 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.kijk.nl=%"=="%url%" ( GOTO Kijk ) ELSE IF NOT "%url:www.omropfryslan.nl/live=%"=="%url%" ( REM ... --follow-kind=xquery3 -f "extract($raw,'file: "(.+)"',1)" ... (komt hopelijk in volgende versie) REM ... -e "()" -f "xquery version '3.0'; extract($raw,'file: "(.+)"',1)" ... (-e "()" voor bug workaround) FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=substring-before(//meta[@property='og:title']/@content,' |')" -f "json(extract($raw,'file: (.+)',1))" -e "(meta:=$url,m3u8:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {\"format\":(extract(.,'BANDWIDTH=(.+)',1) idiv 1000),\"url\":concat(resolve-uri('.'),extract(.,'(.*m3u8)',1))}],formats:=concat('meta, ',join($m3u8()/format,', ')),best:=extract($formats,'(.+, )(.+)',2))" --output-encoding^=oem --output-format^=cmd^"') DO %%A SETLOCAL ENABLEDELAYEDEXPANSION FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=!name! ^(%%A%%B%%C^)" GOTO Formats_m3u8 ) ELSE IF NOT "%url:www.omropfryslan.nl=%"=="%url%" ( REM ... _url:=//meta[@itemprop='contenturl']/@content ... FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" --xquery "(_url:=extract($raw,'file: "(.+)",',1),name:=substring-before(//meta[@property='og:title']/@content,' |'))" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Task ) ELSE IF NOT "%url:www.rtvnoord.nl/live=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "//iframe/@src" --xquery "prid:=extract($raw,'prid: "(.+)",',1)" --output-format^=cmd^"') DO %%A GOTO NPOLive ) ELSE IF NOT "%url:www.rtvnoord.nl/=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "(_url:=(//@data-media)[1],name:=concat(//meta[@property='og:title']/@content,' (',//span/@data-short-date,')'))" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Task ) ELSE IF NOT "%url:www.rtvdrenthe.nl/nieuws=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "(_url:=(//@data-media)[1],name:=concat(//meta[@property='og:title']/@content,' (',//span/@data-short-date,')'))" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Task ) ELSE IF NOT "%url:www.rtvdrenthe.nl/tv/programma=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "(_url:=(//@data-media)[1],name:=concat(//meta[@property='og:title']/@content,' (',//span/@data-short-date,')'))" --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%" -e "name:=replace(//title,'(.+)( - )(.+)','$3$2$1')" -f "//@data-media" -e "(meta:=$url,m3u8:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {\"format\":(extract(.,'BANDWIDTH=(.+),C',1) idiv 1000),\"url\":concat(resolve-uri('.'),extract(.,'(.*m3u8)',1))}],formats:=concat('meta, ',join($m3u8()/format,', ')),best:=extract($formats,'(.+, )(.+)',2))" --output-encoding^=oem --output-format^=cmd^"') DO %%A SETLOCAL ENABLEDELAYEDEXPANSION FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=!name! ^(%%A%%B%%C^)" GOTO Formats_m3u8 ) ELSE IF NOT "%url:www.telegraaf.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "()" -f "xquery version '3.0'; extract($raw,'loadPlayer\('(.+)',',1)" --xquery "(json:=[//location/{\"format\":integer(@s1:height),\"url\":.}],formats:=join(for $x in $json()/format order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3'),name:=//title)" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats_json2 ) 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 "substring-after(//meta[@itemprop='embedurl']/@content,'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_json ) ELSE IF NOT "%url:ketnet.be=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=//meta[@property='og:title']/@content" -f "json(extract($raw,'playerConfig = ({.+})',1))/source/hls" --xquery "(meta:=$url,m3u8:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {\"format\":(extract(.,'BANDWIDTH=(.+),C',1) idiv 1000),\"url\":concat(resolve-uri('.'),extract(.,'(.*m3u8)',1))}],formats:=concat('meta, ',join(for $x in $m3u8()/format order by $x return $x,', ')),best:=extract($formats,'(.+, )(.+)',2))" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats_m3u8 ) ELSE IF NOT "%url:video.disney.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" --xquery "json(substring-before(substring-after($raw,'burger='),':('))/(json:=.//flavors/[.()/{\"format\":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'),name:=(.//data)[1]/title[1])" --output-encoding^=oem --output-format^=cmd^"') DO %%A GOTO Formats_json ) ELSE IF NOT "%url:24kitchen.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=substring-before(//meta[@name='title']/@content,' |')" -f "xquery version '3.0'; 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_json ) ELSE IF NOT "%url:dumpert.nl=%"=="%url%" ( GOTO Dumpert ) ELSE IF NOT "%url:comedycentral.nl=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=if (contains($url,'comedycentral')) then //span[@data-foreign_type='LocalPlaylist']/@data-title else //meta[@property='og:title']/@content" -f "xquery version '3.0'; extract($raw,'mrss(\s+): '(.+)',',2)" -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_json ) ELSE IF NOT "%url:nl.funnyclips.cc=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=if (contains($url,'comedycentral')) then //span[@data-foreign_type='LocalPlaylist']/@data-title else //meta[@property='og:title']/@content" -f "xquery version '3.0'; extract($raw,'mrss(\s+): '(.+)',',2)" -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_json ) ELSE IF NOT "%url:mtv.nl/shows=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "name:=//h3/a" -f "json(extract($raw,'window.pagePlaylist = (.+);',1))()/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_json ) ELSE IF NOT "%url:tweakers.net=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q -e "extract('%url%','(\d+)',1)"^"') DO ( FOR /F "delims=" %%B IN ('^"%xidel% -q "http://tweakers.net/video/s1playlist/%%A/playlist.xspf" -e "(json:=[//location/{\"format\":integer(@s1:height),\"url\":.}],formats:=join($json()/format,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3'),name:=concat(//title,'-',%%A))" --output-encoding^=oem --output-format^=cmd^"') DO %%B ) GOTO Formats_json2 ) ELSE IF NOT "%url:collegerama.tudelft.nl=%"=="%url%" ( 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/(_url:=(.//VideoUrls)()[MediaType='MP4']/Location,name:=concat(join((.//Presenters/Name),', '),' - ',.//Title,' (',join(tokenize(.//AirDate,'-') ! (if (. < 10) then '0'||. else .),''),')'))" --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 "tokens=4-6 delims=/" %%A IN ("%url%") DO ( SET "prid=%%B" IF "%%C"=="" ( FOR /F "delims=" %%D IN ('^"%xidel% -q "http://e.omroep.nl/metadata/%%B" -e "json(extract($raw,'\((.+)\)',1))/(pubopties:=pubopties,streams:=streams,tt888:=tt888,name:=concat(if (aflevering_titel) then (if (titel=aflevering_titel) then titel else concat(titel,' - ',aflevering_titel)) else titel,' (',replace('%%A','-',''),')'))" --output-format^=cmd^"') DO %%D ) ELSE ( FOR /F "delims=" %%D IN ('^"%xidel% -q "http://e.omroep.nl/metadata/%%C" -e "json(extract($raw,'\((.+)\)',1))/(pubopties:=pubopties,streams:=streams,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),t:=hours-from-time(tijdsduur)*3600+minutes-from-time(tijdsduur)*60+seconds-from-time(tijdsduur),tt888:=tt888,name:=concat(concat(serie/serie_titel,' - ',titel),' (',replace('%%A','-',''),')'))" --output-format^=cmd^"') DO %%D ) ) CHCP %codepage%>NUL GOTO NPO REM ================================================================================================ :NPO SETLOCAL ENABLEDELAYEDEXPANSION IF DEFINED pubopties ( REM ... -e "string-join(extract(extract($raw,'\"(.+^)\"',1),'^(.{5})((.*?)([0-9])(.*?)([0-9])(.*)|(.{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})((.*?)([0-9])(.*?)([0-9])(.*)|(.{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 (streams)() else 'error'"^"') DO ( IF "%%C"=="error" ( IF NOT DEFINED json ( ECHO. ECHO Video niet beschikbaar. ECHO. ECHO. ENDLOCAL GOTO Input ) ) ELSE ( IF "%%B"=="adaptive" ( REM FOR /F %%D IN ('^"%xidel% -q "%%C&type=json" -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&type=json" -f "$json/url" --xquery "(meta:=$url,m3u8:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ^! {\"format\":(extract(.,'.BANDWIDTH=(.+),C',1) idiv 1000),\"resolution\":extract(.,'.RESOLUTION=(.*)',1),\"url\":concat(resolve-uri('.'),extract(.,'(.*m3u8)',1))}],aformats:=concat('meta, ',join(for $x in $m3u8/format order by $x return $x,', ')))" --output-format^=cmd^"') DO %%D ) ELSE ( FOR /F "delims=" %%D IN ('^"%xidel% -q "%%C&type=json" -e "if ((errorcode)=0) then {\"%%B\": $json/concat(protocol,'://',server,path)} else ()"^"') DO ( IF DEFINED json ( SET "json=!json!%%D" ) ELSE ( SET "json=%%D" ) ) ) ) ) ) FOR /F "delims=" %%D IN ('ECHO !json! ^| %xidel% -q - -e "pformats:=join($json(),', ')" --output-format^=cmd') DO %%D ) IF DEFINED aformats ( SET "formats=!aformats!^^, !pformats!" ) ELSE ( SET "formats=!pformats!" ) FOR /F "delims=" %%A IN ('^"%xidel% -q -e "best:=extract('!formats!','(.+, )(.+)',2)" --output-format^=cmd^"') DO %%A ) ELSE IF DEFINED streams ( FOR /F "delims=" %%A IN ('ECHO %streams% ^| %xidel% -q - --xquery "(formats:=join(for $x in $json()/concat(formaat,'_',kwaliteit) order by $x return $x,', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3'))" --output-format^=cmd') DO %%A ) ELSE ( ECHO. ECHO Video niet beschikbaar. ECHO. ECHO. ENDLOCAL GOTO Input ) 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 streams ( FOR /F "tokens=1,2 delims=_" %%A IN ("%format%") DO ( FOR /F %%C IN ('ECHO %streams% ^| %xidel% -q - -e "$json()[formaat='%%A'][kwaliteit=%%B]/url"') DO ( IF "%%~xC"==".asf" ( FOR /F "delims=" %%D IN ('^"%xidel% -q "%%C" -e "//@href"^"') DO SET "_url=%%D" ) ELSE ( SET "_url=%%C" ) ) ) ) ELSE IF "%format%"=="meta" ( SET "_url=%meta%" ) ELSE ( FOR /F %%A IN ('^"%xidel% -q -e "if (matches('%aformats%','%format%')) then 'adaptive' else 'progressive'"^"') DO ( IF "%%A"=="adaptive" ( FOR /F "delims=" %%B IN ('ECHO !m3u8! ^| %xidel% -q - -e "_url:=$json()[format=%format%]/url" --output-format^=cmd') DO %%B ) ELSE ( FOR /F "delims=" %%B IN ('ECHO !json! ^| %xidel% -q - -e "_url:=$json/%format%" --output-format^=cmd') DO %%B ) ) ) ECHO. SET /P "task=Videolink achterhalen, of Downloaden? [V/d] " IF /I "%task%"=="d" GOTO Download IF DEFINED ss ( SET "_url=%_url%?start=%ss%&end=%to%" ) ECHO. ECHO Videolink: ECHO !_url! ECHO|SET /P ="!_url!"|clip.exe ENDLOCAL ECHO. ECHO Videolink gekopieerd naar het klembord. ECHO. ECHO. GOTO Input REM ================================================================================================ :NPOLive 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))/(hls:=(streams)()[type='hls']/url,name:=concat(titel,' - ',info))" --output-format^=cmd^"') DO %%A CHCP %codepage%>NUL FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=%name% ^(%%A%%B%%C^)" FOR /F %%A IN ('^"%xidel% -q "http://ida.omroep.nl/npoplayer/i.js" -e "replace(extract($raw,'\"(.+^)\"',1),'^(.{5})((.*?)([0-9])(.*?)([0-9])(.*)|(.{6})(.)(.)(.*))(.{5})$','$1$3$6$5$4$7$8$10$9$11$12')"^"') DO ( FOR /F "delims=" %%B IN ('^"%xidel% -q "http://ida.omroep.nl/aapi/?stream=%hls%&token=%%A&type=jsonp" -e "$json/if (success) then (stream) else 'error'"^"') DO ( IF "%%B"=="error" ( ECHO. ECHO Livestream niet beschikbaar. ECHO. ECHO. GOTO Input ) ELSE ( FOR /F "delims=" %%C IN ('^"%xidel% -q "%%B" -f "json(extract($raw,'\((.+)\)',1))" --xquery "(meta:=$url,m3u8:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {\"format\":(extract(.,'.BANDWIDTH=(.+),C',1) idiv 1000),\"resolution\":extract(.,'.RESOLUTION=(.*)',1),\"url\":concat(resolve-uri('.'),extract(.,'(.*m3u8)',1))}],formats:=concat('meta, ',join(for $x in $m3u8/format order by $x return $x,', ')),best:=extract($formats,'(.+, )(.+)',2))" --output-format^=cmd^"') DO %%C ) ) ) 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. GOTO Input ) ) SETLOCAL ENABLEDELAYEDEXPANSION IF "%format%"=="meta" ( SET "_url=%meta%" ) ELSE ( FOR /F "delims=" %%A IN ('ECHO !m3u8! ^| %xidel% -q - -e "_url:=$json()[format=%format%]/url" --output-format^=cmd') DO %%A ) GOTO Task 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 "$json/(meta:=if ((meta/nr_of_videos_total)=0) then 'error' else concat(meta/videohost,material/videopath),name:=concat(abstracts/name,' - ',replace(if ((classes/classname)='uitzending') then (episodes/name) else (material/title),'"',''),' (',replace((material/marketing_params)()[label='sko_dt']/value,'(\d{4})(\d{2})(\d{2})','$3$2$1'),')'))" --output-format^=cmd^"') DO %%A CHCP %codepage%>NUL IF "%meta%"=="error" ( ECHO. ECHO Video niet ^(meer^) beschikbaar. ECHO. ECHO. GOTO Input ) ELSE ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%meta%" --xquery "(m3u8:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {\"format\":(extract(.,'.BANDWIDTH=(.+),C',1) idiv 1000),\"resolution\":extract(.,'.RESOLUTION=(.*)',1),\"url\":extract(.,'(.*m3u8)',1)}],formats:=concat('meta, ',join(for $x in $m3u8()/format order by $x return $x,', '),', pg-sd, pg-hd'),best:=extract($formats,'(.+, )(.+)',2))" --output-format^=cmd^"') DO %%A ) 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. GOTO Input ) ) SETLOCAL ENABLEDELAYEDEXPANSION IF "%format%"=="meta" ( SET "_url=%meta%" ) ELSE IF "%format%"=="pg-sd" ( FOR /F "delims=" %%A IN ('ECHO %meta% ^| %xidel% -q - -e "_url:=concat('http://pg.us.rtl.nl/rtlxl/network/a2m/progressive/',substring-before(substring-after($raw,'/adaptive/'),'.m3u8'),'.mp4')" --output-format^=cmd') DO %%A ) ELSE IF "%format%"=="pg-hd" ( FOR /F "delims=" %%A IN ('ECHO %meta% ^| %xidel% -q - -e "_url:=concat('http://pg.us.rtl.nl/rtlxl/network/a3m/progressive/',substring-before(substring-after($raw,'/adaptive/'),'.m3u8'),'.mp4')" --output-format^=cmd') DO %%A ) ELSE ( FOR /F "delims=" %%A IN ('ECHO !m3u8! ^| %xidel% -q - -e "_url:=$json()[format=%format%]/url" --output-format^=cmd') DO %%A ) GOTO Task REM ================================================================================================ :Kijk FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "replace(replace(//meta[@name='video_src']/@content,'federated_f9','htmlFederated'),'videoId','@videoPlayer')" -e "(json:=(var:=json(extract($raw,'experienceJSON = ({.+});',1))//mediaDTO/renditions)/[.()/{\"format\":(encodingRate idiv 1000),\"resolution\":concat(frameWidth,'x',frameHeight),\"url\":defaultURL}],name:=json(extract(.,'experienceJSON = ({.+});',1))/if ((.//sbs_videotype)='clip') then concat(.//displayName,' - ',.//shortDescription) else concat(.//displayName,' (',replace(.//sko_dt,'(\d{4})(\d{2})(\d{2})','$3$2$1'),')'))" -f "$var()[encodingRate='0']/defaultURL" -e "(meta:=$url,m3u8:=[tokenize($raw,'#EXT-X-STREAM-INF:')[position()>1] ! {\"format\":(extract(.,'.BANDWIDTH=(.+),R',1) idiv 1000),\"resolution\":extract(.,'.RESOLUTION=(.+),C',1),\"url\":concat(resolve-uri('.'),extract(.,'(.*m3u8)',1))}])" --output-encoding^=oem --output-format^=cmd^"') DO %%A IF DEFINED m3u8 ( FOR /F "delims=" %%A IN ('ECHO %m3u8% ^| %xidel% -q - -e "(formats:=concat('meta, ',join($json()/format,', ')),best:=extract($formats,'(.+, )(.+)',2))" --output-format^=cmd') DO %%A ) ELSE ( FOR /F "delims=" %%A IN ('ECHO %json% ^| %xidel% -q - --xquery "(formats:=join(for $x in $json()/format order by $x return $x,', '),best:=extract($formats,'(.+, )(.+)',2))" --output-format^=cmd') DO %%A ) 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. GOTO Input ) ) IF "%format%"=="meta" ( SET "_url=%meta%" ) ELSE IF DEFINED m3u8 ( FOR /F "delims=" %%A IN ('ECHO %m3u8% ^| %xidel% -q - -e "_url:=$json()[format=%format%]/url" --output-format^=cmd') DO %%A ) ELSE ( FOR /F "delims=" %%A IN ('ECHO %json% ^| %xidel% -q - -e "_url:=$json()[format=%format%]/url" --output-format^=cmd') DO %%A ) GOTO Task REM ================================================================================================ :Dumpert REM $json() is niet alleen om in een array te kijken, maar ook voor het teruggeven van object namen 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 "(json:=json(binary-to-string(xs:base64Binary(//div/@data-files))),formats:=join($json()[.!='still'],', '),best:=replace($formats,'(.+, )(.+)|(.+)','$2$3'),name:=//meta[@name='title']/@content)" --output-encoding^=oem --output-format^=cmd^"') DO %%A 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. GOTO Input ) ) REM $json('%format%') (JSONiq notation), omdat $json/%format% (XPath notation) niet werkt voor "720p" FOR /F "delims=" %%A IN ('ECHO %json% ^| %xidel% -q - -e "_url:=if (starts-with($json('%format%'),'youtube:')) then replace($json('%format%'),'youtube:','https://youtu.be/') else $json('%format%')" --output-format^=cmd') DO %%A GOTO Task REM ================================================================================================ :Formats_json 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. GOTO Input ) ) FOR /F "delims=" %%A IN ('ECHO %json% ^| %xidel% -q - -e "_url:=$json()[format=%format%]/url" --output-format^=cmd') DO %%A GOTO Task REM ================================================================================================ :Formats_json2 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. GOTO Input ) ) SETLOCAL ENABLEDELAYEDEXPANSION FOR /F "delims=" %%A IN ('ECHO !json! ^| %xidel% -q - -e "_url:=$json()[format=%format%]/url" --output-format^=cmd') DO %%A GOTO Task REM ================================================================================================ :Formats_m3u8 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. GOTO Input ) ) IF "%format%"=="meta" ( SET "_url=%meta%" ) ELSE ( FOR /F "delims=" %%A IN ('ECHO %m3u8% ^| %xidel% -q - -e "_url:=$json()[format=%format%]/url" --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 ECHO. ECHO Videolink: ECHO %_url% ECHO|SET /P ="%_url%"|clip.exe ENDLOCAL ECHO. ECHO Videolink gekopieerd naar het klembord. ECHO. ECHO. 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" ) ) ENDLOCAL ECHO. ECHO. 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 - NPO: ECHO http://gemi.st/POW_00942286 ECHO http://www.npo.nl/nos-journaal/16-08-2015/POW_00942286 ECHO http://www.npo.nl/nieuwsuur/07-07-2015/VPWON_1235827/POMS_NOS_1331442 ECHO http://www.npo.nl/syrische-vluchtelingen-op-kos/16-08-2015/WO_NOS_1723367 ECHO http://www.npo.nl/live/npo-1 ECHO http://www.npodoc.nl/documentaires/series/npo-doc-exclusief/2015/judgement-day-intelligent-d ECHO esign-on-trial.html ECHO. PAUSE ECHO. ECHO http://www.npodoc.nl/speel.WO_VPRO_2448487.html ECHO - Eenvandaag: ECHO http://buitenland.eenvandaag.nl/index.php/tv-items/63207/aanslagen_parijs_zeker_120_doden ECHO - rtlXL: ECHO http://www.rtlxl.nl/#!/rtl-nieuws-132237/5ecba932-9b9e-3add-ba28-d3f20700151a ECHO http://www.rtl.nl/system/videoplayer/derden/rtlnieuws/video_embed.html#uuid=5ecba932-9b9e-3a ECHO dd-ba28-d3f20700151a ECHO - Kijk: ECHO http://www.kijk.nl/sbs6/hartvannederland/videos/vOV0aSAFSpN7/hart-van-nederland-laat16-augus ECHO tus-2015 ECHO - Omrop Fryslƒn: ECHO http://www.omropfryslan.nl/utstjoering/hjoed-fan-16-augustus-2015-1800 ECHO http://www.omropfryslan.nl/live/omrop-fryslan-tv ECHO - RTV Noord: ECHO http://www.rtvnoord.nl/tv/programma/10010/Noord-Vandaag/aflevering/899 ECHO http://www.rtvnoord.nl/nieuws/154365/Bennie-Jolink-Het-klikte-met-Siddeburen ECHO http://www.rtvnoord.nl/live ECHO - RTV Drenthe: ECHO http://www.rtvdrenthe.nl/tv/programma/10/Drenthe-Nu/aflevering/3132 ECHO http://www.rtvdrenthe.nl/tv ECHO - Telegraaf: ECHO http://www.telegraaf.nl/tv/24743150/__Indrukwekkend__de_wereld_rouwt__.html ECHO - Nickelodeon: ECHO http://www.nickelodeon.nl/shows/1427-h2o-just-add-water/videos/45975-metamorfose ECHO - Ketnet: ECHO http://www.ketnet.be/kijken/nachtwacht/panterwezen ECHO - Disney: ECHO http://video.disney.nl/videos/disney-channel-talents-do-you-want-to-build-a-snowman-50a3ed17 ECHO 7d8b883c2aa6b197 ECHO. PAUSE ECHO. ECHO - 24Kitchen: ECHO http://www.24kitchen.nl/shows/makkelijkemaaltijd/recepten/makkelijke-mexicaanse-mole ECHO - Dumpert: ECHO http://www.dumpert.nl/mediabase/6678198/4301bfad/goud._dafne_schippers_wint_200m_bejing_.html ECHO http://www.dumpert.nl/embed/6678198/4301bfad/ ECHO - Comedy Central: ECHO http://www.comedycentral.nl/shows/1647-popoz?video=5ce3525308e64ee1c5f4 ECHO http://nl.funnyclips.cc/populair/72485-new-kids-wilt-gij-ook-een-worstenbroodje ECHO - MTV: ECHO http://www.mtv.nl/shows/1721-my-sex-life-and-everyone-else-s/seizoen/4571/aflevering/54892 ECHO - Tweakers: ECHO http://tweakers.net/video/10704/tweakers-express-2015-sfeerverslag-van-een-bomvolle-gametrei ECHO n.html ECHO https://tweakers.net/video/player/10704/tweakers-express-2015-sfeerverslag-van-een-bomvolle- ECHO gametrein.html?autoPlay=1 ECHO - Collegerama TU Delft ECHO https://collegerama.tudelft.nl/Mediasite/Play/c6867a5e068342018f57ec533b8d84021d?catalog=fd3 ECHO 2fd35-6c99-466c-89d4-cd3c431bc8a4 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 formaat uit te ECHO kiezen. In het geval van NPO.nl zijn de "h264_xxx"-formaten progressief, de rest dynamisch. ECHO 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. PAUSE ECHO. 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 )