Torrent – avagy keresés, csere és letöltés nagyüzemben

Mit tegyen az ember, ha korona vírus miatt otthon van? Írjon Linuxos blogot, vagy hallgasson hangoskönyvet? Van egy oldal, ahol ingyenesen és legálisan tölthetünk le hangoskönyveket torrent, vagy egyéb megoldással. Az oldalt mindenki ismeri, ez a MEK. Bár maga az oldal is ad letöltési lehetőséget a hangoskönyvekre, de én jobban szeretem a torrent oldalukat, mert egyszerűbb számomra.
A mai példában azt fogjuk körbejárni, hogy egy oldalról az összes megfelelő fájlt hogyan szedhetjük le. A példa valóban csak példa, a módszer sok egyéb feladatra is adaptálható. A lényeg az elv, és a módszer, a megvalósítás már csak a fantáziánkra van bízva.A feladat: az oldalról leszedni az összes .torrent fájlt, mert az le szeretném tölteni. Az „oldal” lehet egy keresés eredményére kapott oldal is, vagy simán az ABC sorrendbe szedett lista. Az oldal „hibája”, hogy 15 találatonként tördeli az oldalakat, így ezt is kezelni kell.
Első lépésben nézzük is meg, hogy mit kapunk az oldalon. Olyan nincs, hogy az összes letöltése, a kijelöltek letöltése. Így vagy az összes letöltésre egyenként kattintunk, vagy scriptesítjük a témát, és azzal próbálkozunk.
Az oldal forráskódjában fogunk turkálni, így előbb azt kell kinyerni. Ez egyszerű, hiszen a legtöbb böngészőben ott a lehetőség: Az oldal forrásának megtekintése. Menjünk is fel az oldalra és nézzük meg a forráskódját. Bár első látásra elég rémítő lehet, de nekünk semmit nem kell ismerni, csak a torrenteket kellene megkeresni. Logikus lenne, ha először rákeresnénk a .torrent kifejezésre az oldal forrásában, hiszen nekem ezek a fájlok kellenek. Itt – és kiemelem, hogy ez nem mindig van így – meg is találjuk a .torrent bejegyzést és örömmel látjuk, hogy 15 darab van. Ami azt jelentheti, hogy valóban egy oldal/15 torrent fájl lesz.
Ha meg is kerested ezeket szomorúan láthatod, hogy a felépítése ilyen:

afadsafownload.php?id=db31227a405b73e6ee9fe4669181f1a5cb328682&f=Alexandre+Dumas+-+Korzikai+testv%E9rek.torrent>torrent 11/10/2006

Ez nem letöltési link! Hm… kellemetlen, de mit lehet tenni? Abból kell főzni, amink van, és a modern korban, amikor mindenféle honlapkezelő motorok és nem sima, statikus linkek korában vagyunk, ez mindennapos lesz.
Nézzük meg, hogy a honlap hogyan készít egy ilyen akármiből letöltési linket. Azaz elemezzük ki a letöltési link felépítését. Előbb szerezzük be ennek a Korzikai testvérek hangoskönyvnek a konkrét letöltési linkjét. Visszamegyünk az eredeti oldalra, és ott megkeressük a Korzikai testvéreket és látjuk, hogy van egy kis ikon, egy flopi lemez, amire kattintva letölthetjük. Ikonra megyünk és jobb klikk és link címének a másolása.

http://tracker.aladar.com/download.php?id=db31227a405b73e6ee9fe4669181f1a5cb328682&f=Alexandre+Dumas+-+Korzikai+testv%E9rek.torrent

Örömmel látjuk, hogy a felépítése nagyon kedvező http://tracker.aladar.com/ majd az előbb látott string, sok karakter és a végén a .torrent kiterjesztés.

Ebből máris felépíthetjük a tervet:

Az már sejthető, hogy erre scriptet kellene írni, és az is, hogy ideális lenne, ha egy lépcsőben végezhetnénk ezt el. Mivel nem vagyunk nagy scriptkészítő kockák, lebontjuk lépésekre, és azután rakjuk egy folyamatba bele.

Az első lépés egy külön könyvtár létrehozása, és csak abban dolgozunk, így nem kell elérési utat ezerszer leírni: /home/laci/teszt

A forráskód lementése:

Bár ha sok oldalt szeretnénk lementeni forrásban, akkor azt is automatizálhatjuk, de most a legegyszerűbbet mutatom be. Az oldal forráskódját lementeni egyszerű, ctrl+a majd ctrl+c, és beilleszted egy sima szövegfájlba. Ami szép, de nem profi. Én az ilyenhez a clipit-et használom ami egy sima kis vágólapkezelő, telepítsd, majd a

