Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%

<<< History API, пример одностраничного приложения || Полнотекстовый поиск MySQL >>>

Как работать с vk API вконтакте

08.03.2013
Как работать с vk API вконтакте

Здравствуйте, уважаемые читатели блога LifeExample, у многих из нас есть собственная страница в социальной сети вконтакте, все мы знаем, что каждый пользователь вконтке имеет возможность оставлять комментарии на стене других пользователей и различных сообществ. Сегодня я хочу показать вам как можно работать с данными этого сервиса, через предоставляемый вконтактом инструмент vk api , а именно как с помощью PHP получить все сообщения любого пользователя и его друзей.

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

Создание приложения для получения доступа к vk API

Нас будет интересовать обращение по HTTP протоколу к адресу http://api.vk.com/api.php . На него мы будем высылать команды с определенными параметрами, а в ответ получать какие либо данные, предоставляемые сервисом вконтакте.

Самым первым делом необходимо создать новое приложения в VK.com, поскольку для работы с vk API надо иметь на это специальную подпись. Кроме того надо проштудировать всю информацию представленную в документации сервиса

Внимание! Если нам нужно только обращаться со своего сайта к API, и при этом мы совершенно не думаем о каких либо приложениях для мобильных телефонов, или декстопных приложениях,то все равно придется зарегистрировать его во вконтакте.

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

создание приложения API в вконтакте.jpg

После заполнения сохраняем введенные значения и получаем интересующие нас данные: id приложения и секретный ключ. Используя их мы в дальнейшем сможем работать с vk API.

После регистрации своего приложения мы сможем управлять настройками приложения созданного приложения

После этого нам потребуется класс для работы с vk API для этого скачиваем php библиотеку прямо с vk.com.

скачать vkapi.class.php ( Скачали: 2522 чел. ) 

Права приложения

Для доступа к данным пользователя, приложение должно обладать набором соответствующих прав.

Предварительно, перед началом использования vkapi.class.php, надо разобраться, с тем как нашему созданному приложению, получать права для работы с тем или иным пользователем.

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

Для всех приложений, api вконтакте предоставляет таблицу битовых масок, другими словами набор прав для приложения.

Советую вам самостоятельно ознакомиться с перечнем прав и их битовых масок.

Если Вы хотите получить права на "доступ к друзьям" и "доступ к обычным и расширенным методам работы со стеной", то ваша битовая маска будет равна: 2 + 8192 = 81924.

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

1
echo 81926 & 81924;

Если права подтверждены, то 81926 & 81924 даст результат = 8192, иначе = 0

Чтобы web-приложение запросило разрешение на те или иные права, нужно дать пользователю ссылку специального формата:

1
2
3
4
5
https://oauth.vk.com/authorize?
 client_id=APP_ID&
scope=SETTINGS&
redirect_uri=REDIRECT_URI&
response_type=code
  • APP_ID – идентификатор вашего приложения;
  • SETTINGS – запрашиваемые права доступа приложения;
  • REDIRECT_URI – адрес, на который будет передан code. Этот адрес должен находиться в пределах домена, указанного в настройках приложения.

Перейдя по такой ссылке, пользователю, будет предложено авторизоваться на vk.com и подтвердить разрешение на запрашиваемые нашим приложением права.

В моем случае ссылка будет выглядеть таким образом:

1
2
3
4
5
<a href="https://oauth.vk.com/authorize?
client_id=3471327&
scope= notify,friends,photos,audio,video,docs,notes,pages,status,offers,questions,wall,groups,messages,notifications,stats,ads,offline,nohttps, &
redirect_uri=http://moguta.ru/&
response_type=code ">
Разрешить приложению Moguta работать с моими данными из VK</a>

Параметром scope, я запрашиваю у пользователя разрешение на использование всех имеющихся данных, перечислив все известные идентификаторы прав.

разрешение прав для приложения вконтакте

После подтверждения, vk api высылает назад на указанный redirect_uri код, по которому мы сможем в течении часа получать access_token чтобы работать с API вконтакте.

Закончив процесс получения разрешения, от пользователя на доступ к его информации, мы можем начинать работу с API вконтакте, а именно с классом vkapi.class.php

PHP Пример работы с API vkontakte

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?
$api_id = 4471324;
$secret_key = 'Y1fXgdIl3aPiejBHO4g';

function verRoles($maskBit){
    $assocBitandRole= array(
        '1'=>'notify',
        '2'=>'friends',
        '4'=>'photos',
        '8'=>'audio',
        '16'=>'video',
        '32'=>'docs',
        '64'=>'notes',
        '128'=>'pages',
        '256'=>'status',
        '512'=>'offers',
        '1024'=>'questions',
        '2048'=>'wall',
        '4096'=>'groups',
        '8192'=>'messages',
        '32768'=>'notifications',
        '131072'=>'stats',
        '262144'=>'ads',
        '524288'=>'offline',
        '1048576'=>'nohttps',
    );
    $res = '<br/>Доступно:';
    $nores = '<br/>Не доступно:';
    foreach($assocBitandRole as $bit=>$role){
        if((int)($maskBit) & (int)$bit){
            $res .= ",".$role;
        } else {
            $nores .= ",".$role;
        }
    }
    return $res.'</br>'.$nores;
}
if(!empty($_GET['code'])){
    header('Location: https://oauth.vk.com/access_token?
    client_id='
.$api_id.'&
    client_secret='
.$secret_key.'&
    code='
.$_GET['code'].'&
    redirect_uri=http://moguta.ru/vk& '
);
} else {
    echo '<a target="_blank" href="https://oauth.vk.com/authorize?
     client_id='
.$api_id.'&
     scope=notify,friends,photos,audio,video,docs,notes,pages,status,offers,questions,groups,notifications,stats,ads,offline,nohttps,&
     redirect_uri=http://moguta.ru/vk&
     response_type=code ">Разрешить приложению Moguta работать с моими данными из VK</a>'
;
}
require 'vkapi.class.php';
$VK = new vkapi($api_id, $secret_key);


