Automatyczne pobieranie tapet z National Geographic
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ść.
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’).
[Translate]
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ć:>
[Translate]
Trackback chyba nie działa, więc rzucam linkiem tutaj: http://dz.mruwek.pl/2010/02/12/wygodne-pobieranie-tapet-national-geographic/
[Translate]