@ECHO off CLS REM BatchGemist.bat versie 1.0 REM REM Veranderingslogboek: 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.0 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 ) ELSE IF NOT "%url:gemi.st=%"=="%url%" ( FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "url:=//meta[@name='og:video']/@content" --output-format^=cmd^"') DO %%A GOTO NPO ) 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 SET "uuid=%%A" GOTO rtlXL ) ELSE IF NOT "%url:www.kijk.nl=%"=="%url%" ( GOTO Kijk ) ELSE IF NOT "%url:www.omropfryslan.nl/live=%"=="%url%" ( GOTO OmropFryslanLive ) ELSE IF NOT "%url:www.omropfryslan.nl=%"=="%url%" ( GOTO OmropFryslan ) 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/gemist=%"=="%url%" ( GOTO RTVNoord ) ELSE IF NOT "%url:www.rtvdrenthe.nl/tv/programma=%"=="%url%" ( GOTO RTVDrenthe ) ELSE IF NOT "%url:www.rtvdrenthe.nl/tv=%"=="%url%" ( GOTO RTVDrentheLive ) ELSE IF NOT "%url:nickelodeon.nl=%"=="%url%" ( GOTO Nickelodeon ) ELSE IF NOT "%url:dumpert.nl=%"=="%url%" ( GOTO Dumpert ) ELSE IF NOT "%url:comedycentral.nl=%"=="%url%" ( GOTO ComedyCentral ) ELSE IF NOT "%url:nl.funnyclips.cc=%"=="%url%" ( GOTO ComedyCentral ) ELSE IF NOT "%url:mtv.nl/shows=%"=="%url%" ( GOTO Mtv ) ELSE IF NOT "%url:tweakers.net=%"=="%url%" ( GOTO Tweakers ) ELSE IF NOT "%url:collegerama.tudelft.nl=%"=="%url%" ( GOTO Collegerama ) ELSE ( ECHO. ECHO Ongeldige programmalink. ECHO. ECHO. GOTO Input ) REM ================================================================================================ :NPO 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:=start,to:=eind,t:=tijdsduur,tt888:=tt888,name:=concat(concat(serie/serie_titel,' - ',titel),' (',replace('%%A','-',''),')'))" --output-format^=cmd^"') DO %%D ) ) CHCP %codepage%>NUL 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 /A "_ss=((1%ss:~0,2%-100)*3600)+((1%ss:~3,2%-100)*60)+(1%ss:~6,2%-100)" SET /A "_to=((1%to:~0,2%-100)*3600)+((1%to:~3,2%-100)*60)+(1%to:~6,2%-100)" SET "_url=%_url%?start=!_ss!&end=!_to!" ) ECHO. ECHO Videolink: ECHO !_url! ECHO|SET /P ="!_url!"|clip.exe ENDLOCAL ECHO. ECHO Videolink gekopi‰erd 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 ) 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 gekopi‰erd naar het klembord. ECHO. ECHO. GOTO Input 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 ) 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 gekopi‰erd naar het klembord. ECHO. ECHO. GOTO Input 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 ) 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 ECHO. ECHO Videolink gekopi‰erd naar het klembord. ECHO. ECHO. GOTO Input REM ================================================================================================ :OmropFryslan 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 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 ECHO. ECHO Videolink gekopi‰erd naar het klembord. ECHO. ECHO. GOTO Input REM ================================================================================================ :OmropFryslanLive 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 FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=%name% ^(%%A%%B%%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 ) ) 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 ) 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 ECHO. ECHO Videolink gekopi‰erd naar het klembord. ECHO. ECHO. GOTO Input REM ================================================================================================ :RTVNoord FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -f "if (contains($raw,'.mp4')) then $url else resolve-uri(//iframe[@name='videoplayerodgroot']/@src)" --xquery "(_url:=extract($raw,'file: '(.+)',',1),name:=substring-before(//title,' - RTV'))" --output-encoding^=oem --output-format^=cmd^"') DO %%A 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 ECHO. ECHO Videolink gekopi‰erd naar het klembord. ECHO. ECHO. GOTO Input REM ================================================================================================ :RTVDrenthe FOR /F "delims=" %%A IN ('^"%xidel% -q "%url%" -e "(_url:=//@data-media,name:=//div[@class='media-details']/concat(h3,replace(p,'Uitzending(.+) om(.+)','$1$2')))" --output-encoding^=oem --output-format^=cmd^"') DO %%A 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 ECHO. ECHO Videolink gekopi‰erd naar het klembord. ECHO. ECHO. GOTO Input REM ================================================================================================ :RTVDrentheLive 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 FOR /F "tokens=2-4 delims=- " %%A IN ("%date%") DO SET "name=%name% ^(%%A%%B%%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 ) ) 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 ) 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 ECHO. ECHO Videolink gekopi‰erd naar het klembord. ECHO. ECHO. GOTO Input REM ================================================================================================ :Nickelodeon 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 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 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 ECHO. ECHO Videolink gekopi‰erd naar het klembord. ECHO. ECHO. GOTO Input 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 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 ECHO. ECHO Videolink gekopi‰erd naar het klembord. ECHO. ECHO. GOTO Input REM ================================================================================================ :ComedyCentral 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" -e "()" -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 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 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 ECHO. ECHO Videolink gekopi‰erd naar het klembord. ECHO. ECHO. GOTO Input REM ================================================================================================ :Mtv 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 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 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 ECHO. ECHO Videolink gekopi‰erd naar het klembord. ECHO. ECHO. GOTO Input REM ================================================================================================ :Tweakers 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 ) 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 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 gekopi‰erd naar het klembord. ECHO. ECHO. GOTO Input REM ================================================================================================ :Collegerama 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-encoding^=oem --output-format^=cmd^"') DO %%B ) CHCP %codepage%>NUL 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 ECHO. ECHO Videolink gekopi‰erd 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 kopi‰ert 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 - rtlXL: ECHO http://www.rtlxl.nl/#!/rtl-nieuws-132237/5ecba932-9b9e-3add-ba28-d3f20700151a ECHO. PAUSE ECHO. 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/gemist/videoplayerod.asp?v=36329^&size=groot ECHO http://www.rtvnoord.nl/gemist/videogemist.asp?v=36329 ECHO http://www.rtvnoord.nl/live ECHO - RTV Drenthe: ECHO http://www.rtvdrenthe.nl/tv/programma/10/Drenthe-Nu/aflevering/1784 ECHO http://www.rtvdrenthe.nl/tv ECHO - Nickelodeon: ECHO http://www.nickelodeon.nl/shows/1427-h2o-just-add-water/videos/45975-metamorfose 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. PAUSE ECHO. 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 kopi‰er 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 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 )