php downloader obrazku z RM

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: Zerog
Datum: 6.10.2007
Hodnocení/Hlasovalo: 0/0

UPRAVEN!! Script slouzi ke stahnuti gelerii obrazku slecen (picicka) z http://www.rozzlobenimuzi.com/ a rozzareni do kategorii, pricemz v adresari index jsou nahledy jednotlivych slecen.

Rekneme, ze si chcete stahnout galerii holek z http://www.rozzlobenimuzi.com/. Tak ctete dal a dozvite se jak na to.

Hned na zacatku mate dve moznosti. Bud rucne, nebo si na to napsat script. Pokud jste se rozhodli pro script, musime si rict co by mel vlastne delat.

a tak stale stale dokola az do posledni. Url prvni galerie vypada takle: http://www.rozzlobenimuzi.com/?galid=1 . Asi Vam doslo ze cislo jedna je prave prvni galerie. Galerii je tam zhruba 500 ,takze na zacetak nam bude stacit cyklus for od jedne po 500.

for ($ii=1;$ii<500;$ii++) {
}

Vse, co si rekneme dal, bude mezi slozenymi zavorkami. Nyni potrebujeme nejak stahnout galerii. Ktomu slouzi nasledujici kod:

$www="http://www.rozzlobenimuzi.com/?galid=";
$file="";
if (($fp = @fopen($www.$ii.$session, "r"))!==false) {
   while(!feof($fp)){ $file.= fread($fp, 1024*8); }
   fclose($fp);
};

U neho se trochu zastavime a rozebereme ho. Prvni radek nam definuje promenou s URL adresou odkazujici na galerii, vsimete si ze na konci chybi cislo. To nam prave generuje predchozi cyklus for. Na druhem radku je prazdna promena $file. Do tehle promene se bude ukladat cela stranka (zdrojovy kod), v nasem pripade galerie. Na dalsim radku je podminka rikajici, ze pokud jde otevrit dana adresa, bude se pokracovat v tele podminky. V tele podminky je cyklus while a v nem dve funkce. Prvni (feof) je podminka a testuje konec souboru, druha (fread) soubor cte. Tudiz dokud soubor neni cely, cyklus se opakuje a soubor se nacita. Na poslednim radku se soubor zavre.

Nyni je nacase mala rekapitulace. Mame script ktery otevre galerii, nacte ji do promena a jde na dalsi. Mozna si rikate “Super, jeste ulozit a je hotovo„ to je pravda pokud chcete mit misto krasnych obrazku spoustu zdrojoveho kodu galerii. My totiz zatim stahujeme pouze zrojovy kod galerie, ne obrazky samotne. Abychom obrazky mohli stahnout, musime nejdriv vypreparovat URL adresu obrazku ze zdrojoveho kodu. Tak deme na to.

$regularni_funkce_odkazu="?%=0-9a-zA-Z:\.-ěščřžýáíéůú _";
preg_match_all("/http:\/\/media.rozzlobenimuzi.com\/obsah\/nfsw\/[".$regularni_funkce_odkazu."]*.jpg/i","$file",$odkazy);

Funkce preg_match_all najde v promene $file vsechny vyskyty hledaneho retezce a ulozi je do pole. V nasem pripade najde URL vsech obrazku a ulozi je do pole $odkazy. Funkce vyuziva regularnich vyrazu, ale do toho zabihat nebudu. Tak a nyni uz jen projet $odkazy jednotlivych obrazku, ulozit a downloader je skoro hotov.

for ($i=0;$i<count($odkazy[0]);$i++) {
  $nepole_url=$odkazy[0][$i];
  $file2="";
     if (($fpp= @fopen($nepole_url, "r"))!==false) {
        while(!feof($fpp)){ $file2.= fread($fpp, 1024*8); }
        fclose($fpp);
     };
  $spp=fopen("./".$ii."-".$i.".jpg", "w+");
  fwrite($spp,$file2);
  fclose($spp);
}

Cyklus for se bude opakovat tolikrat, kolik je prvku v poly $odkazy. Pak nasleduje jiz znamy kod na stahovani souboru. Avsak nyni uz opravdu stahuje jednotlive obrazky. A konecne jejich ulozeni. Pokud kod zkoumate peclive, jiste Vam doslo ze obrazky se budou ukladat pod nazvem: cislo galerie, pomlcka, cislo obrazku, tecka jpg. Takze napr: 3-22.jpg. Tim docilime originalniho jmena pro kazdy obrazek, zaroven prehlednost a moznost lehkeho dalsiho zpracovani.

Tak a uz jen spustit (pres command line) a tahat :). No netaha co? Ja totiz nerekl jeste jednu dulezitou vec. Stranky rozzlobenych muzu jsou delany tak, ze kdyz jdete na stranky poprve, vzdy se ukaze uvodni stranka. Ale s tim nas script zatim nepocital a tak jen 500x zhledl uvodni screen a fotky zadny. On se totiz po odkliknuti "VSTOUPIT" vytvori session a diky nemu muzete brouzdat RM. Nas script ale zadny "VSTOUPIT" odkliknout neumi :( tudiz mu musime pujcit nasi relaci. Otevrte nejakeho spravce cookies a najdete session z RM, neco jako 2ac989f1a856c1f0c043c8dee701faa3. Vratte se nazacatek scriptu a dopiste:

$session="&PHPSESSID=2ac989f1a856c1f0c043c8dee701faa3";

Samozdrejme s vasi relaci. Nyni uz script pobezi jak ma.

Cely script si muzete stahnou zde, jsou tam i statistiky takze se s nima nezapomente pochlubyt v komentarich :)

Omlouvam se za hrubky, cestina neni muj obor. Budu rad kdyz me na ne upozornite.
Za pouzivani scriptu nerucim :)