IFrame. Переменные (getVariable и putVariable)

Готовые уроки IFrame + ВКонтакте API
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

IFrame. Переменные (getVariable и putVariable)

Сообщение Александр »

IFrame. Переменные (getVariable и putVariable)
JavaScript, IFrame, ВКонтакте API, HTML

Приложение выводит значение переменной при его открытии и записывает значение в переменную, при нажатии на кнопку.

Урок для новичков в создании Iframe-приложений ВКонтакте. На примере этого приложения можно узнать как вызывать методы api, как обрабатывать полученный результат, как выполнять действие при нажатие на кнопку и как решить проблему с кодировкой.


Для работы приложения нужен хостинг.


putVariable
Помещает в переменную, номер которой задан в параметре key (0-4095), значение, переданное в параметре value (строка в utf-8, не более 255 байтов).
Обязательные параметры:
key - Ключ от 0 до 4095, идентификатор переменной.
value - Значение, которое нужно записать в переменную. Строка в utf-8, не более 255 байтов

getVariable
Возвращает значение переменной, номер которой задан в параметре key (0-4095).
Обязательные параметры:
key - Ключ от 0 до 4095, идентификатор переменной.


1. Создаём html файл.
Можно использовать специальную программу или любой текстовый редактор, например, блокнот.
Расширение файла должно быть html.

2. Пишем в созданый html файл код:

Код: Выделить всё

