е-bash-им фотки | Блог
Вятские Поляны
ЯИщу:

Как с вами связаться?

е-bash-им фотки

Понадобились мне фото полян, много. Не спрашивайте зачем. всё равно не скажу... Ну если сильно просить не будете, точно не скажу) Хотя из опасения оказаться козлом отпущения и оказаться главным героем вполне возможного в нашей "запрещённой" стране показательного процесса, скажу "ФОТО МНЕ НУЖНЫ ДЛЯ СОЗДАНИЯ ПАРОДИЙ"

Первая мысль конечно о том, что можно стянуть с vp43.ru, от туда -> http://vp43.ru/photo/   . Хоть их и немного (на момент написания 354), но зато достаточно большие и легко забрать. Кстати смотрю Валентин скриптик подправил и теперь нельзя например посмотреть не существующую 355 фотку.

Все фото пронумерованы от 1 до 354, ссылка на изображение имеет вид http://vp43.ru/imgphp/<номер>.1024.768.jpg (а 1024.768, интересно что будет если указать другое значение...), т.е. достаточно обернуть всё это дело в цикл и можно забрать всю коллекцию. Вот только правый нижний угол с логотипом vp43 мне не нужен, ковырять 354 фотки руками в графическом редакторе занятие не весёлое, придётся отрезать пару сотен пикселей снизу. Ещё при тестовой прогонке заметил, что изображения идут не совсем по порядку, и в некоторых местах есть недостающие изображения, от которых тоже лучше сразу избавиться. Всё это можно сделать стандартными средствами моей операционной системы, так что в путь. 

В результате родился вот такой скриптик:

#!/bin/bash

i=1

while [ $i -lt 355 ] #запускаем цикл от 1 до 355

do

    FILEN=$i.1024.768.jpg

    wget "http://vp43.ru/imgphp/$FILEN" #Скачиваем файл

    SIZE=$(stat -c%s $FILEN) #Узнаём размер файла

    if [ $SIZE -ge 238 ]; #если это не пустышка

    then

           convert $FILEN -geometry x560 -crop 1024x500+0+0 $i.jpg # обрезаем часть снизу и переименовываем согласно номеру

    fi

    rm $FILEN # старый файл больше не нужен, шлём его в ад

    i=$[$i+1] # Инкрементируем переменную i

done 

Осталось пробежаться глазами и удалить фото плохого качества и те что к ВП отношение не имеют.

300 фото - мало, добрые люди подсказали, что есть такой сайт vk.com, на котором есть что пощипать. 

На vk.com всё оказалось сложнее, т.к. имена изображений нифига не по порядку, хорошо хоть есть страничка с превьюшками альбома, но с подлянкой. Например адрес превьюшки: /v25975/2e/IiFWJEebr-k.jpg, адрес изображения в модальном окне /v25975/30/LTOKiNdD82k.jpg

Придётся городить огород, хотя возможно если поискать наверняка уже кто то, что то написал, но я решил, что дольше буду искать решения отбиваясь от рекламы на варезниках и отбрасывая windows-программы которых наверняка будет валом, если в поисковом запросе будет присутствовать строка "vk.com". В голове пролетело две мысли: "Это не наш метод!" и "Лучше час потерять, а потом за 5 минут долететь".

Логика скрипта простая, на странице "предпросмотра" альбома собираются ссылки на страницы содержащие большое изображение, с которой можно взять прямую ссылку на это самое "большое изображение".

В итоге родилось вот такое чудо:

#!/bin/bash

read -p "Enter URL: " url # Ввод URL альбома

wget $url -O pages.html&&cat pages.html  |sed 's%photo-%\n%g' |sed '/^[0-9]/!d'|sed 'n;d'|cut -d "\"" -f1|cut -d "\\" -f1>pages # Добыча адресов страниц с отдельными фотографиями из альбома и сохранения списка в файл

i=0

cat pages| while read line; do # Читаем файл построчно

      link=$(wget http://vk.com/photo-$line -O link&&cat link |sed 's%x_src%\n%g'|sed '/^":"http/!d'|sed '5!d'|cut -c 4-67|sed 's%\\\/%/%g'|cut -d "\"" -f$ # А здесь добывается ссылка на изображение

      wget $link -O images/vk$line-$i.jpg # и вот наконец искомая картинка

      i=$[$i+1] # инкримент, в принципе оказался совсем не нужен

      rm link # Удаление временного файла

done 

rm pages.html # Удаление временного файла 

rm pages # Удаление временного файла 

Надо заметить, что меня настигло два фейла: первый, когда я стал скачивать большой альбом, оказалось, что чёртова страница подгружается ajax'ом по мере прокрутки и что бы получить адреса на все страницы пришлось прокрутить и сохранить страницу вручную ну и подправить одну строку скрипта. Второй более фатальный - совсем немногие фото имеют размер больше 600px, из-за чего все телодвижения на vk.com оказались практически полностью бесполезными.

Послесловие.

Хотелось бы привести примеры разметки разбираемой странички, но Валентин решил вместо замены спецсимволов html аналогами, удалять их. Черновик бы тоже не помешал. И наверняка бы этот пост имел гораздо больше кликов если бы тэги отображались в общем списке блогов. Почему? Потому, что помимо "провакационного" названия в тэгах есть слова vk.com и bash, которые как бы намекают ;) Более чем уверен, что мастер awk и sed наверняка смог бы сократить строки поиска ссылок во втором скрипте до 10-15 символов, к сожалению я таковым не являюсь (по крайней мере на сегодняшний день) и скрипту до идеала далеко. 

Послесловие2. 

Запись нельзя сохранить если в названии есть одинарная кавычка. Хорошо, что перед отправкой скопировал текст в буфер обмена.