суббота, января 30, 2010

Что нам дает API ВКонтакте

Соцсети уже прочно вошли в наш быт и собрали миллионы пользователей. И нашему брату флэшеру открылись новые области для творчества. В частности - Flash-приложения сетевого проекта ВКонтакте, для которых создан специальный API, позволяющий легко интегрировать приложение в систему ВКонтакте.
Итак, что же нам предлагает API ВКонтакте - давайте разберемся.

Обзор
Как обычно, для начала почитаем, что об этом пишут наши коллеги.
Однако, никаких вразумительных статей, кроме материалов в рамках самого "ВКонтакте" найти не смог. Если кто-нибудь видел таковые - пожалуйста, киньте ссылочку в комменты. Итак:
  • Первый ресурс, важный для разработчика, это, собственно раздел "Разработчикам" на самом ВКонтакте.
    Здесь нам обещают миллионы долларов, основные ссылки по теме и небольшое описание, из которого мы уже можем почерпнуть, что:
    - Приложение может иметь границы до 827х4050.
    - Приложение может иметь доступ к пользовательскому левому меню, счетчикам, обычным и SMS-уведомлениям, профилю, фотографиям, друзьям, рейтингу, аудиозаписям пользователей – и многому другому.
    - Работа по совершенствованию API ведется непрерывно.
  • Клуб Flash API
  • API ВКонтакте на flasher.ru: API приложений и сред
Возможности API ВКонтакте
Попробуем выявить возможности приложений ВКонтакте, проанализировав функции API.

Работа с пользовательскими данными
Приложение имеет доступ к следующим данным:
  • Установил ли пользователь, который просматривает приложение себе на страницу данное приложение
  • Данные по любому пользователю, на основании его ID:
    - имя,
    - фамилия,
    - псевдоним,
    - пол,
    - дата рождения,
    - город,
    - страна,
    - часовой пояс,
    - url-адреса фото малого, среднего и большого размеров,
    - известен ли его мобильный телефон,
    - рейтинг
  • Баланс пользователя на счету приложения
  • Доступ к данным пользователя, просматривающего приложение:
    - разрешить отправлять ему уведомления,
    - доступ к друзьям,
    - доступ к фотографиям,
    - доступ к аудиозаписям,
    - доступ к предложениям,
    - доступ к вопросам,
    - доступ к wiki-страницам,
    - доступ к меню слева,
    - публикация на стенах пользователей.
  • Список групп, в которых состоит пользователь с общей информацией о каждой группе.
У каждого пользователя ВКонтакте есть друзья - другие пользователи ВКонтакте. Доступные данные друзей пользователя:
  • Список друзей текущего пользователя.
  • Список друзей текущего пользователя, которые уже установили данное приложение.
Приложение может так же осуществлять следующие действия:
  • Поднять рейтинг пользователя от имени приложения
  • Если пользователь установил приложение в меню слева, приложение может задать краткое имя приложения, а так же вывести счетчик рядом с названием приложения - например, счетчик уведомлений.
  • Устанавливать и считывать строку статуса приложения.
Работа с фотографиями пользователя
Пользователь ВКонтакте может создавать множество альбомов с фотографиями в разделе "Мои Фотографии". API предоставляет широкий выбор возможностей по работе с альбомами и фотографиями.
Фотографии должны иметь формат JPG, PNG или GIF.
Приложение может получить:
  • Список фото-альбомов с общими данными о каждом альбоме.
  • Список фотографий из какого-либо альбома (или непосредственно по ID фотографии) с набором ссылок на изображения различных размеров и качества.
Приложение может осуществлять следующие действия с альбомами и фотографиями:
  • Создавать альбом (с описанием и контролем доступа к нему).
  • Редактировать данные существующего альбома.
  • Изменять порядок в списке альбомов.
  • Изменять порядок фотографий в альбоме.
  • Переносить фотографии из альбома в альбом.
  • Делать фотографию обложкой альбома.
  • Загружать фотографии на сервер ВКонтакте, на стену пользователя, на страницу пользователя.
Работа с аудиозаписями пользователя
Пользователь может загружать аудиозаписи и прослушивать их в разделе "Мои Аудиозаписи".
Аудиозапись должна быть в формате MP3, не превышать 10Мб и не нарушать авторских прав.
API предоставляет широкий выбор возможностей для работы с аудиозаписями:
  • Получать список аудиозаписей пользователя или группы с общей и подробной информацией о каждой записи.
  • Получать текст песен аудиозаписей.
  • Осуществлять поиск по аудиозаписям.
  • Загружать, удалять, восстанавливать удаленные аудиозаписи.
  • Редактировать данные аудиозаписи.
  • Добавлять аудиозапись на страницу пользователя или группы.
  • Менять порядок следования аудиозаписей.
Работа с видеозаписями пользователя
API позволяет получать список видеозаписей пользователей, групп с общей информацией о каждой видеозаписи.

Стена пользователя
Приложение может выводить на стену пользователя запись, содержащую текст, а так же изображение из альбома пользователя или только что загруженное на сервер ВКонтакте изображение.