<html><head><!-- подключаем xd_connection.js --><script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script><script type="text/javascript">window.onload = (function() {   // когда загрузится вся страница    VK.init(function() {    // инициализируем Vk API    // получаем значение из переменной 1040    VK.api("getVariable", {key:1040}, function(data) {         // обрабатываем полученный ответ        // выводим в textarea с id="my_text"        document.getElementById('my_text').innerHTML = data.response;    });     });}); // функция записи в переменнуюfunction put(){    // получаем текст из textarea с id="my_text"    var my_text = document.getElementById('my_text').value;    my_text = my_text;    // записываем значение my_text в ячейку 1040    VK.api("putVariable", {key:1040,value:my_text}, function(data) {         // обрабатываем полученный ответ        // если нет ошибки, то данные записаны        if (!data.error) {            document.getElementById('status_info').innerHTML = 'Данные записаны';        } else { // иначе ошибка. Выводим её.            document.getElementById('status_info').innerHTML = data.error.error_msg;        }    });}    </script></head><body><!-- поле для текста --><textarea id="my_text" rows="10" cols="45" >http://flapps.ru</textarea><br /><!-- кнопка для записи --><input type="button" value="Записать" onClick="put()"><!-- блок для вывода статуса записи: сохранено/не сохранено --><div id="status_info"></div></body></html>
Если при выполнении putVariable произойдёт ошибка, то будет возвращено примерно такое:

Код: Выделить всё

{"error":{    "error_code":110,    "error_msg":"Invalid key",    "request_params":[...]}}
Кодом data.error, мы проверяем существование такого содержания. Символ восклицательного знака "!" - означает отрицание: if (НЕ data.error)

При успешном присваивании переменной сервер вернет:

Код: Выделить всё

{"response":{}}
В этом ответе нет error.

3. Загружаем файл на свой сервер.

4. Настраиваем приложение на сайте вконтакте.
Выбираем:
Состояние: Приложение включено и видно всем
Тип приложения: IFrame
Адрес IFrame: Ссылка на созданный html файл на вашем сервере. Например http://flapps.ru/vk.html

5. Всё готово. Проверяем.
Помните, что переданное значение - строка в utf-8, не более 255 байтов. Большой текст будет обрезан.
Попробуйте сохранить текст с русскими буквами и обновите страницу. Если вместо нормального текста появляются крякозябли, то можно использовать функции escape() и unescape(). Мне они помогли.
Код такой:

Код: Выделить всё

<html><head><!-- подключаем xd_connection.js --><script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script><script type="text/javascript">window.onload = (function() {   // когда загрузится вся страница    VK.init(function() {    // инициализируем Vk API    // получаем значение из переменной 1040    VK.api("getVariable", {key:1040}, function(data) {         // обрабатываем полученный ответ        // выводим в textarea с id="my_text"        document.getElementById('my_text').innerHTML = unescape(data.response);    });     });}); // функция записи в переменнуюfunction put(){    // получаем текст из textarea с id="my_text"    var my_text = document.getElementById('my_text').value;    my_text = escape(my_text);    // записываем значение my_text в ячейку 1040    VK.api("putVariable", {key:1040,value:my_text}, function(data) {         // обрабатываем полученный ответ        // если нет ошибки, то данные записаны        if (!data.error) {            document.getElementById('status_info').innerHTML = 'Данные записаны';        } else { // иначе ошибка. Выводим её.            document.getElementById('status_info').innerHTML = data.error.error_msg;        }    });}    </script></head><body><!-- поле для текста --><textarea id="my_text" rows="10" cols="45" >http://flapps.ru</textarea><br /><!-- кнопка для записи --><input type="button" value="Записать" onClick="put()"><!-- блок для вывода статуса записи: сохранено/не сохранено --><div id="status_info"></div></body></html>
Функции escape() и unescape() используются в строках 12 и 22.

Исходник http://flapps.ru/example/iframe_variables.rar
Аватара пользователя
paduchin
FL Team
FL Team
Сообщения: 318
Зарегистрирован: 01 мар 2010, 14:20

Re: IFrame. Переменные (getVariable и putVariable)

Сообщение paduchin »

Спасибо за урок :D
Paradox
Сообщения: 1
Зарегистрирован: 19 окт 2010, 18:07

Re: IFrame. Переменные (getVariable и putVariable)

Сообщение Paradox »

Помогите пожалуйста. Как сделать так, чтобы с помощью getVariable я доставал переменную и тут же сравнивал её с единицой :?:
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: IFrame. Переменные (getVariable и putVariable)

Сообщение Александр »

Paradox

Код: Выделить всё

    VK.api("getVariable", {key:1040}, function(data) {         if(data.response==1) {           alert('Единица!');        }    });
Без знаний у тебя вряд ли что-то будет получаться...
azzzi
Сообщения: 164
Зарегистрирован: 13 сен 2010, 19:24

Re: IFrame. Переменные (getVariable и putVariable)

Сообщение azzzi »

В контакте как всегда никакой документации толковой...

Кто может ответить на вопросы?
1. можно ли сделать каждому ИД свое значение переменной 1040?
2. если можно нет ограничений на количество? за сутки то приложение может десятки тысяч таких переменных сделать
3. какой срок хранятся эти переменные на сервере?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: IFrame. Переменные (getVariable и putVariable)

Сообщение Александр »

azzzi
1. Какие-то переменные доступны только пользователю и у каждого они свои. Какие номера - не знаю, где-то вконтакте было написано.
2. Есть общее ограничение всех переменных. 0-4095. не более 255 символов в каждой.
3. Какие-то неограничено, а какие-то вроде бы несколько часов (переменные сессии).
azzzi
Сообщения: 164
Зарегистрирован: 13 сен 2010, 19:24

Re: IFrame. Переменные (getVariable и putVariable)

Сообщение azzzi »

4095 переменных...

получается если их использовать чтобы записывать ОЧКИ игроков в приложении, то за пару дней все переменные будут заняты.

значит толку от переменных в этом случае нет, я правильно понял?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: IFrame. Переменные (getVariable и putVariable)

Сообщение Александр »

azzzi
Да, для хранения большого количества информации, переменные не подойдут.
kurenchuksergey
Сообщения: 5
Зарегистрирован: 04 ноя 2011, 17:14

Re: IFrame. Переменные (getVariable и putVariable)

Сообщение kurenchuksergey »

а можно все не в textarea закинуть а в php&
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: IFrame. Переменные (getVariable и putVariable)

Сообщение Александр »

kurenchuksergey
не понял тебя...
Методы getVariable и putVariable - считаются устаревшими. Вместо них появились методы storage.get и storage.set.
Ответить