clipit -c > /home/laci/teszt/a.txt

parancsot add ki. Ha mindent jól csináltál, és tényleg megcsináltad, akkor ha belenézel a a.txt-be a forrást látod. Szuper!

Most már csak ki kell keresni azokat a részeket, ami a torrent link második felét tartalmazza:

Ehhez a grep-et használjuk.

grep -oE 'HREF=.+.torrent'

Bár maga a grep is képes megnyitni a fájlt, majd feldolgozni, de a jobb értelmezősség miatt a megnyitást a cat programmal végeztetem el.

cat ./a.txt | grep -oE 'HREF=.+torrent'

A pipe | adja át a grepnek a beolvasott fájlt, ahol -o adja, hogy csak a minta illeszkedés kell, a E pedig a reguláris experteket szabályozza. A minta egyértelmű:

  • H R E F = legyen elől, a
  • .+ majd bármilyen karakterből egy vagy több
  • amíg egy torrent sorozatot nem talál.

Ha lefutott a kimenet nem teljes az, mint amit akartunk, bár az illeszkedés tökletes, elől az van, amit akartunk, a végén meg torrent.

HREF=download.php?id=ffc8126d1b87b2b6dffce2e08501266b874bfff1&f=A+sz%EDv+%E1rnyai.torrent>”torrent</h5

Pontosítsunk! A két torrent szó, ami szerepel eltér,  az első után egy > jel van. Na így már pontosabban adhatjuk meg a keresését.

cat ./a.tx | grep -oE 'HREF=.+torrent>'

HREF=download.php?id=ffc8126d1b87b2b6dffce2e08501266b874bfff1&f=A+sz%EDv+%E1rnyai.torrent>

Szuper, már csak tegyük bele egy szövegfájlba.

cat ./a.txt | grep -oE 'HREF=.+torrent>' > b.txt

Ha mindent jól csináltál, akkor ha megnézed a b.txt-t, akkor 15 sort látsz és mindegyik az, ami kell. Egy csonka link kezdemény.

A következő lépéshez egy kis előtanulmányt végzünk.

Hogyan lehet leszedni parancssorból egy fájlt? Sokféleképp, de most kihasználjuk azt, hogy a link amit készítünk egy letöltési link, azaz ez bizony ha rákattintanál a kis flopi lemezre, ami alatt van, akkor elindulna a letöltés. Így elegendő – elvileg – a böngészőnek megadni a linket és mehet automatikusan a letöltés. Életszerűbb, ha ez máris egy teszt.sh-ba írjuk, hiszen nekünk a végén egy tizenöt soros, soronként a letöltési linket tartalmazó fájl lesz a végeredményünk.
Ha megadod a teszt.sh-ban az alábbi sort:

chromium http://tracker.aladar.com/

download.php

?id=db31227a405b73e6ee9fe4669181f1a5cb328682&f=Alexandre+Dumas+-+Korzikai+testv%E9rek.torrent

Csalódni fogsz, mert nem az egész linket értelmezi a shell, ami a scriptet futatja, hanem az gondolja, hogy a ? az bizony egy különleges helyetesitő karakter, és csak a download.php-t szedi le. Ami nem jó! Két megoldás van. Az első macerás, de járható út. Az összes, a shell által különlegesnek gondolt karakter elé egy \ jelet teszünk. Ez az a jelzés a shell felé, hogy bár egy különlegesként is értelmezhető jel jön, de ő vegye azt szó szerint, azaz ne próbálja értelmezni. A másik már járhatóbb út, és gyorsabb. Tegyük dupla idézőjelbe a linket, ezzel elmondjuk a shellnek, hogy az egy egység, amit, mint egy sima karaktersort vegyen figyelembe, ne próbálja értelmezni.

chromium "http://tracker.aladar.com/download.php?id=db31227a405b73e6ee9fe4669181f1a5cb328682&f=Alexandre+Dumas+-+Korzikai+testv%E9rek.torrent"

Szuper. Ha lefut a script (nem felejtettél el neki futtatási jogot adni?) akkor a kedvenc chromium-unk leszedi a letöltési mappába a fájlt. A chromium helyett használhatsz bármi mást is.

Mivel a végső scriptben sok link lesz, soronként végrehajtandó letöltéssel, érdemes a sort egy & jellel zárni, hogy ha az egyikkel végzett, akkor lépjen tovább a következő sorra. Ez a & jel már ismerős az autostart-ból, ott is ezzel zártuk a sort, hogy a következő parancs indulhasson a listából.

Térjünk vissza a b.txt fájlunkhoz, hiszen eddig jutottunk el:

