Skip to content

Instantly share code, notes, and snippets.

@a-sync
Last active July 9, 2024 20:14
Show Gist options
  • 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 --user-agent "" -o "%%K.mp4" "%%I"
rem yt-dlp -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);
@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!

@mente081
Copy link

mente081 commented Jul 3, 2024

Tisztelettel, kérdezni szeretném, hogy most 2024 júliusában, mivel és hogy lehet letölteni tetszőleges M3-... azonosítójú videót a nemzetiarchivum.hu oldalról? Mert, sajnos, kb. egy hónapja az addigi módszerek már nem működnek. (Legalábbis nekem nem sikerül)

Köszönöm előre is, minden jót!

@a-sync
Copy link
Author

a-sync commented Jul 3, 2024

@mente081 töltsd le a .bat fájl legfrissebb verzióját
image

@mente081
Copy link

mente081 commented Jul 3, 2024

@mente081 töltsd le a .bat fájl legfrissebb verzióját image

Működik! Zseniális! Fantasztikus! A tudás mindig lenyűgöz! Köszönöm szépen!

Nem tudom, szabad-e egy kérdést föltenni?
Mitől van az, hogy a régebben letöltött file-ok mérete is picit kisebb, és a hosszát se mutatja automatikusan?

image

@a-sync
Copy link
Author

a-sync commented Jul 3, 2024

Mitől van az, hogy a régebben letöltött file-ok mérete is picit kisebb, és a hosszát se mutatja automatikusan?

letöltő programtól is függ, vagy más formátum, meta adatok hiánya stb stb.

@mente081
Copy link

mente081 commented Jul 8, 2024

@a-sync Szia!
Elárulod azt a linket, ami alapján az yt letölt, ami régebben – június végéig így nézett ki:
https://strlb2.nava.hu/lbs/rQlnPpEAPXpZePZo/_definst_/amlst:M3-87A60992169999598?type=m3u8&sessid=ckl7zJc9y9g7YBAi8bJAttwSN6CskESvLKMJQugERA6i8onLCKvrhx6h8AHw73tX (abból a "targetes" linkből nyertük)

Addig jutottam, hogy egy ilyen playlist file-t ki tudtam nyerni:
https://stream11.nava.hu/rQlnPpEAPXpZePZo/_definst_/amlst:M3-87A60992169999598/playlist.m3u8?type=m3u8&sessid=ckl7zJc9y9g7YBAi8bJAttwSN6CskESvLKMJQugERA6i8onLCKvrhx6h8AHw73tX&lb=KZy2h%2FdkZAC8za%2Bs2%2BUtLSbrt%2B%2F5pdp5%2FaQQpHxDJuEHBC7D3LdqH2RxX26bSE%2BY1IkrgJeuWLRa%0D%0A7CZHaKs4Cw%3D%3D%0D%0A
de semmit nem csinál, semmire nem megyek vele.

Láttam a programban, hogy itt is, mintha, pl. a \ jeleket kitörlöd meg ilyesmi, mint korábban, de sajnos én eléggé laikus vagyok, hogy rájöjjek lehetőleg nem végtelen időn belül, ezért kérdezném.
Mert ezt a most használatos linket tenném manuálisan az általam eddig használt letöltőbe, ugyanis az kisebb file-okat eredményezett, és ez több száz vagy akár ezer darabnál már számít (össz)méretben. Ezentúl a mostani letöltött műsorokat valamiért a VLC sem játsza, míg a régebbieket igen (egy ugyanazon műsor esetében).

Tisztelet és Köszönet!

@a-sync
Copy link
Author

a-sync commented Jul 8, 2024

Nem változott a link, csak a user agent-nek kell üresnek lennie letöltésnél. Minden ott van a batch fájl forráskódjában. Sok sikert!

@mente081
Copy link

mente081 commented Jul 8, 2024

@a-sync Húú, ez így nekem magas, laikus vagyok, de próbálok beletanulni!

Én a változást úgy értettem, hogy anno elindult a letöltés, most meg nem csinál semmit, de valóban régen is valami streamszám kezdetű linkek dobálták le a darabkákat, de most meg ... akkor valami más változott és én fogalmaztam pontatlanul.

image
Esetleg egy picit amatőröknek is felfoghatóbb támpontot kaphatnék?

Köszönet és bocs a zavarásért!

@a-sync
Copy link
Author

a-sync commented Jul 8, 2024

Változtattak a kiszolgálónál, így mostmár ha nem üresen küldöd a user-agent header-t akkor üres playlist-et kapsz csak vissza.
Itt az utolsó módosítás ami yt-dlp esetén üres user-agent küldést konfigurál: https://gist.github.com/a-sync/14b30f8476dd2323cee0920fb98b0272/revisions#diff-c7afc2394a40a65f39383ea4328f44a83d2e41a3cf2326a5077d16a9c22be706R50
Én továbbra is azt javaslom, hogy használd a fenti működő programot. ☝

@mente081
Copy link

mente081 commented Jul 9, 2024

Változtattak a kiszolgálónál, így mostmár ha nem üresen küldöd a user-agent header-t akkor üres playlist-et kapsz csak vissza. Itt az utolsó módosítás ami yt-dlp esetén üres user-agent küldést konfigurál: https://gist.github.com/a-sync/14b30f8476dd2323cee0920fb98b0272/revisions#diff-c7afc2394a40a65f39383ea4328f44a83d2e41a3cf2326a5077d16a9c22be706R50 Én továbbra is azt javaslom, hogy használd a fenti működő programot. ☝

sajnos néha akad és nem is tölti le rendesen:
csak azt ne mondd, hogy az internetemmel van gond, mert minden más működik és az internet is folyamatosan kifogástalan.
image
és a VLC továbbra sem játsza

@a-sync
Copy link
Author

a-sync commented Jul 9, 2024

Kiszolgálónál lehet a gond, túlterheltek a szerverek, vagy nincs cachelve adott tartalom. Max. találgatni tudok, mivel nálam nem jelentkezik ez a probléma. 🤷‍♂️

A VLC lejátszás/méret/idő metára van egy javításom viszont: a .bat fájl forráskódjában a yt-dlp kezdetű sorban (50.) töröld ki a --fixup "never" paramétert. Kicsit lassabb lehet a letöltés de egyúttal átkonvertálja a szeleteket az ismert hibák javítása érdekében.
A timeout hibára meg talán ha a -N "16" paramétert kitörlöd ugyanott és csak egyesével szedi a szeleteket 🤷‍♂️

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