Artykuły na każdy temat

[PHP] Ściąganie całych albumów z Imgur

Dodano 17.02.2016r. o 21:16
Czasami bywają takie sytuacje, że potrzebujemy ściągnąć dużą ilość albumów z ukochanego Imgura. Niestety robienie tego ręcznie nie wchodzi w rachubę. Dodatkowym problemem, który pojawia się z niewiadomych mi przyczyn jest dziwne zachowanie, które charakteryzuje się brakiem właściwej reakcji po dodaniu do adresu /zip lub /download. Na GitHubie znalazłem podobny skrypt lecz był napisany w obrzydliwym języku zwanym Pythonem. W związku z tym napisałem kilkulinijkowy skrypt w PHP, który robi dokładnie to samo, który wygląda następująco:
Kod:
<?php
set_time_limit(0);
$config['target'] = 'http://imgur.com/a/Uxug4'// [+18] Every Playboy Playmate Centerfold
// Get raw HTML
$data file_get_contents($config['target']);
// Get album ID
$album_id substr($config['target'], strrpos($config['target'], '/') + 1);
// Get title
preg_match('#<h1 class="post-title.*">(.*)</h1>#'$data$matches);
$title $matches[1];
// Grab images ID's
preg_match_all('#<div id="([a-zA-Z0-9]{7})" class="post-image-container.*">#'$data$matches);
// Necessary things
$path './albums/'.$album_id.'/';
mkdir($path);
// Download images
foreach($matches[1] as $image_id)
{
 if(file_exists($path.$image_id.'.jpg') === false)
 {
  file_put_contents($path.$image_id.'.jpg'file_get_contents('http://i.imgur.com/'.$image_id.'.jpg'));
 }
}

echo 'Done!'?>
Całość oczywiście można opatulić w jakąś funkcję lub klasę, dobudować obsługę błędów sieciowych, usprawnić zapisywanie plików, a nawet dodać kompresję. Tak jak zawsze limitem jest tylko nasza wyobraźnia. Zmienną $title można poddać działaniu jakiejś metody sanitize_file_name, a następnie wykorzystać przy nazewnictwie folderu. To samo tyczy się zmiany wyrażenia regularnego tak aby wyciągało również tytuły poszczególnych grafik. Dodatkowo adresy można wyciągać również ze znaczników meta. Nie zagłębiałem się w ich API jednak podejrzewam, że idzie wyciągać wszystkie adresy również w ten sposób. To tyle jeżeli chodzi o podobno najlepszy serwis z niesamowitymi zdjęciami w internecie. Wink

Komentarze

Publikowane komentarze są prywatnymi opiniami użytkowników serwisu. Serwis nie ponosi odpowiedzialności za treść opinii. W trosce o zachowanie poziomu dyskusji wszystkie komentarze podlegają akceptacji przed ich publikacją dlatego proszę cierpliwie czekać aż komentarz zostanie opublikowany.

CapaciousCore

Dodano 12.11.2017r. o 09:45
@Luke być może dlatego, że składnia tego języka jest dla mnie bardzo nieczytelna Razz

Luke

Dodano 30.06.2017r. o 00:55
Jak możesz nazywać Pythona obrzydliwym. Razz W przeciwieństwie do PHP ma obiektowość w bibliotece standardowej i jest konsekwentny (np. w nazewnictwie).

Dodaj komentarz

Zostaw komentarz jeżeli możesz! Nie bądź przysłowiowym botem! Nie bądź obojętny! Ciebie to nic nie kosztuje, a mi sprawi uśmiech na twarzy.
Zezwolono używać: BBCode
Zabroniono używać:
znaczników HTML

(Wymagany)

(Wymagany, niepublikowany)

(Nie wymagana)

Token:

Obrazek dla bota

(Przepisz tylko cyfry!)

(Wymagana)