My favorites | Sign in
Project Home Wiki Issues Source
Search
for
Using  
Инструкции по использованию библиотеки.
Featured
Updated Feb 2, 2010 by alexande...@gmail.com

Для использования скрипта, необходимо скачать его, разместить на своем сайте в любом каталоге, а затем, непосредственно в приложении, добавить его к странице:

<!-- В данном случае, скрипт расположен в каталоге  
      с соответствующим HTML-файлом -->  
<script src="vk_api.js" type="text/javascript"></script>

Далее нужно создать объект, с которым и будет проходить вся дальнейшая работа:

//Создаем объект от vk_api(). Вся дальнейшая работа должна проходить  
//только с объектом api.  
var api = new vk_api(  
    //Это Секрет, он указан на странице редактирования приложения  
    'hGtsH5G0',  

    //Эта функция будет вызвана, если инициализация API пройдет успешно.  
    //Хорошее место для установки всех callback-функций через  
    //addCallback()  
    function() {  

        //Вызываем окно изменения настроек с отмеченными настройками для  
        //доступа к друзьям и к стене. Пользователь не сможет закрыть  
        //вызванное окно, пока не установит требуемые настройки.  
        api.makeSettings(api.SETT_FRIENDS | api.SETT_WALL);  

        //Добавляем функцию, которая запустится, если пользователь добавит  
        //приложение к себе на страницу.  
        api.addCallback(  
           'onApplicationAdded',  
            function() {  
                //действия  
            }  
        );  
    },  

    //Эта функция вызывается, если инициализация API не состоялась.  
    //В этом случае, невозможно использовать внешние (external) вызовы.  
    function() {  
        //сообщение об ошибке  
    }  
);  

Ну и самое интересное, то, ради чего и писался этот скрипт — вызовы методов API:

//Вызываем метод API через функцию call()
api.call(

    //Название метода API.
    //Допустим, получение расширенной информации о профилях.
    'getProfiles',

    //Это объект с параметрами метода API. Если параметров нет,
    //то этот аргумент можно не указывать.
    {
        uids: '4124584,2327412,1237975',

        //Можно указывать массивы, которые будут автоматически
        //преобразованы в строки.
        fields: [
            'first_name', 'last_name', 'nickname',
            'bdate', 'city' , 'country', 'photo'
        ]
    },

    //Эта функция будет вызвана, когда будет получен ответ от сервера.
    //data - это готовый к использованию объект, созданный из строки
    //JSON, полученной от сервера.
    function(data) {
        //Действия с объектом data
    }
);

Ниже приведен пример использования внешних функций через external.:

<a href="#" onclick="api.external.showSettingsBox(api.SETT_FRIENDS | api.SETT_WALL);">
    Изменить настройки  
</a>

А через params можно получить доступ к параметрам, переданным приложению при запуске:

//Выводим в контейнер с id="text" все параметры, переданные
//приложению при запуске.
for (var key in api.params) {
    document.getElementById('text').innerHTML +=
            'api.params.' + key + ' = ' + api.params[key] + '<br />';
}

Кстати, при инициализации объекта, необходимо указывать api_secret. Было бы нехорошо оставлять его в коде в открытом виде, даже если вы обфусцируете код. Оптимальный вариант — простенькое кодирование, хотя бы для того, чтобы в исходном коде секрет не встречался.

Так вот, такое кодирование уже реализовано! Конструктору vk_api() в качестве первого параметра можно передавать специальным образом закодированный Секрет. В этом случае, секрет будет автоматически раскодирован. Закодировать секрет вы можете, используя специальный сервис, размещенный по адресу: http://xinit.ru/vk_app_secret/.

Ниже приведен пример использования закодированного секрета при создании объекта.

var api = new vk_api(  
    //Так выглядит закодированный секрет. Можно передавать  
    //как кодированные, так и некодированные строки.  
    'sx--73l40l85l84l41l22l40l17l',  
  
    //Выполнить после успешной инициализации.  
    function() {}  
);
Comment by 4all.iL...@gmail.com, Jul 25, 2010

