Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Голосование

нужно?

очень нужно
нужно
не нужно

Автор Тема: sync muzic vkontakte 2 local папка (сыро но работать должно) :)  (Прочитано 2118 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн shkur

  • Автор темы
  • Новичок
  • *
  • Сообщений: 49
    • Просмотр профиля
    • Карта Фитнес
По мотивам 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 например)

Код: (bash) [Выделить]
#!/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/\(&#38;#[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)

После допила до ума хотелось бы сделать скрипт кроссплатформенным, может на флеше его написать?
« Последнее редактирование: 22 Октября 2013, 12:44:40 от shkur »
karta-fitness.ru

Оффлайн Eli

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Хм, я смотрю эта тема никому не интересна, так, что надеюсь никто не обидится, что я несколько под себя подточил эту штучку. Автору респект и спасибо!

(Нажмите, чтобы показать/скрыть)

Оффлайн shkur

  • Автор темы
  • Новичок
  • *
  • Сообщений: 49
    • Просмотр профиля
    • Карта Фитнес
надо все же не по именам треков, а по именам файлов. Только вот имена файлов постоянно меняются вконтактом. UPD: Можно скачивать первые 50кб каждого файла и сверять....
Еще, как вариант добавить возможность разносить по вложенным папкам то, что в альбомах.
Не все треки полностью докачиваются. Вот.

Вот у Kamikadze были какие-то идеи http://welinux.ru/post/6143/#cmnt110627
« Последнее редактирование: 04 Марта 2013, 15:59:35 от shkur »
karta-fitness.ru

Оффлайн thunderbird

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Я тот самый kamikaze если что.
Я ж там на welinux выкладывал рабочий вариант, который у меня успешно проработал N месяцев, пока не сдох винт. На pastebinе почему-то код потерли, дубликата естественно не осталось, кто ж делает бэкапы пока не потеряет что-то.
Общая идея - получаем список названий файлов и список названий композиций и ставим их друг другу в соответствие, по именам композиций смотрим какие появились новые, выкачиваем соответствующие файлы.
« Последнее редактирование: 09 Марта 2013, 17:49:30 от thunderbird »

 

Страница сгенерирована за 0.02 секунд. Запросов: 25.