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

    Хочу рассказать о своем модуле 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 тоже перестал работать.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 28

      –1
      Адски плюсую (но карма не позволяет)))
        +2
        Спасибо :)
          +22
          Первое правило кармы…
        • НЛО прилетело и опубликовало эту надпись здесь
            0
            Позвольте полюбопытствовать в плане повышения обшей грамотноси — тут человеку за что минусов накидали?
            0
            Весьма недурно!
              0
              vdm — консольное приложение или будет GUI?
                +1
                Консольное
                0
                За не имением кармы пользователь noize просил:
                «как выложите vdm на гитхаб, дайте знать, готов поучаствовать в разработке».
                  0
                  Ок. Но пусть он мне лучше PM или email напишет, что бы я не забыл. В дистрибутиве модуля лежит простенький демонстрационный скрипт, который, скачивает музыку указанного пользователя. Можете его посмотреть. metacpan.org/source/MAG/VK-App-0.04/scripts/vmd.pl
                    0
                    habrahabr.ru/post/146889/ — пост про vmd
                    –2
                    жаль не на джаве
                      +1
                      А зачем заново изобретать свою реализацию OAuth? Есть же уже готовые модули типа Net::OAuth
                        0
                        Да, вы правы! Его можно и наверное нужно было использовать. Но я даже не подумал поискать готовые модули для OAuth. Но зато моя реализация, как я писал, имеет минимум зависимостей. А у Net::OAuth их довольно много.
                        0
                        В правилах (пункт 12) размещения приложений на сайте ВКонтакте сказано, что запрещается «Предоставлять пользователям возможность прямого скачивания музыкальных или видео файлов с серверов ВКонтакте..
                        Вопрос:
                        -распространяется ли это на клиентские stand-alone приложения?

                          0
                          Помню в рамках конкурса написания клиента запрещалось.
                          Проигрывать можно. Давать явную возможность сохранить — нет.
                          0
                          У Вас «Vkontacte::API» не правильно написано…
                            0
                            Спасибо, исправил!
                            0
                            Рад, что Перлом еще кто-то пользуется :) выкладывайте на гитхаб, конечно, с удовольствием почитаю
                              0
                              Да, perl отличный язык. Жемчужина :)
                              0
                              «Довести до ума мою программу vdm (vk download music) ради которой все и затевалось»

                              Давайте же объединим усилия! Я как раз подумывал добавить работу с плелистами и тп.
                                0
                                Это я про VK::MP3
                                  0
                                  Ответил в PM.
                                –1
                                чтобы собрать на debian нужны следующие зависимости, cpan их не предлагает =(
                                apt-get install libssl-dev
                                cpan install IO::Socket::SSL
                                cpan install File::HomeDir
                                  0
                                  Пытаюсь авторизоваться по логину-паролю — выдает ошибку

                                  d:\files\VkontakteMessages>perl test.pl ERROR: authorize app failed at VK/App.pm line 28.

                                  our $VERSION = 0.08;
                                    0
                                    значит не правильный логин, пароль или api_id. версия 0.08 точно рабочая. она используется в vmd genaev.com/pages/vdm, который активно использует народ и никто пока на ошибку при авторизации не жаловался.
                                      0
                                      Пробовал логин пароль от двух аккаунтов. Потом тоже самое сделал на руби с помощь ruby и гема vk-console — заработало. Может еще сегодня потестирую.
                                    0
                                    А можно прикрутить конструктор без авторизации? Не всем методам api она нужна, если приложение использует только такие методы, то ваш модуль непригоден.

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                    Самое читаемое