По мотивам
http://welinux.ru/post/6143/ и
http://welinux.ru/post/5128/ и вот продолжение от kamikaze
http://pastebin.ubuntu.com/691957/кто-нибудь может написать запрос к api vkontakte в bashe чтоб он работал? Я пытался через клас php - но не вышло - пишет чё-то не так с подписью...
+ Не требует авторизации.
+ Сохраняется очередность треков как в плейлисте (нумерация с ведущими нулями)
- не доконца автоматизированно (надо выкачивать playlist.m3u)
что надо сделать:
1.
обрезать название для имени файла - слишком длинные не переименовываются сделал максимум 127 символов.
2. как быть с дубликатами? (в плейлисте один и тот же файл может быть под разными названиями.)
3. как вы уже наверняка догадались синхронизация кагбэ не получится.... пока что....
4.
Допустим в каталоге 2 плейлиста... (проверка больше двух - выбрать какой m3u использовать) велл дан
Предыстория. Сделал я себе во всеми известной социалке
плейлист из любимых треков. Ну а чо, довольно быстро и удобно получилось, да и везде под рукой. Но вот незадача - магнитола в машине не умеет играть музыку из контакта)). Посему пришлось выкачивать все треки. Но ручками само собой это делать не вариант, поэтому добро пожаловать под кат.
1) Ставим расширение
Vkontakte Tools UPD: Vkopt или с их офсайта
http://vkopt.net/download/.
2)
Заходим ффконтактик, аудиозаписи, выбираем нужный плейлист, КРУТИМ СТРАНИЧКУ ДО УПОРА ВНИЗ!!!! жмакаем наверху "Редактировать". Должна появиться иконка винампа, после нажатия на которую получаем playlist.m3u. UPD: заходим в свою музыку, справа жмакаем на ссылку "[Cсылки]" - открывается окошко - жмак по вкладке
M3U плейлист - внизу кнопка
Скачать M3U плейлист (UTF-8).
кладем скачанный файл
.m3u (если он без расширения - добавьте .m3u) кладем в папку muzvk.
Кагбэ все ссылки на mp3 получить скриптом - первые 50 получится, а дальше страничка подгружается джабаскриптом 
в той же папке создаем файлик
syncVKplayist.sh со следующим содержимым: (gedit например)
#!/bin/bash
plst=$(ls | grep '\.m3u')
if [ -z $plst ]; then echo нет ни одного файла с плейлистом с расширением m3u. выходим - не счем работать.; exit 0; fi # Если файла с плейлистом нет, то выходим. Не счем работать.
if [ `ls | grep '\.m3u' | wc -l` -gt 1 ]; then echo "больше одного плейлиста в этом каталоге, какой плейлист желаете распарзить?";
select var in `ls | grep '\.m3u'`
do
echo
echo "Вы выбрали → $var"
plst=$var
echo
break # если 'break' убрать, то получится бесконечный цикл.;
done
fi
if [ -z $(ls | grep links.old) ]; then echo нет файла links.old создаю....; touch links.old; fi;
if [ -z $(ls | grep names.old) ]; then echo нет файла names.old создаю....; touch names.old; fi;
mkdir renamed
mkdir unnamed
mv links links.old
mv names names.old
cat $plst | grep -o "http://.*\.mp3" | sed 's/\(http:.*\.mp3\)\(?.*\)/\1/' > links
cat $plst | grep EXTINF | sed 's/^#EXTINF:[0-9]*,\(.*\)$/\1/' | sed 's/\(&#[0-9]*;\)\|\/\|\\\|:\|\*\|\?\|\"\|<\|>\||//g' | cut -c -127 > names1
a=10000
b=$(grep '.' names1 | wc -l)
c=$(($a - $b))
cat names1 | nl -w4 -nrz -v$c | sed 's/\t/ /' > names
diff links links.old | grep "<" | sed 's/< //g' | sed 's/\s/\n/g' > .to_mv
if [ -z $(cat .to_mv) ]; then echo треков не добавилось - выходим; exit 0; fi #Если треков не добавилось - выходим
diff names names.old | grep "<" | sed 's/< //g' > .to_rename
cp .to_mv ./unnamed
cd unnamed
wget -c -i .to_mv
#wget -c --wait=60 --waitretry=10 -i .to_mv # пауза в СЕКУНДАХ между загрузками чтобы не забанили... ну для параноиков
cd ..
date >> log
cat .to_mv >> log
if [ $(cat .to_rename | wc -l) = 0 ]; then echo "нет имён файлов - выходим, иначе все то, что накачали потеряется"; exit; fi
LINES=$(cat .to_mv | wc -l)
for i in $(seq $LINES); do
FILE=$(head -n 1 .to_mv | sed 's/^.*\///')
NAME=$(head -n 1 .to_rename)
sed -i 1d .to_mv
sed -i 1d .to_rename
#mv "$FILE" "$NAME.mp3"
cp -l ./unnamed/"$FILE" ./renamed/"$NAME.mp3" #так будут дубликаты как в плейлисте, вдруг Вы спецом так захотели
done
rm .to_mv
rm .to_rename
rm names1
if [[ `gdialog` == "" ]]; then messager="gdialog --msgbox"; elif [[ `kdialog` == "" ]]; then messager="kdialog --msgbox"; else messager=echo; fi; echo $messager;
$messager "Успешно загружено $LINES файлов"; # у кого k, а кого и g :)))
exit 0
сделать его исполняемым
chmod +x syncVKplayist.sh
запускать из терминала.
почему-то запускать надо так
./syncVKplayist
, если запускать так:
sh syncVKplayist
то почему-то не работает
select (если кто знает - объясните)
почему-то не запускается на флешке...
Что надо решить доделать и всяческие мысли:
запустили скрипт, скачали в локальную папку, добавили на вконтактплейлист еще треков и перемешали очередность. Мне кажется что diff скажет, что все записи разные. Результат еще не пробовал.
еще один вариант:
парзим плейлист в links и names
diff новые файлы в папку
localStore unnamed не перенименовывая (
как сказать wgetu не качать дубли? c флагом -с , если с флагом -nc то wget не будет докачивать файлы...)
далее в папке
normalNames renamed создаём ссылки на файлы (для ntfs hard link? а для fat32?)
и порядковый номер опятьже с конца начиная с 9999 (ну или сколько вы планируете запихнуть на флешку/hdd)
После допила до ума хотелось бы сделать скрипт кроссплатформенным, может на флеше его написать?