Skip to content

Instantly share code, notes, and snippets.

@a-sync
Last active February 16, 2024 12:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save a-sync/14b30f8476dd2323cee0920fb98b0272 to your computer and use it in GitHub Desktop.
Save a-sync/14b30f8476dd2323cee0920fb98b0272 to your computer and use it in GitHub Desktop.
m3 archívum URL vagy M3- ill. RADIO- azonosító alapján letölti a műsort yt-dlp segítségével
@if (@a==@b) @end /*
@echo off & setlocal
title m3-downloader.bat @ https://gist.github.com/a-sync
if "%~1"=="/?" goto usage
if %0 == "%~0" (
set /p INPUT="ID/URL: "
) else (
set "INPUT=%~1"
)
if "%INPUT%"=="" goto usage
if /i "%INPUT:~0,5%"=="https" if /i "%INPUT:~6,21%"=="//nemzetiarchivum.hu/" goto valid
if /i "%INPUT:~0,3%"=="M3-" goto valid
if /i "%INPUT:~0,6%"=="RADIO-" goto valid
goto invalid
:valid
where /q yt-dlp
if ERRORLEVEL 1 (
powershell -Command "(New-Object Net.WebClient).DownloadFile('https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe', '%~dp0\yt-dlp.exe')"
)
where /q ffmpeg
if ERRORLEVEL 1 goto dlffmpeg
where /q ffprobe
if ERRORLEVEL 1 goto dlffmpeg
goto main
:dlffmpeg
where /q 7za
if ERRORLEVEL 1 (
powershell -Command "(New-Object Net.WebClient).DownloadFile('https://a-sync.github.io/7z-extra/7za.exe', '%~dp0\7za.exe')"
)
powershell -Command "(New-Object Net.WebClient).DownloadFile('https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.7z', '%~dp0\ffmpeg-release-essentials.7z')"
7za e -y -r ffmpeg-release-essentials.7z ffmpeg.exe ffprobe.exe
del ffmpeg-release-essentials.7z 7za.exe 2>nul
:main
rem echo "%INPUT%";
for /f "tokens=1,2,3 delims=|" %%I in ('cscript /nologo /e:jscript "%~f0" "%INPUT%"') do (
rem echo "%%I"
rem echo "%%J"
rem echo "%%K"
if not exist "%%K.srt" (
powershell -Command "$wc=New-Object Net.WebClient;$wc.Encoding=[System.Text.Encoding]::UTF8;$wc.DownloadString('https://nemzetiarchivum.hu/subtitle/%%J.srt') | Out-File -Encoding utf8 '%cd%\%%J.srt'"
for %%F in ("%cd%\%%J.srt") do (
if %%~zF lss 6 ( del %%F ) else ( ren %%F "%%K.srt" )
)
)
yt-dlp -N "16" --fixup "never" -o "%%K.mp4" "%%I"
rem yt-dlp -N "16" --fixup "never" -f - -o "%%K.mp4" "%%I"
)
goto :EOF
:invalid
echo Ervenytelen ID/URL
echo
:usage
echo Hasznalat: %~nx0 ID/URL
echo pl.: %~nx0 M3-59950991739999859
echo %~nx0 RADIO-851168
echo %~nx0 "https://nemzetiarchivum.hu/*"
if %0 == "%~0" pause
goto :EOF
JScript */
var ID = WSH.Arguments(0);
var UA = String('\x4D\x6F\x7A\x69\x6C\x6C\x61\x2F\x35\x2E\x30\x20\x28\x53\x4D\x41\x52\x54\x2D\x54\x56\x3B\x20\x4C\x69\x6E\x75\x78\x3B\x20\x54\x69\x7A\x65\x6E\x20\x32\x2E\x33\x29\x20\x41\x70\x70\x6C\x65\x57\x65\x62\x6B\x69\x74\x2F\x35\x33\x38\x2E\x31\x20\x28\x4B\x48\x54\x4D\x4C\x2C\x20\x6C\x69\x6B\x65\x20\x47\x65\x63\x6B\x6F\x29\x20\x53\x61\x6D\x73\x75\x6E\x67\x42\x72\x6F\x77\x73\x65\x72\x2F\x31\x2E\x30\x20\x54\x56\x20\x53\x61\x66\x61\x72\x69\x2F\x35\x33\x38\x2E\x31');
var x = new ActiveXObject('Microsoft.XMLHTTP');
var TITLE = '';
if (ID.indexOf('http') === 0) {
x.open('GET',String(ID),true);
x.setRequestHeader('User-Agent',UA);
x.send('');
while (x.readyState!=4) {WSH.Sleep(50)};
if (x.responseText.indexOf('var ACTIVE = "') !== -1) {
ID = x.responseText.split('var ACTIVE = "')[1].split('"')[0];
} else {
ID = x.responseText.split("id: '")[1].split("'")[0];
}
if (x.responseText.indexOf('<h1 class="active-title">') !== -1) {
TITLE = x.responseText.split('<h1 class="active-title">')[1].split('</h1>')[0];
}
if (x.responseText.indexOf('<h6 class="active-subtitle hidden">') !== -1) {
TITLE += ' - '+x.responseText.split('<h6 class="active-subtitle hidden">')[1].split('</h6>')[0];
}
}
var htmlfile = WSH.CreateObject('htmlfile'), JSON;
htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=9" />');
htmlfile.close(JSON = htmlfile.parentWindow.JSON);
if (!TITLE && ID.toLowerCase().indexOf('m3-') === 0){
x.open('GET',String('\x68\x74\x74\x70\x73\x3A\x2F\x2F\x6E\x65\x6D\x7A\x65\x74\x69\x61\x72\x63\x68\x69\x76\x75\x6D\x2E\x68\x75\x2F\x6D\x33\x2F\x69\x74\x65\x6D\x3F\x69\x64\x3D')+ID,true);
x.setRequestHeader('User-Agent',UA);
x.send('');
while (x.readyState!=4) {WSH.Sleep(50)};
var info = JSON.parse(x.responseText);
TITLE = info.title+(info.subtitle?' - '+info.subtitle:'');
}
TITLE = TITLE.replace(/\\|\/|\:|\*|\?|\"|\<|\>|\|/gi, '_');
if (!TITLE) TITLE = ID;
x.open('GET',String('\x68\x74\x74\x70\x73\x3A\x2F\x2F\x6E\x65\x6D\x7A\x65\x74\x69\x61\x72\x63\x68\x69\x76\x75\x6D\x2E\x68\x75\x2F\x6D\x33\x2F\x73\x74\x72\x65\x61\x6D\x3F\x6E\x6F\x5F\x6C\x62\x3D\x31\x26\x74\x61\x72\x67\x65\x74\x3D')+ID,true);
x.setRequestHeader('User-Agent',UA);
x.send('');
while (x.readyState!=4) {WSH.Sleep(50)};
var res = JSON.parse(x.responseText);
WSH.Echo(res.url+'|'+ID+'|'+TITLE);
@a-sync
Copy link
Author

a-sync commented Apr 1, 2020

Minőség beállítása (720p)

A yt-dlp kezdetű sort cseréld ki az alábbira:

    yt-dlp -N "16" --fixup "never" -f "bestvideo[height<=720]+bestaudio/best[height<=720]" -o "%%K.mp4" "%%I"

Minőség választó dokumentáció: https://github.com/yt-dlp/yt-dlp#format-selection

Minőség választó megjelenítése

A yt-dlp kezdetű sort cseréld ki az alábbira:

    yt-dlp -N "16" --fixup "never" -f - -o "%%K.mp4" "%%I"

(2021.12.25-i vagy újabb yt-dlp szükséges)

@bbence84
Copy link

@a-sync: Hello! Elképzelhető, hogy ez a script már nem kezeli az archívum cuccait? A fiamnak szeretném letölteni a Rumini hangoskönyveket (pl.: https://archivum.mtva.hu/radio?series=UnVtaW5p, az egyik rész pl. a RADIO-bE9ndG0yMzdmY0VlWDdTb09jdFNVUT09), de nem igazán akar menni. Nézettem a 41. sor körüli echo-kon keresztül a változók értékét, hogy mivel próbálja hívni a yt letöltőt, de szerintem valami nem jó, mert az m3u8 playlistben nincs semmi... Valami ötlet? :) Nagyon szuper lenne, ha le tudnám tölteni a Rumini részeket. :) Köszi szépen!

@a-sync
Copy link
Author

a-sync commented Jul 23, 2022

... (pl.: https://archivum.mtva.hu/radio?series=UnVtaW5p, az egyik rész pl. a RADIO-bE9ndG0yMzdmY0VlWDdTb09jdFNVUT09),

@bbence84 szia. ha a teljes url-t adod meg tedd idézőjelek közé:
image
nekem legalább is működik fenti url 😐

@bbence84
Copy link

... (pl.: https://archivum.mtva.hu/radio?series=UnVtaW5p, az egyik rész pl. a RADIO-bE9ndG0yMzdmY0VlWDdTb09jdFNVUT09),

@bbence84 szia. ha a teljes url-t adod meg tedd idézőjelek közé: image nekem legalább is működik fenti url 😐

Nagyon köszönöm, így tényleg működik, nem is értem, miért nem próbáltam meg így. :) Nagy lesz az öröm, köszi!

@zoli83
Copy link

zoli83 commented Dec 14, 2023

Domain name-váltás történt (most már https://nemzetiarchivum.hu/m3 oldalon jön be az m3.hu), átírtam az érintett internetes címeket a fájlban, de kód beírása után simán kilép. Mi mást kell(ene) még módosítani benne?

@a-sync
Copy link
Author

a-sync commented Dec 15, 2023

...

@zoli83 köszi, hogy jelezted. frissítettem a scriptet, a szükséges változtatásokat itt láthatod: https://gist.github.com/a-sync/14b30f8476dd2323cee0920fb98b0272/revisions#diff-c7afc2394a40a65f39383ea4328f44a83d2e41a3cf2326a5077d16a9c22be706

@MarianoDiviano
Copy link

MarianoDiviano commented Feb 16, 2024

A tévéműsorok fülön van olyan film, amelynek az URL-je hosszabb, pl. https://nemzetiarchivum.hu/m3/open?id=M3-ODhRbkVqM2ZlRXRpMkxWQm1uR3R3RGhiSnRCcHo5eXZaRU5KT0orR1hMZz0
Ha bemásolom az "M3-ODhRbkVqM2ZlRXRpMkxWQm1uR3R3RGhiSnRCcHo5eXZaRU5KT0orR1hMZz0"-t a program kilép. Van erre valami megoldás?

@a-sync
Copy link
Author

a-sync commented Feb 16, 2024

@MarianoDiviano használd a teljes URL-t (parancssorban tedd idézőjelek közé)
ezt az obfuszkált azonosítót nem tudod közvetlenül megadni.
helyette három opciód van:

  1. megadod a teljes urlt és a progi kivadássza az oldal forrásából a tényleges azonosítót
  2. megnézed az oldal forrását és kivadászod magadnak a tényleges azonosítót (var ITEM = { id: 'M3-87A98996450999896' ...) és azt adod meg
  3. használod a kereshető archívumot: https://m3.devs.space és ott kikeresed adott adás tényleges azonosítóját és azt adod meg

sok sikert!

@MarianoDiviano
Copy link

@a-sync Nagyon nagyon köszönöm a segítséget! Mindegyik módszerrel működött, de ez a 3, opció egyszerűen lenyűgöző! Gondolom ez is a te alkotásod, le a kalappal!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment