Pull to refresh

VK::App — модуль для создания клиентских приложений в vk.com

Reading time 3 min
Views 27K
Хочу рассказать о своем модуле VK::App для создания клиентских приложений в социальной сети vk.com. Основные возможности модуля:
  • Авторизация, основанная на OAuth 2.0, по логину/паролю или cookies.
  • Установка прав доступа, которые потребуются приложению.
  • Выполнение любых запросов VK API и получение результата в JSON, XML или Perl Object виде.
Модуль использует минимум зависимостей: только LWP и JSON.

Для написания клиентского при приложения вам надо знать api_id. Для этого можно зарегистрировать свое приложение или использовать существующий api_id.

Синтаксис


Конструкторы

    #1. Авторизация по логину и паролю
    use VK::App;
    my $vk = VK::App->new(
            # Ваш мобильный телефон или email    
            login => 'login',
            # Пароль
            password => 'password',
            # api_id приложения
            api_id => 'api_id',
            # Имя файла в который будут записываться и считываться cookies
            #(в данном варианте конструктора это не обязательный параметр)
            cookie_file => '/home/user/.vk.com.cookie',
    );
    #2. Авторизация с помощью cookies файла
    use VK::App;
    my $vk = VK::App->new(
            cookie_file => '/home/user/.vk.com.cookie',
            api_id => 'api_id',
    );
    #3. Дополнительные опции
    use VK::App;
    my $vk = VK::App->new(
            cookie_file => '/home/user/.vk.com.cookie',
            api_id => 'api_id',
            # Перечисляем через запятую права, которые будут нужны приложению.
            # Список всех возможных прав доступа можно посмотреть по ссылке:
            # http://vk.com/developers.php?oid=-17680044&p=Application_Access_Rights
            scope => 'friends,photos,audio,video,wall,groups,messages,offline',
            # Формат данных в котором будут возвращаться ответы на запросы:
            # 'JSON', 'XML' или 'Perl' объекты. Значение по умолчанию: 'Perl'. 
            format => 'Perl',
    );

Примеры запросов

    # Синтаксис такой:
    # my $response = $vk->request($METHOD_NAME,$PARAMETERS);
    # Список всех методов:
    # http://vk.com/developers.php?oid=-17680044&p=API_Method_Description

    #1. Получить uid пользователя по его имени
    my $user = $vk->request('getProfiles',{uid=>'genaev',fields=>'uid'});
    my $uid = $user->{response}->[0]->{uid};

    #2. Получить список треков пользователя по его uid
    my $tracks = $vk->request('audio.get',{uid=>$uid});
    my $url = $tracks->{response}->[0]->{url}; # прямая ссылка на mp3 первого трека


Модуль опубликован на cpan. Более подробная документация и описание всех методов: https://metacpan.org/module/VK::App.

Зачем нужен еще один велосипед?


Потому что у других велосипедов квадратные колеса! У меня в vk.com есть несколько любимых музыкальных групп и друзей, с которыми наши музыкальные вкусы совпадают. Хотелось иметь актуальную локальную копию музыки этих групп и друзей, чтобы слушать её, например в машине. т.е. иметь возможность автоматической синхронизации. Приложения с GUI я не рассматривал в принципе. Среди консольных подходящих не нашел. Можно было бы поискать реализацию API для других языков программирования (имею опыт работы с Ruby, Python, Java, C), но душа лежит именно к Perl. На cpan.org есть два модуля VK::MP3 и VKontakte::API. VK::MP3 — нормальный модуль, но мои задачи не решает, т.к. занимается только поиском музыки. VKontakte::API — абсолютно не работоспособный. Во-первых он зачем-то требует секретный ключ приложения, что является небезопасным. Во-вторых на запрос getUserSettings он возвращает код +1, что означает фактическое отсутствие прав доступа. В-третьих при использовании третьего варианта конструктора модуль просто падает. По этим причинами и возникла идея написания модуля, о котором здесь идет речь.

Планы


Довести до ума мою программу vmd (vkontakte music downloader) ради которой все и затевалось. Выложить её на github, может будет кому-то полезна? Могу собрать из программы статические бинарники под windows, mac, linux (есть купленная версия PDK).

Так получилось, что VK::App — мой первый модуль опубликованный на CPAN. И процесс публикации занял в два-три раза больше времени, чем написание самого модуля. Вроде бы и информации в сети очень много, а четкой последовательности действий не знаешь. Да и есть подводные камни. Я довольно подробно изучил этот вопрос и написал для себя инструкцию, как правильно и быстро собрать дистрибутив модуля для его публикации. Могу её немного причесать и выложить в качестве отдельной статьи на habrahabr.

Буду рад любым фитбекам!

UPD
по поводу планов:
пост про vkontakte music downloader — habrahabr.ru/post/146889
пост про публикацию модулей — habrahabr.ru/post/146821
кроме того vk.com изменил механизм авторизации по логину и паролю и пришлось менять модуль. Текущая версия VK::App 0.06 — рабочая, все предыдущие не работают. Подозреваю, что модуль VK::MP3 тоже перестал работать.
Tags:
Hubs:
+41
Comments 28
Comments Comments 28

Articles