26 марта 2010

Качаем картинки с www.pixiv.net пачками.

Актуальная версия скрипта доступна тут.

На www.pixiv.net куча художников выкладывает свои работы на обозрение пользователей, которые на этом сайте зарегистрированы. Остальные могут довольствоваться только маленькими превьюшками. Проблема только в том, что для просмотра одной картинки в полном размере нужно сделать минимум три щелчка, да еще иногда хочется загрузить все картинки, чтобы удобно посмотреть их с помощью любимой программы.
Для автоматизации всего этого дела я написал небольшой скрипт.
Для правильной работы скрипту нужны следующие данные:
  • Ваши логин и пароль;
  • Уникальный ID художника, который можно получить из URL его профиля вида "http://www.pixiv.net/member.php?id=6359", где "6359" и есть искомый параметр;
  • Количество изображений в галерее художника.
Для получения последнего параметра надо перейти на страницу с галереей по ссылке с надписью "作品を見る" (вторая кнопка слева в горизонтальном меню) и справа от аватара найти надпись вида "投稿数:625件". "625" - это нужный параметр.


Все данные получили, теперь надо настроить сам скрипт.

#! /bin/bash

# настройки
# id художника (athid) берется из URL вида http://www.pixiv.net/member_illust.php?id=18530, где 18530 и есть искомый параметр.
pixid='ВАШ ЛОГИН'
pixpass='ВАШ ПАРОЛЬ'
picnum=$2
let "pagenum=picnum/20+1"
athid=$1

# логинимся (куки в pixiv.txt)
AUTH=`curl -s -c pixiv.txt -F"mode=login" -F"pass=${pixpass}" -F"pixiv_id=${pixid}" -F"skip=1" http://www.pixiv.net/index.php`

# качаем все страницы с картинками и парсим их на ходу
for ((i=1;i<=$pagenum;i++))
do
wget --load-cookies=pixiv.txt "http://www.pixiv.net/member_illust.php?id=$athid&p=$i" -O - --referer="http://www.pixiv.net/"|pcregrep -o 'http\:\/\/img\d{1,3}\.pixiv\.net\/img\/[^\"]+'|sed 's/_s//' >> get.pixiv.txt
done;

# качаем все картинки, которые нашли

wget -nc -i get.pixiv.txt --referer="http://www.pixiv.net/"

# удаляем палево

rm -f get.pixiv.txt pixiv.txt
Синтаксис скрипта: getpixiv.sh id_художника количество_изображений
Если по ходу работы wget сразу загружает страницы, а не следует по редиректам, то всё настроено правильно.