Поздравляю! Вы попали в архивный блог! Все новые материалы публикуются на hmdw.meX
Просмотров: 20916

Работаем с 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 даже не вызывать. В итоге приложение будет работать с правами одного авторизованного пользователя до тех пор пока он не сменит пароль. Это пригодится если вы напишете бота и один раз его авторизовав будете рулить им из скрипта.

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

twitter.com facebook.com vkontakte.ru odnoklassniki.ru livejournal.ru yandex.ru
Теги: ,
Эта запись опубликована: Четверг, 26 сентября 2013 в рубрике Web-разработка.

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