#vk | #php

September 26, 2013

Работаем с VK API из PHP

Всем привет!

Захотелось мне тут поработать с API Вконтакте чтобы можно было полноценно управлять своим аккаунтом и группами/пабликами прямо из скриптов. И причем все на PHP. К слову сказать для Ruby есть подходящий Gem, а для PHP куча статей половина из которых уже содержит неактуальные сведения. И что же делать?

Как говорится тот кто ищет тот всегда найдет. На просторах GitHub нашелся подходящий проект - vkPhpSdk который довольно сильно упрощает работу с этой соцсетью

Для начала отмечу что тут есть два варианта для работы:

  1. Без создания VK-приложения и авторизации
  2. С созданием приложения и последующей пользовательской авторизации для работы.

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

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

Но тут также необходимо создать Standalone-приложение

(Приложение для Web-сайта не выбирайте, из него нет возожности делать set-запросы) и получить для него определенные права у пользователя.

Итак. Давайте посмотрим на примере из vkPhpSdk:

1) Вариант без авторизации

<?php
require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'VkPhpSdk.php';
require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'Oauth2Proxy.php';

// Init vk.com SDK
$vkPhpSdk = new VkPhpSdk();
// API call - get profile
$result = $vkPhpSdk->api('getProfiles', array(
    'uids' => $vkPhpSdk->getUserId(),
    'fields' => 'uid, first_name, last_name, nickname, screen_name, photo_big',
));
echo 'My profile:<br/>';
echo '<pre>';
print_r($result);
echo '</pre>';
?>

Тут мы просто получаем данные о пользователе. Поля прописаны в запросе.

2) Вариант с авторизацией

<?php
require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'VkPhpSdk.php';
require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'Oauth2Proxy.php';

// Init OAuth 2.0 proxy
$oauth2Proxy = new Oauth2Proxy(
    '385325', // client id
    'lIqzGVgr565geEOqRiCU', // client secret

    'https://oauth.vk.com/access_token', // access token url
    'https://oauth.vk.com/authorize', // dialog uri
    'code', // response type
    'http://site.com/vk/example/', // redirect url
    'offline,notify,friends,photos,audio,video,wall,docs' // scope
);

// Try to authorize client
if($oauth2Proxy->authorize() === true) {
    // Init vk.com SDK
    $vkPhpSdk = new VkPhpSdk();
    $vkPhpSdk->setAccessToken($oauth2Proxy->getAccessToken());
    $vkPhpSdk->setUserId($oauth2Proxy->getUserId());

    // API call - wall post
    $result = $vkPhpSdk->api('wall.post', array(
        'owner_id' => $vkPhpSdk-\>getUserId(),
        'message' => 'Wellcome to vkPhpSdk!',
    ));
    echo 'Wall post response: <br/>';
    echo '<pre>';
    print_r($result);
    echo '</pre>';
} else {
  echo 'Error occurred';
}
?>

А вот уже тут мы постим пользователю сообщение на стенку. После того как он зайдет на страницу с этим кодом то появится запрос прав от приложения. Если пользователь соглашается то на стене у него постится запись.

  • client_id и client_secret можно получить при создании приложения
  • в параметре scope передаются функции разрешение выполнения которых требует приложение

В данном примере я записал все функции, включая offline. Особенность этой функции такая что получив один раз access_token можно просто запихнуть его в $vkPhpSdk->setAccessToken и Oauth2Proxy даже не вызывать. В итоге приложение будет работать с правами одного авторизованного пользователя до тех пор пока он не сменит пароль. Это пригодится если вы напишете бота и один раз его авторизовав будете рулить им из скрипта.

Ну вот как то так. Как видите все на самом деле очень просто. Удачи! =)