Голоса ВКонтакте
Собственная валюта проекта ВКонтакте - голоса. Каждый пользователь, а так же приложение имеет свой платежный баланс, на котором может находиться какое-то количество голосов.
API предоставляет приложению доступ к следующим функциям:
  • Получить платежный баланс (количество голосов) приложения.
  • Получить платежный баланс (количество голосов) пользователя.
  • Перевести голоса со счета приложения на счет пользователя.
  • Перевести голоса со счета пользователя на счет приложения.
  • Перевести голоса со счета пользователя на счет другого пользователя в рамках приложения.
  • Просмотр историй транзакций по переводу голосов между пользователями и приложением
Работа с SMS
Приложение ВКонтакте может задействовать столь мощные сервисы, как отправка и прием SMS:
  • Отправка SMS-уведомления. При этом со счета приложения списывается 0.1 голоса.
  • Просмотр списка SMS-сообщений, полученных от пользователей приложением.
  • Просмотр истории SMS-уведомлений, посланных приложением.
Отправка SMS-сообщения бесплатна (стоимость обычного SMS-сообщения). Отправка осуществляется на телефон +7 921 000 00 07, а чтобы приложение получило свое сообщение, API предоставляет возможность установить приложению префикс, который пользователь должен указать в начале своего SMS-сообщения.

Работа с сервисом "Предложения"
С помощью сервиса "Предложения", пользователь получает возможность создать свое уникальное предложение. Это предложение смогут увидеть все пользователи ВКонтакте -этот сервис независим от личной странички. Любое предложение начинается со слов "Хотели бы Вы", далее следует сам текст, а в конце уже стоит вопросительный знак. Пользователи могут посматривать предложения других пользователей, принимать чужое предложение нажатием варианта «Да, конечно» или отказываться нажатием варианта «Нет».
Итак, функции для работы с предложениями:
  • Редактировать, открыть для общего доступа, и закрыть предложение пользователя, просматривающего приложение.
  • Просматривать, искать предложения пользователей.
  • Принимать и отклонять предложения пользователей.
  • Просматривать ответы на предложение пользователя.
  • Получать список ответов на предложения, принятые пользователем.
  • Удаление и пометка о прочтении ответов пользователей.
Работа с сервисом "Вопросы"
Аналогичный предыдущему сервис, позволяющий задавать вопросы и получать на них ответы от других пользователей. В API так же есть всё необходимое для управление этим сервисом из приложений.

Работа с Wiki-страницами
Пользователям предоставляется система редактирования страниц, которая позволяет участникам групп совместно создавать бесконечное количество страниц с перекрестными ссылками. Таким образом, пользователи могут создавать в группах библиотеки или мини-энциклопедии. Кроме того, пользователи могут использовать особую wiki-разметку для оформления страниц.
Приложения имеют возможность работать с Wiki-страницами:
  • Получать текст и полную информацию о wiki-странице.
  • Редактировать и сохранять текст и настройки wiki-страницы.
  • Получать список wiki-страниц в группе.
  • Транслировать wiki-разметку в html-разметку.
Организация чата
API позволяет создавать в приложении чат, используя очередь сообщений - 127 сообщений. Для этого предусмотрены функции добавления сообщения в очередь и просмотра всей очереди сообщений.

Сохранение игровых рекордов
API предусматривает специальные функции для сохранения результатов игры пользователя и получения списка результатов.

Показ рекламы
API предоставляет возможность показывать в приложениях рекламу:
  • Показ таргетированной рекламы. (Пользователи могут создавать рекламные сообщения, которые показываются на страницах ВКонтакте. Приложение, показывающее рекламу зарабатывает голоса).
  • Показ прямых объявлений приложений. (Разработчики могут рекламировать свои приложения в других приложениях. При этом голоса так же начисляются на баланс приложения).
Работа с переменными
Для хранения данных, API предоставляет каждому приложению 4096 уникальных переменных по 255 байт.
Причем, переменные распределяются по следующим диапазонам:
  • Глобальные переменные: могут использоваться для данных, которые общие для всех экземпляров данного приложения, например, это таблица рекордов игрового приложения.
  • Переменные пользователя: эти переменные уникальны для каждого пользователя данного приложения и могут служить, к примеру, для сохранения игры пользователя.
    Примерно к половине переменных предоставляется доступ другим пользователям. Часть переменных является зарезервированной для разных нужд.
  • Переменные сессии: при работе с переменными, в запросе можно задавать идентификатор сессии (сеанса или комнаты). Таким образом, переменные этого диапазона будут общими для всех пользователей, которые в данный момент просматривают приложение. Соответственно, приложения могут осуществлять многопользовательское общение в реальном времени - чаты, многопользовательские игры и прочее.
  • Переменные, содержащие временные данные, которые уникальны для текущего просматриваемого приложения, и при его закрытии пропадут.
Однако, количество переменных не велико - всего по 1024 переменные на диапазон, и это без учета зарезервированных переменных.