//получить битовую маску приложения для конкретного пользователя
$resp = $VK->api('getUserSettings', array('uid'=>'150317299'));
echo verRoles($resp['response']);

Результат работы скрипта должен вывести информацию о правах приложения по отношению к пользователю с id=’150317299′. Получить битовую маску прав приложения можно командой getUserSettings.

Битовая маска приложения проверка прав

Как видите скрипт вывел перечень доступных прав исходя из значения битовой маски. По умолчанию для каждого нового пользователя битовая маска будет равна 0, пока посетитель сайта не перейдет по указанной ссылке "Разрешить приложению Moguta работать с моими данными из VK".

Подтвердив разрешение, пользователь даст нам возможность работать с его данными и мы сможем, выполнить несколько полезных в разных задачах методов, например.

Получить список друзей пользователя:

1
2
//получить друзей
$resp = $VK->api('friends.get', array('uid'=>'150317299'));

Получить список последних сообщений на стене пользователя

1
$resp = $VK->api('wall.get', array('owner_id'=>'150317299'));

Получение лайков с указанной страницы.

1
2
3
4
5
// owner_id — это id сайта, к которому прикручен лайк
//vkontakte.ru/developers.php?oid=-1&p=Like     - в коде видны цифирки, это owner_id
$resp = $VK->api('likes.getList', array(
'type'=>'sitepage', 'owner_id'=>'2633539', 'page_url' => 'http://lifeexample.ru/php-primeryi-skriptov/mvc-fundament-internet-magazina.html'
));

Весь перечень доступных для vk Api методов перечислен в этом разделе документации

И в конце статьи хочу указать на одну огромную неприятность, о которой сказано в описании права wall отвечающего за работу со стеной.

Внимание, данное право доступа недоступно для сайтов (игнорируется при попытке авторизации).

Нельзя отправлять сообщения на стену

Это значит, что автоматический репост сообщений на стену из веб-приложений запрещен и можно даже не пытаться делать авторепост новостей в группу средствами API вконтаке. Данный факт несколько огорчил меня, поскольку все, что мне было надо от vk api это отправлять новость с сайта moguta.ru в группу автоматически.

Тем не менее, нет ничего невозможного, если контакт не разрешает делать это своими инструментами, пойдем в обход.

Автопостинг на стену вконтакте без vk api

В сети я нашел полезный в данной задаче класс vk_poster.class.php:

Данный класс позволяет репостить на стену контакта, с помощью php библиотеки CURL. Получив необходимые для авторизации данные этот класс эмитирует действия пользователя, как будто тот авторизуется в vk.com переходит на указанную стену, и отправляет сообщение от своего имени.

Т.е. весь репост сводится к использованию CURL без API vk. Из минусов данного подхода, только не высокая скорость работы приложения, поскольку нужно в несколько этапов отправлять последовательность HTTP запросов, чтобы осуществить публикацию информации на стене сообщества, либо конкретного пользователя.

Скачать пример автопостинга в вконтакте без использования API. ( Скачали: 2460 чел. ) 

Кроме этого способа можно воспользоваться замечательной программой imacros, которая может повторить любое действие человека, но выбирать ее или нет , это зависит от конкретной задачи.

Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.

Нравится

Комментарии

  • Аlex

    И к личным сообщениям тоже можно получить доступ?

    • Насколько я понял, к личным сообщения веб-приложению доступ получить нельзя. Декстопному похоже можно, при наличии на это разрешения.

  • Алексей

    Здравствуйте Марк. Подскажите, а пройти у вас обучение по VKAPI можно и сколько стоит?

    • Здравствуйте, Алексей. Я не настолько хорошо сам разбираюсь в VKAPI, была задача, я ее решил и все что познал изложил в данной статье.

  • Алексей

    Уже неделю читаю ваш блог, хорошие статьи!

  • Алексей

    Здравствуйте Марк. У меня к вас вопрос, классы которые располагаются на гитхабе работают отлично, но можно как-то сделать возможность добавления изображений? Т.е вместо текста просто будут добавляться изображения, допустим из папки на сервере и публиковаться на стене? Я просто не совсем понимаю как в вк, загрузиться изображение

    • Игорь

      Здравствуйте. Столкнулся с той же проблемой. Вы разобрались?

  • Максим

    Добрый день!

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

  • Saiidr

    Здравствуйте. Я вот почитал,вроде всё делаю правильно,но что не получается,вроде прописал,как у вас Jq,запрос делает,но только на общею информацию,ну ладно куда не шло.. Но потом не чего не происходит,тупо выводит текст :

  • Евгений

    Не происходит редиректа в Вашем варианте на указанную страницу.

  • кирилл

    Добрый вечер, подскажите какой плагин вы используете? мне необходимо, чтобы как у вас показывались те, кто лайкнули страницу, нужна возможность видеть пользователей. Подскажите что можно использовать

  • Александр

    Классный блог, спасибо автору!!!

  • Ник

    Я чет не совсем понял. Т.Е. для того чтобы запросить список друзей у пользователя необходимо получить права, а права получишь только тогда, если этот пользователь зайдет в твое приложение и согласится с правами. так?

  • Миша

    Скажите, можно ли настроить, чтобы группа могла рассылать сообщения подписчикам? Весь день ответ ищу )

  • Оставить комментарий

    Не отвечать

    Подписаться на комментарии к этой статье по RSS

    Яндекс.Метрика