Всем привет!
Захотелось мне тут поработать с API Вконтакте чтобы можно было полноценно управлять своим аккаунтом и группами/пабликами прямо из скриптов. И причем все на PHP. К слову сказать для Ruby есть подходящий Gem, а для PHP куча статей половина из которых уже содержит неактуальные сведения. И что же делать?
Как говорится тот кто ищет тот всегда найдет. На просторах GitHub нашелся подходящий проект - vkPhpSdk который довольно сильно упрощает работу с этой соцсетью
Для начала отмечу что тут есть два варианта для работы:
- Без создания VK-приложения и авторизации
- С созданием приложения и последующей пользовательской авторизации для работы.
Вкратце объсню в чем различия. В первом случае можно просто делать запросы к 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 даже не вызывать. В итоге приложение будет работать с правами одного авторизованного пользователя до тех пор пока он не сменит пароль. Это пригодится если вы напишете бота и один раз его авторизовав будете рулить им из скрипта.
Ну вот как то так. Как видите все на самом деле очень просто. Удачи! =)
- Вперед
- Назад