Работа с удаленным сервером разработчика
Приложение ВКонтакте является обычным Flash-приложением и обладает одним большим недостатком. Его нельзя считать защищенным от взлома. Точнее говоря, затраты на взлом flash-приложения не столь велики как, к примеру взлом сервера. Существует достаточное количество программ SWF-декомпиляторов, при помощи которых можно легко получить исходный программный код, выяснить логику приложения и подтасовать запросы к API.
Поэтому, некоторые функции, которые были перечислены выше, работают только с удаленного сервера разработчика, минуя flash-приложение, а именно:
  • Работа с рейтингом пользователя
  • Вывод короткого статуса пользователя в приложении на его главной странице
  • Отправка уведомлений пользователя (только пользователям, которые установили себе данное приложение)
  • Работа с голосами (платежные операции)
  • Установка счетчика на приложение и работа с строкой статуса приложения
  • Отправка и просмотр SMS-уведомлений
Таким образом, чтобы иметь возможность осуществлять эти операции, приложение должно не напрямую обращаться к API, а запрашивать свой специально предусмотренный сервер-прослойку, который в свою очередь будет общаться с API ВКонтакте и выдавать приложению полученные данные.
А вообще, конечно, для крупных проектов, работающих в формате приложений ВКонтакте, безусловно, именно этот специальный сервер и должен являться "мозгом", отрабатывающим всю логику приложения. Flash-приложение в этом случае всего лишь "тонкий клиент", который лишь красиво отображает результат работы сервера.

Локализация приложений
Разработчики приложений имеют возможность переводить свои приложения на более чем 50 языков, используя платформу переводов ВКонтакте. В данный момент платформа на этапе тестирования и применима только для приложений с большим количеством пользователей.

Использование Flash-контейнера приложения
Альтернативный способ внедрения flash-приложения в страницу ВКонтакте - через Flash-контейнер.
Flash-контейнер предоставляет следующие возможности для приложения:
  • Открытие окон установки приложения, настроек, приглашения друзей и ввода голосов для оплаты услуг.
  • Получение событий об успешной установке приложения пользователем, изменении настроек и баланса пользователя внутри приложения.
  • Динамическое изменение размера окна приложения.
Другие возможности
  • Открытие приложения на весь экран.
  • Субдомены vkontakte.ru и короткие имена в url приложения.
Особенности API ВКонтакте
Итак, мы ознакомились со всеми возможностями, которые предоставляет API ВКонтакте. Хочется выделить особенности (скорее недостатки) API, с которыми мне пришлось столкнуться:
  • Взаимодействие с API происходит путем HTTP-запроса к php-скрипту. При этом, частота запросов не должна превышать 3х запросов в секунду. Такой механизм накладывает серьезное ограничение на динамику приложений, особенно многопользовательских.
    Проблема частично решается использованием новой функции API "execute", которая позволяет выполнять последовательность функций за один запрос к API.
  • Объемы сохраняемых данных приложения довольно скромны.
Стоит так же упомянуть о статье "Партнерская модель между ВКонтакте и разработчиками приложений", в которой есть много чего интересного для разработчика приложения:
  • Информация о том как можно заработать и как потратить голоса.
  • О том, что при обнале голосов ВКонтакте забирает половину средств на свои благородные цели.
  • А так же об аренде серверов в дата-центре ВКонтакте (на самом деле у партнеров).

Итог
Flash-приложения ВКонтакте обладают достаточно мощным API, который решает основные задачи, и может полностью обеспечить проекты средней сложности. Все остальные потребности, разработчик может решить, используя свой веб-сервер.

Разработка таких приложений всё более актуализируется, поскольку помимо возможности заработать на монетизации за счет показов рекламы, приложения ВКонтакте сами по себе могут являться мощнейшим инструментом вирусной рекламы.

5 комментариев:

kutu комментирует...

"Работа с пользовательскими данными"
доступ к балансу, только на счету приложения, нужно уточнить

так же не написал про правила для выкладываемых приложений, и про одобрение

Unknown комментирует...

@kutu: Спасибо! Добавил уточнение. Насчет правил и одобрения действительно важно - упустил. Добавлю обязательно.

zEvg комментирует...

Можете ли вы посоветовать хорошие AS3 библиотеки, обвертки над VK API?

Unknown комментирует...

Возможно и есть какие-то обертки для удобства общения с ВК, но в основном хватает того, что предоставлено для разработчиков на самом сайте.

Yanrishatum комментирует...

Ну не знаю как вам, а по мне ВК-шник тот еще фрукт. Делать нормальное приложение на его API просто нереально. Мелкие игры "для быдла" - легко, но серьезный ролевой чат сделать нельзя (вот куда я впихну все эти мегабайты квент и сообщений?). К тому же, он по неизвестным причинам периодически посылает всех игроков куда подальше (я уже устал вталдычивать игроками что приписка "VK API Error" обозначает что ошибка не на сервере чата, а на сервере ВК). К тому же, я не могу сделать достаточную защиту от взлома (например пароль нужно сохранять по каналу сервер-сервер, однако функция putVariable не дается, заявляя что серверный запрос непонятен, поэтому пришлось сохранять сервер-приложение-сервер, что снижает безопасность). В общем, я думаю, что лучше использовать другой сервер, чем мучатся с ВК. Кстати сурсы, которые они предоставляют так и сыпят ворнингами и нечитабельностью.