//Эта функция будет вызвана, если инициализация API пройдет успешно. НЕТ

на практике, эта функция будет вызвана всегда. почему? даже при указании левого секретного кода и запуска и-фрейма не из вконтакта.

Comment by rukolon...@gmail.com, Jul 25, 2010

>на практике, эта функция будет вызвана всегда. почему? >даже при указании левого секретного кода и запуска >и-фрейма не из вконтакта. Потому что под инициализацией понимается совсем другое. На данном этапе секретный ключ не проверяется, а откуда запущен ифрейм - по барабану. Если VK успешно загрузился и готов к работе (а это бывает в подавляющем большинстве случаев), то функция будет вызвана.

Comment by rukolon...@gmail.com, Jul 25, 2010

Кстати, я бы таки настоятельно рекомендовал использовать VK.api(), по синтаксису абсолютно аналогичный api.call().

Comment by mifr...@gmail.com, Oct 2, 2010

при использовании данной библиотеки возвращается ошибка: MD5 is not defined

Comment by mifr...@gmail.com, Oct 2, 2010

с MD5 я разобрался, моя ошибка. а вот test_mode = true; не работает и апи возвращает ошибку: Application is disabled. Enable your application or use test mode

Comment by and7ey@gmail.com, Oct 7, 2010

Что-то в примере не описано. Можно ли как-то получить параметры переданные в url при запуске приложения? (типа vkontakte.ru/app123456?parms=someparms или vkontakte.ru/app123456#parms). А параметры, переданные vkontakte.ru/app123456 в post запросе?

Comment by petr.log...@gmail.com, Nov 6, 2010

mifrith, В чем была проблема? У меня такая же ...

Comment by rukolon...@gmail.com, Nov 6, 2010
а вот test_mode = true; не работает и апи возвращает ошибку: Application is disabled. Enable your application or use test mode

Ну собственно, включите приложение.

and7ey, можно получить параметры после #, и параметры GET-запроса типа flashvars.

И еще раз. Для новых приложений используйте VK.api(). Старые старайтесь постепенно тоже переводить - синтаксис одинаковый, это будет не сложно.

Comment by wpl...@gmail.com, Nov 11, 2010

описываю проблему в работе с этой либой под САФАРИ и как ее решить. Проблема: сафари не дает ставить вконтакту куки в ифрейм пока пользователь не проинтерактивит с ифреймом как то сам. в результате api_url и тому подобное, если в ифрейме грузить разные страницы, тупо теряются из this_proxy.params - document.location.href их уже не содержит, а в куках они не сохранены. т.е. после первой навигации по любой внутренней ссылке внутри приложения работа с вконтактом заканчивается ничем (ничего не рабоает, потому что this_proxy.params не содержит ничего)

Решение: 1) на строке 372 VK.loadParams(document.location.href); заменяем на VK.loadParams(url?url:document.location.href); 2) дописываем метод в либу: // Function used to fix parameters because safary/opera loose cookies some times (security issues) this.fixParams = function (originalUrl){ if(originalUrl && !this_proxy.params.api_url){

loadParams(originalUrl);
} }

3) vk_api.call(...) приходится вызывать так: function plat_callVkApi(a,b,c) {

if(!api){
return;
} var savedLocation = document.location.href; if(savedLocation.indexOf("viewer_id") >= 0 || savedLocation.indexOf("user_id") >= 0){
savedLocation.indexOf("api_url") >= 0
$.Storage.set("local_original_url",savedLocation);
}else{
savedLocation = $.Storage.get("local_original_url");
} api.fixParams(savedLocation); api.call(a,b,c)
}

где $.Storage - jQueryевский плагин для кеширования данных на клиенте (кешируем урл со всеми данными - самый первый - и потом подсовываем его либо чтобы this_proxy.params из него проинициализировался)


Sign in to add a comment
Powered by Google Project Hosting