5 November 2011

Алгоритм обращения программы к API VKontakte

Social networks and communities
Sandbox
Часто бывает мы хотим автоматизировать то или иное действие. Порой спешка или просто лень не дает нам возможности ознакомиться со всей документацией(по API VK).
Разработать программу для работы с API ВКонтакте проще чем кажется. Подойдет любой язык, умеющий отправлять http get запросы (соответственно получать ответ). Например: Delphi, shell, C, Perl, PHP, Python и т. п.
image

Итак, разберем алгоритм создания программы и интеграции её с ВКонтакте.
Первое что нам нужно сделать, это создать(зарегистрировать) Desktop-приложение.
Нажимаем на кнопку «Подключить сайт» в разделе «Разработчикам»
Вводим название и выбираем тип — Standalone-приложение.
image

После чего, на ваш мобильный телефон (привязанный к аккуанту) придет код, который необходимо ввести в проверочное поле.
Создается приложение, в настройках нам потребуется ID приложения.image

Авторизация приложения с ВКонтакте происходит на базе протокола OAuth 2.0 и состоит из 3х шагов:
  • Открытие окна браузера для аутентификации пользователя на сайте Вконтакте.
  • Пользователь разрешает доступ приложению к запрашиваемым правам.
  • Вконтакте возвращает приложению access_token для доступа к API.


_http://api.vk.com/oauth/authorize?client_id=##ID##&redirect_uri=http://api.vk.com/blank.html&scope=##ПРАВА##&display=##ОТОБРАЖЕНИЕ## &response_type=token
, где:
##ID##- Id вашего приложения, полученного ранее;
##ОТОБРАЖЕНИЕ## — внешний вид окна авторизации(page, popup, touch и wap).
##ПРАВА##- список прав доступа приложения к данным пользователя. Указываются через запятую(notify,friends,photos,audio,video,docs,notes,pages,wall,groups,messages,ads) либо в цифровом виде, суммируя необходимые права (1,2,4,8,16,32,64,...,262144).
Пример: Получить права на Доступ к друзьям и Доступ к фотографиям пользователя:
 2 + 4 = 6; scope=1026 либо scope=friends,photos
Подробнее о правах доступа можно почитать здесь и здесь.
image

В ответ на запрос, сервер вернет:

access_token=93f22a20ddf1174f939108d43e936cd6bb193469344639c2d1c268f3f65fa86 &expires_in=86400&user_id=11347652
, где access_token — необходимый нам параметр, для отправки последующий запросов к API Вконтакте;
expires_in — время жизни token, после истечения необходимо обновить
( UPD: если в правах указать «offline» или 999999, то токен будет бесконечным);
user_id — id пользователя.
Связь программа-приложение-пользователь установлена. Теперь мы можем отправлять любые запросы к Api(в мерах разрешенных пользователем).
Синтаксис запросов:

_https://api.vkontakte.ru/method/##МЕТОД##?##НАЗВАНИЕ_ПЕРЕМЕННОЙ##=##ЗНАЧЕНИЕ_ПЕРЕМЕННОЙ## &access_token=##ТОКЕН,ПОЛУЧЕНЫЙ_РАНЕЕ##
Список методов и их описание можно посмотреть здесь и здесь.

Для примера рассмотрим метод отправления личного сообщения

Название метода: messages.send
Необходимое право: 4096
Параметры: uid — id пользователя, которому отправляется сообщение, является обязательным.
message — текст сообщения, является обязательным, если не указан attachment.
attachment — приложения к сообщению, указанные через запятую в формате
<тип><владалец>_<idмедиа> (Пример:photo100172_166443618).
title — Заголовок.
type — 0 (по умолчанию)- обычное, 1 — из чата.

Пример запроса отправки сообщения пользователю id66392446:
_https://api.vkontakte.ru/method/messages.send?uid=66392446&message=ХабраХабр&title=Заголовок&access_token= 93f22a20ddf1174f939108d43e936cd6bb193469344639c2d1c268f3f65fa86
В ответ получим ID сообщения или код ошибки. 
{"response":10847}

В качестве примера программы привожу свой php-сценарий автоматического обновления статуса Вконтакте

(До нового года осталось… дней + Случайная фраза из файла).
Создаем php файл, который будет отправлять статус:
pub.php
<?php
$token='93f22a20ddf1174f939108d43e936cd6bb193469344639c2d1c268f3f65fa86';
//запишем токен, полученный ранее
$day = '15';
$month = '11';
//Дата, до которой будем отсчитывать время
$year = '2011';
function dateDiff($startDay, $endDay) {
$endDay = strtotime($endDay);
$startDay= strtotime($startDay);

$difference = abs($endDay - $startDay);
$return['days'] = floor($difference / 86400);
$return['hours'] = floor($difference / 3600) % 24;
$return['minutes'] = floor($difference / 60) % 60;

return $return;
}

$date=dateDiff(date("j-n-Y G:i"),'19-11-2011 9:00');

$phrases = "/var/www/public/1.txt";//файл содержащий фразы
$z = file ($phrases);
$cz = count ($z) -1;
$r = rand (0, $cz);
//случайная фраза из файла

$text="Осталось $date[days] дней, $date[hours] часов.$z[$r]";

$sRequest = "https://api.vkontakte.ru/method/status.set?text=$text&access_token=$token";
echo $text;
// ответ от Вконтакте
$oResponce = json_decode(file_get_contents($sRequest));


Теперь добавляем pub.php в cron с обновлением, не чаще чем раз в минуту, и наблюдаем результат.image

image

Таким способом можно автоматически публиковать статьи, фотографии, видео, отправлять сообщения и много других интересных вещей.
Экспериментируйте! Благодарю за внимание.

UPD: перед отправкой текстовую строку необходимо кодировать $text=urlencode($text);
Tags:vkontakte apiphpобновлениестатусотправка сообщенийавтоматизациясоциальные сети
Hubs: Social networks and communities
+9
58.3k 264
Comments 18
Popular right now