HREF=download.php?id=b3122d7a405b73e6ee9fe4669181f1a5cb328682&f=A+sz%Edv+%E1rnyai.torrent>

Ilyen sorokkal van tele. Ebből kellene valami ilyent csinálni:

chromium “http://tracker.aladar.com/download.php?id=b3122d7a405b73e6ee9fe4669181f1a5cb328682&f=Alexandre+Dumas+-+Korzikai+testv%E9rek.torrent” &

Ez gyakorlatilag három csere művelet.

HREF= részt le kell cserélni chromium "http://tracker.aladar.com/ részre
illetve a
torrent> részt torrent" & részre
illetve a
&f= részt &f= részre

Sed! Már hallom is a felkiáltást, de nem. Most nem a kedvelt sed-et használjuk. A sed egy valóban nagyon jó eszköz, cserélésben az egyik legjobb. De van egy hibája, ami ismerős lehet már a teszt.sh futtatása után. A parancsértelmezés közben, ha különleges karakterhez ér, megpróbálja azt értelmezni, a szóközök megzavarhatják stb. Ezért én most egy kisebb tudású, de ilyen html stb. kódokat jobban kezelő rpl-t használom. Ezt telepíteni kell, mert jellemzően nem alapértelmezett program. Így nem kell a sok különleges karaktert levédeni \ jellel. Aminél majdnem biztos, hogy egy kimarad és zavart okoz a futásban.

Rpl amitcserélniakarok amirecserélniakarom amitfeldolozokfájl

Egyszerű. Persze sokkal többet is tud, de nekünk ennyi elég. A lényeg, hogy a tudása töredéke a sed-ének, de legalább nem kell figyelni a különleges karakterekre.

rpl 'HREF=' 'chromium "http://tracker.aladar.com/' b.txt
rpl 'torrent>' 'torrent" &' b.txt
rpl '&f=' '&f=' b.txt

Elvileg kész! Most már kaphat a b.txt egy futtatási jogot, vagy csak simán

sh b.txt

Nálam lefutott és le is jött a kívánt 15 .torrent fájl. Már csak a torrent kliensnek kell megadni és nincs is semmi gond, szedi is le.
Miután már darabokban működik egyesíteni kell egy scriptbe.

#!/bin/bash
clipit -c > /home/laci/teszt/a.txt
cd /home/laci/teszt/
cat ./a.txt | grep -oE 'HREF=.+torrent>' > b.txt
rpl 'HREF=' 'chromium "http://tracker.aladar.com/' b.txt
rpl 'torrent>' 'torrent" &' b.txt
rpl '&f=' '&f=' b.txt
sh b.txt

Egy sorral egészítettem ki, hiszen a tesztelés alatt mindig a teszt könyvtárban álltunk, így abban lévő fájlokat megtalálták a parancsok, de ez nem mindig lesz így.
Lehetne ezen még faragni, hiszen nem túl intelligens a megoldás, de az összerakás után már a többi legális hangoskönyvet gyorsan le tudtam szedni. Én egy gyorsbillentyűhöz rendeltem a scriptet, majd egyesével megnyitottam a MEK torrentoldalán a lapokat, majd ctrl+a, ctrl+c, script lefut, torrent fájlok lejönnek…

Miért készült el ez a kis script? Hogy bemutassam a rpl-t, illetve azt, hogy mennyire egyszerű egy scripttel egy oldalról leszedni a linkeket, akkor is, ha azok nem direkt linkek, hanem kicsit bíbelődni is kell ezzel. Bár ez egy legális torrent oldalra készült, nem sokban tér el egy akármilyen egyéb oldalra elkészített scripttől: elemezni kell az oldal felépítését, át kell gondolni a feladatot, majd azt kivitelezni. Bár itt minden fájlt leszedettem, de pont így működik, ha pld. Rejtő Jenő nevére kerestem volna rá a MEK hangoskönyves torrent oldalán, majd az eredményt mutató oldalakra alkalmazom. Vagy akár a MEK oldalán csak a könyvek közt keresel rá Rejtőre és elemzed a kapott eredményt mutató oldal forráskódját. A megoldás az első percben macerásnak tűnhet, hiszen ami időt belefektetett egy kezdő, annyi idő alatt egyesével is leszedhette volna a hangoskönyveket. De ezt összerakni, tesztelni nem több mit öt perc! Érdemes az elején belefektetni pár napot, hogy a mechanikus munkákat megpróbáljuk scriptesíteni, mert ha lesz gyakorlatunk, akkor már pillanatok alatt összedobunk egy ilyen eszközt. Ami kis módosítással sok helyen alkalmazható lesz…

A scriptet 2020 márciusában teszteltem, Arch Linux alatt.

Related Posts