25 апр. 2011 г.

А не послушать ли нам ВКонтакте из консоли?

Цель: Есть такой хомячковый ресурс ВКонтакте, так вот на нем море музыки выложенной самими пользователями данной социалки и прослушивая сия море медии можно отмечать понравившиеся мелодии тем самым коллекционировать у себя список "любимых" треков.

Но все хорошо когда есть GUI'ёвый браузер и доступ к ресурсу, а когда нет такого? К примеру браузера нет под рукой, или аудиосистема подключена дома к основному компу на котором Linux, а сам лежишь в соседней комнате с ноутом ... ?

Одним словом нужно было что то типа из под консоли (командной строки)!



Дано: Linux: curl, bash, ну и mplaeyr, если еще и уровнем звука управлять то alsamixer, а если еще и непрерывно от сессии, то еще и screen

Решение:

1. Ставим вышеперечисленные пакеты:
sudo apt-get install curl mplayer screen
или
sudo urpmi curl mplayer screen
2.  Создаем исполняемый файлик ...
touch vkplay.sh && chmod a+x ./vkplay.sh
3. Открываем его своим любимым редактором и вставляем нижеписанный код:

#!/bin/bash

# Меняем на свой логин/пароль
EMAIL=your@mail.net
PASS=your_super_password

TMPC=/tmp/~vkcookie
TMPG=/tmp/~vkget

echo Получаем куки ...
gets=`curl -s --data "email=$EMAIL&pass=$PASS" http://login.vk.com/?act=login | egrep -o \([a-z]\|[0-9]\){20\,}`
curl -s --cookie-jar $TMPC --data "s=$gets&op=slogin&redirect=1&expire=0&to=0" http://vkontakte.ru/login.php

IFS=$'\n'
OFFSET=0

# И поехали по списку "Мои Аудиозаписи"...
while [ ! $OK ]; do
    URL=http://vkontakte.ru/audio.php?offset=$OFFSET    
    curl -s --cookie $TMPC -o $TMPG $URL

    PL=(`cat $TMPG | grep -i title_wrap | grep -v lyricsLink | sed -r "s/<([^<]*)>|(\&\#[0-9]{2,4};)|^\s*//g" | sed -r "s/[ ]{2,}/ /g"`)
    PLC=${#PL[@]}

    if [ $PLC \> 0 ]; then

        UL=(`cat $TMPG | grep -o 'http.*mp3'`)
        ULC=${#UL[@]}

        for ((n=0; n < $PLC; n++))
        do
            PL[$n]=`echo ${PL[$n]} | sed -r 's/[ \t]*$//'`
            if [ -n "${PL[$n]}" ]; then
                echo "  $(( $OFFSET+$n )). ${PL[$n]}" 
                # Собственно играем нашу песенку ... Опция "-mixer /dev/mixer" говорит mplayer'у играть на звуковой той машины на которой запускается он сам ...               
                mplayer -msglevel all=1 -mixer /dev/mixer ${UL[$n]}
            fi
        done

        OFFSET=$(( $OFFSET+$PLC ))
    else
        echo Всё! Всё спели, можно и отдохнуть чутку...
        OK=1
    fi

4. Сохранились, не забыли указать свой логин и пароль, и даже запустились ... и о счастье! запело шарманка наша ... но мы та хотим из другой комнаты и вообще не быть привязанными ...
  4.1 запускаем терминальчик по ssh, кто что, xterm, konsole, putty, etc ...
  4.2 в нем screen (выход из него сочетание: ctrl+a, d) (обратно подключится к скрину: screen -rd)(если у тебя уже запущено более одного скрина, как переконекчиваться по номеру сессии смысла тебе объяснять уже нет ;) )
  4.3 ну и запускаем наше чудо-файлик
  4.4 громкостью управлять или самим mplayer'ом (подробности man mplayer), или запускаем alsamixer ... кому что по душе =)


Примечания:

  • Листать вперед/назад фишки нет ... но додумать можно, средствами формирования сначала плейлиста а потом скармливания мплаеру)
  • Пропустить песню: Ctrl+C, после чего заиграет следующая из списка
  • По крону (crontab), вообщем, классный будильник получился ))

1 комментарий:

  1. пропущен done в конце скрипта, ну и у меня не взлетело - разбираюсь почему сейчас

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