Линукс, Vim, LaTeX, полезные скрипты, визуализация данных, численные расчёты, немного ФП

20071113

Как скачать альбом Picasaweb целиком (без Picasa)

Написал маленький скрипт download-picasa-album, позволяющий из коммандной строки за раз скачать все изображения из альбома Picasaweb в полном разрешении.

Использовать так:
download-picasa-album 'ссылка-на-RSS-фид-альбома'


И все фотографии албома скачиваются и помещаются в текущую директорию. Русские буквы в именах файлах обрабатываются нормально (в UTF-8 локали), а вот пробелы, думаю, вызовут проблемы в том месте, где awk вызывает wget. Надо бы поправить...

Да, можно вместо ссылки давать имя файла с уже скачанным фидом.

Скачать скрипт


Идею заимствовал у Дмитрия Астапова, но воспользовался xmlstarlet вместо Xtract и оформил всё это дело в виде скрипта. Кусок awk-кода, декодирующий URL взял с сайта Huidae Cho. Скрипту также требуется iconv.

Дополнение: Похоже, мой скрипт удачно скачивает только открытые альбомы; надо будет посмотреть, что там ломается с частными альбомами. В общем, если мой скрипт у вас не работает, можете попробовать ещё скрипт Loïc Serf-а. Код его скрипта можно найти также в комментариях ниже.

P.S. Вот, теперь из коммандной строки, не устанавливая громоздкую Picasa, можно не только выкладывать фотографии на Picasaweb, но и скачивать альбомы друзей. Я доволен.

7 коммент.:

  1. Анонимный22/2/08 20:04

    Скрипт который скачивает альбомы у меня не работает, но нашел другой, который работает.
    #!/bin/bash
    # Distributed under the terms of the GNU General Public License v3 or later
    # AUTHOR: Loïc Cerf
    # e-mail: magicbanana@gmail.com

    WGET_OPT="-nv -T 180 -t 3 -c"

    EX_USAGE=64
    EX_NOHOST=68

    if [ -z "$1" -o "$1" = "--help" -o "$1" = "-h" ]
    then
    echo "Usage: $0 url [destination]"
    exit
    fi
    page=${1#*picasaweb.google.*/}
    if [ "$page" = "$1" ]
    then
    echo "\"$1\" is not the URL of a PicasaWeb album or gallery" 1>&2
    exit $EX_USAGE
    fi
    temp=`mktemp`
    if wget $WGET_OPT -O $temp "$1"
    then
    finalPage=${page#*/}
    if [ -z "$finalPage" -o "$finalPage" = "$page" ]
    then
    # $temp is a gallery
    if [ -z "$2" ]
    then
    destination=`grep -m 1 "^var _user" $temp`
    destination=${destination##*nickname:\"}
    set "$1" "${destination%%\"*}"
    fi
    mkdir -p "$2"
    cd "$2"
    grep -E -o "$1"[/]?[[:alnum:]:.%~_-]+ $temp | sort | uniq |
    while read album
    do
    "$0" $album
    done
    else
    # $temp is an album
    if [ -z "$2" ]
    then
    destination=`grep -m 1 "^var _album" $temp`
    destination=${destination##*title:\"}
    set "$1" "${destination%%\"*}"
    fi
    grep -E -o {id:\"[0-9]+\",s:\"[[:alnum:]:\\.%~_-]+ $temp |
    while read picture
    do
    picture=${picture##*\"}
    picture=${picture/\x2Fs144/}
    wget $WGET_OPT -P "$2" ${picture//\x2F//}
    done
    fi
    else
    exit $EX_NOHOST
    fi
    rm $temp

    ОтветитьУдалить
  2. Спасибо за сообщение об ошибке. Похоже, проблема наблюдается при скачивании закрытых (частных) альбомов. Открытые (публичные) альбомы альбомы вроде бы скачиваются нормально.

    Будет время — посмотрю, что в моём скрипте неправильно. Пока поставил ссылку на альтернативный скрипт Лоика Серфа. Спасибо.

    ОтветитьУдалить
  3. я не понимаю да же что такое скрипр, хотя догадываюсь, не объяснишь пошагово как его применить???

    ОтветитьУдалить
  4. Анонимный4/5/08 20:08

    2allek-san-derr:
    Скрипт — программа для скриптового языка программирования. В данном случае коммандной оболочки bash.

    ОтветитьУдалить
  5. А если пользоваться браузером, то, к примеру, фаерфокс чудесно открывает XML-фид, и любой менеджер закачки из фаерфокса может закачать картинки скопом.

    ОтветитьУдалить
  6. Valentine Goloubev1/8/11 08:00

    не работает. выкидывает [1] 14284
    [2] 14285
    [3] 14286
    vig@vbook:~/Desktop$ ./download-picasa-album: 8: Syntax error: "(" unexpected

    ОтветитьУдалить
  7. Значит, больше не работает. Стимула чинить сейчас уже нет. Проще, наверное, взять и на нормальном языке переписать.

    ОтветитьУдалить