Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Класс для обращения к API ВКонтакте
Форумы портала PHP.SU » PHP » Пользовательские функции » Класс для обращения к API ВКонтакте

Страниц (1): [1]
 

1. nikob - 23 Мая, 2011 - 11:15:56 - перейти к сообщению
До этого сделал функцию для обращения к API ВКонтакте, но практически сразу, ВКонтакте внедрили протокол OAuth, следовательно изменился механизм операция с API (хотя старый способ работает).

PHP:
скопировать код в буфер обмена
  1. class vkapi {
  2.  
  3.         function __construct() {
  4.                 if (!function_exists('json_decode')) {
  5.                         $this->error(1);
  6.                 }
  7.         }
  8.  
  9.         private $app_id;
  10.         private $secret;
  11.         private $token;
  12.  
  13.         private $errors = array(
  14.                 1 => "No JSON support! To use this class install JSON addon.",
  15.                 2 => "Incorrect APP ID format! It must be numeric and contain at least 1 character.",
  16.                 3 => "Incorrect SECRET format! It must contain at least 1 character.",
  17.                 4 => "Incorrect APP ID or SECRET!",
  18.                 5 => "Incorrect METHOD name, during query!",
  19.                 6 => "Incorrect PARAMS array, during query!",
  20.                 7 => "Authorize first!"
  21.         );
  22.        
  23.         function auth($app_id, $secret) {
  24.  
  25.                 if (intval($app_id)>0 && strlen($secret)>0) {
  26.                         $this->app_id = $app_id;
  27.                         $this->secret = $secret;
  28.                         $url = 'https://api.vkontakte.ru/oauth/access_token/?client_id='.$this->app_id.'&client_secret='.$this->secret.'&grant_type=client_credentials';
  29.                         $ch = curl_init($url);
  30.                         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  31.                         $answer = curl_exec($ch);
  32.                         curl_close($ch);
  33.                         $answer = json_decode($answer, true);
  34.                         $this->token = $answer['access_token'];
  35.                         if (strlen($this->token<1)) {
  36.                                 $this->error(4);
  37.                         }
  38.                 } else {
  39.                         if (intval($app_id)<1) {
  40.                                 $this->error(2);
  41.                         }
  42.                         if (strlen($secret)<1) {
  43.                                 $this->error(3);
  44.                         }
  45.                 }
  46.  
  47.         }
  48.        
  49.         function query($method, $params) {
  50.                 if (strlen($this->token<1)) {
  51.                         $this->error(7);
  52.                 }
  53.                 $url = 'https://api.vkontakte.ru/method/';
  54.                 if (strlen($method)>0 && count($params)>0) {
  55.                         $url .= $method.'?';
  56.                         while (list($key, $var) = each($params)) {
  57.                                 $url .= "$key=$var&";
  58.                         }
  59.                         $url .= 'access_token='.$this->token;
  60.                         $ch = curl_init($url);
  61.                         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  62.                         $answer = curl_exec($ch);
  63.                         curl_close($ch);
  64.                         $answer = json_decode($answer, true);
  65.                         return $answer;
  66.                 } else {
  67.                         if (strlen($method)<1) {
  68.                                 $this->error(5);
  69.                         }
  70.                         if (count($params)<1) {
  71.                                 $this->error(6);
  72.                         }
  73.                 }
  74.         }
  75.        
  76.         function rand() {
  77.         return rand(10000,99999);
  78.         }
  79.        
  80.         private function error($error_num) {
  81.                 die("<b>VK API Class error #$error_num:</b> ".$this->errors[$error_num]);
  82.         }
  83.        
  84. }


ВНИМАНИЕ: данный класс работает только с методами secure (secure.sendNotification например). Полный список secure методов смотрите на сайте ВКонтакте.

Пример использования класса:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. require_once 'vkclass.php';
  4.  
  5. $appid = 1234567;
  6. $secret = 'app_secretkey';
  7.  
  8. $vk = new vkapi;
  9. $vk->auth($appid, $secret);
  10.  
  11. $method = 'secure.setCounter';
  12. $params = array(
  13. 'timestamp' => time(),
  14. 'random'    => $vk->rand(),
  15. 'uid'       => 1,
  16. 'counter'   => 123
  17. );
  18.  
  19. $res=$vk->query($method, $params);
  20. print_r($res);
  21.  
  22. ?>


Удачного использования Подмигивание

С удовольствием выслушаю ваши пожелания и замечания! (класс в последствии будет усовершенствоваться)
2. tiHo - 23 Мая, 2011 - 17:29:01 - перейти к сообщению
Спасибо за класс.
3. spacer - 05 Июня, 2011 - 16:44:17 - перейти к сообщению
nikob, подскажи как получить список видеозаписей пользователя, все перепробовал, выдает ошибки ошибки ошибки ...
(Добавление)
странно, этот класс тоже не смог запустить, говорит: Incorrect APP ID or SECRET!

хотя приложение создано, уже сил никаких нет, б... , ну как он работает ешкин кот ?
4. ALEN - 05 Июня, 2011 - 19:08:39 - перейти к сообщению
spacer
впиши сюда свой APP ID or SECRET
$secret = 'app_secretkey';
5. spacer - 05 Июня, 2011 - 19:54:10 - перейти к сообщению
это естественно, у меня подозрение, что в приложении в настройках vk, что то нужно съделать, уже включил там все, может после создания приложения нужно ждать, что через какое-то время vk дает добро?

ALEN пишет:
spacer
впиши сюда свой APP ID or SECRET
$secret = 'app_secretkey';

(Добавление)
пожалуйста, кто-нибудь может показать рабочий класс friends.get, что за битовая маска как ее получить и куда ее вписать ?
6. ex_mac - 11 Июля, 2011 - 22:34:04 - перейти к сообщению
Думаю что проблема с авторизацией
в этой вот строчке

if (strlen($this->token<1)) {

так с виду и непонятно где собака Улыбка

 

Powered by ExBB FM 1.0 RC1