Portál AbcLinuxu, 30. dubna 2025 11:24
Jednoho nemileho vecera jsem se dozvedel, ze mi vyprsela platnost mych uctu na Rapidu i Hotfile. Ne, ze bych byl nejakym zarputilym stahovacem, ale na filmy a serialy se zpravidla podivam radeji nekdy v klidu na pocitaci bez dabingu, nez v case, ktery mi urci kterakoliv TV stanice. Premyslel jsem tedy, jak svuj problem vyresit a nakonec jsem si reseni musel napsat.
Motivace & PokusyNejakou dobu jsem zkusil zit jako free-user vsech download serveru, ale zjistil jsem, ze to je az prilis nepohodlne a s bittorentem jsem zacinat nechtel a to jenom kvuli tomu, ze jsem vystraseny srab. Dal jsem se tedy do probirani for s tim, ze zjistim, na ktere download servery nejcasteji lide uploaduji nektere filmy a serialy, co bych si rad stahnul a rozmyslim se, ktery server je pro me ten spravny.
Prozreni
Zadny. Je jich zkratka moc a komunita je uz hrozne roztristena. Pripada mi jako hrozna kravina, platit za jakykoliv jednotlivy download server.
Narazil jsem ale na jeden nedownload server, co me zaujal. nedownload server jsem ho nazval, protoze to neni download server v tom smyslu, jak je chapu ja. Je to vlastne jakasi proxy mezi mnou a obvyklimi servery.Neni vsechno zlato, co se trpyti
Jeste pri registraci je vsechno super. 900MB dostane kazdy user gratis. Ale pak uz jsem narazil.Reseni
Takze jsem sednul, spustil vim a udelal jsem skriptik v Pythonu, co tohle vsechno udela za me. Odkazy na one magicke strance generuje javaskript a pouziva k tomu dve promenne pro uzivatele. Takze jsem funkcionalitu webovky nahradil a skriptu staci jenom se jednou prihlasit, pak uz si tyto promenne ulozi a webovkou nepotrebuje. Skript vzniknul rychle, miliony veci mu ke krase schazi a dost toho neni osetreno - je to zatim jenom takovy koncept za jeden vecer, kdy jsem nemel nic jinyho na praci a urcite na nem jeste budu delat. Ale zatim jsem nenarazil na chybu, kvuli ktere bych neusnul, tak ho davam k posouzeni, k okomentovani a k volnemu vyuzivani.#!/usr/bin/env python2 # -*- coding: utf8 -*- import time, os, random, sys import httplib2 import urllib result={} def getHash(result): user = result['Credentials']['user'] passwd = result['Credentials']['passwd'] h = httplib2.Http(".cache") url = 'http://www.multishare.cz/html/prihlaseni_process.php' body = {'jmeno': user, 'heslo': passwd, 'trvale' : 'ano', 'akce' : 'Přihlásit'} headers = {'Content-type': 'application/x-www-form-urlencoded'} response, content = h.request(url, 'POST', headers=headers, body=urllib.urlencode(body)) headers = { 'Cookie' : response['set-cookie'] } h = httplib2.Http(".cache") url = 'http://www.multishare.cz/' response, content = h.request(url, 'GET', headers=headers) for line in content.split('\n'): if line.find('input') != -1: if line.find('u_ID') != -1: uId=line.split('"')[7] break for sliver in headers['Cookie'].split('='): if sliver.find(user) != -1: uHash=sliver.split('_')[0] break result['Hash'] = { 'u_ID' : str(uId), 'u_hash' : str(uHash)} return result def getConf(result): result['Hash'] = {} home = os.getenv("HOME") confDir = os.path.join(home, '.multishare') confPath = os.path.join(confDir, 'multishare.conf') if os.path.isdir(confDir) and os.path.isfile(confPath): f=open(confPath, 'r') for line in f.readlines(): if line.find('u_ID') != -1: result['Hash']['u_ID']=line.split('=')[1].rstrip('\n') if line.find('u_hash') != -1: result['Hash']['u_hash']=line.split('=')[1].rstrip('\n') f.close() else: result['Credentials'] = {} print "I cannot determine mine config. I need the credentials for login to multishare." print "This is usually needed just once." result['Credentials']['user'] = raw_input("Please enter your USERNAME for multishare.cz: ") result['Credentials']['passwd'] = raw_input("Please enter your PASSWORD for multishare.cz: ") result = getHash(result) if not os.path.exists(confDir): os.mkdir(confDir) f=open(confPath, 'a') for group in result: f.write('_%s_\n' % (group)) for val in result[group]: f.write('%s=%s\n' % (val, result[group][val])) f.close() return result def getURL(result): counter=0 result['URLs']={} src = sys.argv[1] uId = result['Hash']['u_ID'] uHash = result['Hash']['u_hash'] if os.path.isfile(src): f=open(src,'r') for line in f.readlines(): line = line.rstrip('\n') result['URLs'][line]={} for link in result['URLs'].keys(): done=0 urlDown = 'http://dl%s.mms.multishare.cz/html/mms_process.php?u_ID=%s&u_hash=%s&link=%s' % (random.randint(1, 10000), uId, uHash, link) result['URLs'][link]['down'] = urlDown saveAs = urlDown.split('/')[-1] if saveAs == '': saveAs = urlDown.split('/')[-2] while done == 0: if os.path.exists(saveAs): saveAs = '%s.%s' % (saveAs, counter) else: done = 1 result['URLs'][link]['save'] = saveAs f.close() return result def downloadIt(downFrom, saveTo): f = open(saveTo,'w') # httplib2.debuglevel=4 h = httplib2.Http(".cache") try: response, content = h.request(downFrom, 'GET', redirections = 1) f.write(content) f.close() except Exception, e: print 'Problem with downloading %s.\nException: %s' % (downFrom, e) f.close() os.remove(saveTo) def usage(): print 'Usage: %s /path/to/file' % (sys.argv[0]) print '/path/to/file is file which contains a list of URLs' sys.exit(1) def check_usage(): if len(sys.argv) != 2: usage() f=sys.argv[1] if not os.path.isfile(f): usage() #Main check_usage() result=getConf(result) result=getURL(result) for url in result['URLs'].keys(): print 'started %s %s' % (result['URLs'][url]['save'], url) downloadIt(result['URLs'][url]['down'], result['URLs'][url]['save']) print 'finnished %s %s' % (result['URLs'][url]['save'], url)Závěr
Tiskni
Sdílej:
K tomu stahovani zdarma a pres prohlizec muzu rict jen to, ze kdyz clovek vyzkousi, jak moc pohodlny jtreba ten JDownloader je, tak mu padne spodni celist k zemi. Ja vetsinou stahuji veci, co se do jednoho odkazu nevejdou, takze jsou na vic linku = delsi doba cekani. kdyz se chci podivat na jeden nebo dva dily nejakyho serialu pred spanim, nebudu spani odkladat o hodinu, abych ty tri casti stahnul. Jdownloader ma i to, ze pozna, kdyz odkazy oznacim a rovnou testuje, jestli je online. Po stazeni ho automaticky zkusi rozbalit - drzi si databazi hesel, ktere jsem pro rozbalovani nekdy pouzil. Proste oproti prohlizeci celou operaci zrychluje a usnadnuje doporucuji ho aspon zkusit.
Třeba takovýha Shreka 1 a 2 na DVD už nikde neseženu, všude jenom 4 a když se hodně snažim tak i 3. Štestí že děckám je jedno na co koukají, takže vystačim i s tou menší sbírkou. A zbytek holt doplní avíčka, ikdyž ty přehrávač zrovna nemiluje. Aspoň je od nich na chvíli pokoj. Teď si je ještě vyškolit aby nehrabali na obrozovku a nemusela se každej tejden čistit ...
Jedine ulozto.cz
Avi lze po nekolika minutach stahovani zacit prehravat a tak mrknout bez nutnosti cekani na komplet download.
100 - 200 MB rar party na rapidu patri jiz do praveku.
Mj vite ze hafo lidi si mysli ze .rar = rapidshare ....
Pred cca rokem jsem na ulozto nahral asi deset prazdnych souboru (vytvorenych pomoci dd) o velikosti 1024 MB a chaotockem nazvu ... neco jako "ftrsnvhkdhr.vfg", schoval si linky a dnes ty soubory tam stale jsou. Spolehat na to samozrejme nelze, ale ostatni FS se muzou jit v tomto (a nejen tomto) vycpat.
>>> ze se crc check muze podelat jenom na jednom 100MB kusu ...
Ano a pokud v jedinem souboru bude jen jediny bit jinak tak je to spatny narozdil od souvisleho avi ci jineho videosouboru souboru ve kterem muze chybet (nebo byt jinak poskozen) klidne stovky kilobajtu a divak nic nepozna.
rar r
(ale musíš mít ten "nesvobodnej" rar, free a open unrar tuhle funkci nemá). Tahle funkce mi už párkrát vyřešila problém, kdy už to vypadalo že sem tahal 4 GB zbytečně ...
Štěstí že většina uploaderů to balí s 1-5 % dat pro opravu archivu.
Vse je to jen o implementaci protokolu pro prenos souboru v siti.
Pokud budete z klasickeho http serveru v Australii tahat 4 GB iso nejakeho distra a spojeni se mnohosetkrat prerusi, pojede to par kilobajtama a podobne defekty v prenosu tak stejne vezte ze konecny md5 bude naprosto totozny se souborem na serveru tj nedojde k zadne ztrate dat a pritom pouzijete jen: wget -c URL
Jenze to by nebyl byznys, aby se protokol nezkriplil ku prospechu provozovatele takze nelze navazat preruseny prenos ...
Opet neni problem v technice, ale v lidech
java -jar JDownloader.jar -branch NIGHTLY
.
Nicmene jdownloader jako takovy zere dost pameti a CPU (a nightly verze je na tom subjektivne jeste hur), takze rad vyzkousim tvuj skript (ktery bude urcite mene narocny), diky :)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.