Клуб Фоток

Скрипт для скачивания всех фоток пользователя (mac os / linux)

23 июля 2009, 15:43
#!/bin/sh
user="gasubasu"
mkdir "$user-images"
aurl="http://api-fotki.yandex.ru/api/users/$user/albums/"
aids=(`curl --silent $aurl | grep 'urn' | sed 's/[^0-9]*//g'`)
for aid in ${aids[@]}
do
    echo $aid
    iurl="http://api-fotki.yandex.ru/api/users/$user/album/$aid/photos/"
    iids=(`curl --silent $iurl | grep 'href.*_XL' | sed 's/.*href=\"\([^"]*\)".*/\1/g; s/_XL/_XXS/'`)
    for i in ${iids[@]}
    do
        echo "get $i"
        wget -P "$user-images" $i
    done
done

Использование:

  1. Изменяем пользователя  user="..."
  2. Находим _XXS и изменяем на требуемый размер фотки (_orig, _XS, _L, _XXS, _XL)
  3. Сохраняем скрипт в файл download.sh
  4. Разрешаем скрипту выполняться ( chmod 777 download.sh)
  5. Запускаем скрип "./download.sh"


25 комментариев
Подписаться на комментарии к посту
и таким образом можно скачать фотографии любого пользователя?
Да, конечно, если они доступны для простмотра.
Спасибо за пост и интерес к нашему API
Спасибо за скрипт, полезное решение :)
Комментарий удалён
Да конечно, но к сожалению я здесь не пошник, т.к. винды под руками нет, да и бат синтаксис забыл давно. Но принцип будет тот же: 1. Забираем xml с альбомами 2. Фильтруем id альбомов 3. Для каждого id альбома забираем xml с фотками 4. Фильтруем урлы фоток 5. Качаем файл
если поставите http://www.cygwin.com/ ,скорее всего, сможете запустить такой скрипт
у меня ни в линуксе, не во фряхе не работает
./dw.sh ./dw.sh: 5: Syntax error: "(" unexpected
начинаешь убирать скобки, символы in-line выполнения `` - перестает ругаться, но все в итоге кончается сообщением Bad substitution p.s. вот тут тоже автоматизация, но уже по загрузке фотографий http://clubs.ya.ru/4611686018427409269/replies.xml?item_no=1952
Да действительно, моя ошибка, тестировал только на маке. Проблема в шебанге: #!/bin/sh нужно сменить на #!/bin/bash (или совсем удалить строку если шел – баш) Проверил на своем хосте под FreeBSD 6.3, все работает (только вот баш оказался здесь #!/usr/local/bin/bash)
да. работает. мне кажется, полезной была бы доработка, позволяющая указать фолдер, который нужно скачать
еще один виш - к именам файлов дописывать разрешение бы. хотя, как узнать формат без чтения заголовка - хз
По поводу имени файла:
Нужно будет порыться в апи, где–то кажется я видел атрибут с реальным именем файла.
ну на вебе этой информации нет
Для скачивания конкретного альбома скрипт только уменьшится:
#### – нужно заменить на id альбома

#!/bin/bash
user="gasubasu"
mkdir "$user-images"
aid="####"
echo $aid
iurl="http://api-fotki.yandex.ru/api/users/$user/album/$aid/photos/"
iids=(`curl --silent $iurl | grep 'href.*_XL' | sed 's/.*href=\"\([^"]*\)".*/\1/g; s/_XL/_XXS/'`)
for i in ${iids[@]}
do
    echo "get $i"
    wget -P "$user-images" $i
done
таки лучше бы в один спипт утоптать, использовав ключи
интересно а зачем вам все фотки пользователя?
На мой взгляд это немного некоректный вопрос, но тем не менее ответ очень простой: Мне не нужны фотки "пользователя" ! Но мне иногда нужны мои фотки. А еще мне нравятся универсальные решения.

peko

Можешь переделать скрипт под perl, чтобы из-под винды можно было скачивать?

K сожалению я плохо знаком с пёрлом...
для Яндекс закладок такое возможно ?
Пришлось подредактировать под новые реалии, чтобы заработало. Поддерживает докачку :)


#!/bin/bash
user=$1
mkdir "$user-images"
aurl="http://api-fotki.yandex.ru/api/users/$user/albums/"
aids=`curl --silent $aurl | grep 'urn' | sed -r 's![^0-9]*!!g'`
for aid in ${aids[@]}
do
    echo "album $aid"
    iurl="http://api-fotki.yandex.ru/api/users/$user/album/$aid/photos/"
    iids=`curl --silent $iurl | grep 'http.*_S' | sed -r 's!.*(http.*)_S.*!\1_orig!'`
#possible sizes: _orig, _XS, _L, _XXS, _XL
    for i in ${iids[@]}
    do
name=`basename $i`
name="$name.jpg"
if [ ! -f "$user-images/$name" ]
then
            echo "get $i"
            wget -O"$user-images/$name" $i
        fi
    done
done

Комментарий удалён
Именно скрипт и именно wget'ом?
В этом случае вам скорее всего придется парсить каждую страницу на которую ведет урл с превьюшки и уже из нее выделять путь к самому изображению. Ради указанного сайта никто не будет заморачиваться и писать подобный скрипт, это не интересно.

Если вам просто нужны фотографии с сайта, воспользуйтесь программой teleport.

Не работает, если имя пользователя заканчивается цифрами. :(

для OSX -r нужно поменять на -E и wget на curl

но к сожалению не все скачивает, обрывается на 147 фото

Константин Волков
25 октября 2014, 09:28

можете дать скрипт для скачивания ОДНОЙ фотографии,очень надо