Home > skrypty > Automatyczne pobieranie tapet z National Geographic

Automatyczne pobieranie tapet z National Geographic

Grudzień 4th, 2009 Zostaw komentarz Idź do komentarzy

Pierwsze co muszę napisać to link do oryginalnego pomysłodawcy . Jego rozwiązanie różniło się tym, że niestety linki były w nim zapisane na stałe i skrypt musiał być modyfikowany ręcznie dla każdej nowej partii tapet, co oczywiście jest zbędnym wysiłkiem.

Moja alternatywa:

#!/bin/bash

base="http://ngm.nationalgeographic.com/"
urls="photo-contest/2009-wallpaper photo-contest/wallpaper wallpaper/download"

dir=NG-wallpapers

#res - resolution - leave blank for all
res=""
#res="1024"
#res="1280"
#res="1600"
#etc

UA=Mozilla

mkdir -p "${dir}"
cd "${dir}"
echo "Entering \"${dir}\" directory.." 

echo -n > .xmllist
echo -n > .imglist

echo "Greping xmls"
for url in $urls
do
  wget -q -U "$UA" "${base}${url}" -O - |egrep -o '/.*\.xml' >> .xmllist
done

echo "Downloading " `wc -l .xmllist`
for url in `cat .xmllist `
do
  wget -q -U "$UA" "${base}${url}" -O - |tr '\r' '\n' |egrep -o '/.*\.jpe?g' >> .imglist
done

echo "Downloading " ` wc -l .imglist `
for url in `cat .imglist |egrep ${res}'\.jpe?g'`
do
  echo ">>> $url"
  wget -q -U "$UA" -c "${base}${url}"
done

Do pobrania: natgeo_auto

Korzysta się ze skryptu na własną odpowiedzialność.

Kategorie:skrypty Tagi:, ,
  1. Styczeń 17th, 2010 at 16:21 | #1

    Twoje podejście jest o wiele lepsze. Dodatkowo pobiera też tapety spoza konkursów, a w oryginale były jedynie konkursowe tapety. Temu skryptowi brak jednego: sprawdzania, które pliki zostały już pobrane – dzięki temu można byłoby go odpalać co jakiś czas (np. co miesiąc), po to by ściągał nowe tapety z adresu ‘wallpaper/download’.

    Po sesji to sobie doimplementuję, tylko jeszcze nie wiem czy w pythonie czy w bashu.

    W bashu, na początku każdego uruchomienia, zapisywana byłaby „lista pobranych” plików .jpg. Potem gdy utworzona jest już także lista obrazków „do ściągnięcia” (.imglist bodaj), uruchamiamy pętlę, w której dla każdej nazwy pliku z zapisanej wcześniej „listy pobranych” każemy sed-owi szukać jej w liście „do ściągnięcia”, a ten jeśli ją odnajdzie usuwa linię (coś około: sed -i ‘pobrany-plik.jpg/d’ .imglist’).

  2. Styczeń 17th, 2010 at 16:34 | #2

    Akurat ułatwiłem sobie tutaj sprawę i dodałem do wget opcje „-c” – także plik nie jest pobierany na nowo. Serwer jest pytany o rozmiar, i jeśli się zgadza to plik jest zostawiany tak jak był, jeśli jest mniejszy to jest pobierana reszta:>

    Niestety serwer za każdym razem jest odpytywany o wszystkie pliki ponownie, ale nie są one pobierane za każdym razem. Faktycznie nie jest to najlepsze zachowanie bo widać zapytania po stronie serwera i nie wiadomo jak może na to admin zareagować:>

  3. Luty 12th, 2010 at 16:25 | #3

    Trackback chyba nie działa, więc rzucam linkiem tutaj: http://dz.mruwek.pl/2010/02/12/wygodne-pobieranie-tapet-national-geographic/

  1. Luty 12th, 2010 at 16:00 | #1