API Вконтакте

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
rusnire
Сообщения: 167
Зарегистрирован: 2015.05.25, 09:51

API Вконтакте

Сообщение rusnire »

Объясните как в yii работать с API Вконтакте? Какую библиотеку нужно скачать, мне например, нужно получить комментарий у определенного поста. Это есть в api вк. Но как это сделать в yii не пойму.
Будущее за нами | Спасибо разработчикам yii2 и всему русскому комьюнити по нему
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: API Вконтакте

Сообщение ElisDN »

Ищем пакеты: https://packagist.org/search/?q=vk-api
Смотрим первый попавшийся: https://packagist.org/packages/vladkens/vk
Читаем описание на GitHub: https://github.com/vladkens/VK
Устанавливаем:

Код: Выделить всё

composer require vladkens/vk:"dev-master"
И включаем:

Код: Выделить всё

$vk = new \VK\VK('{APP_ID}', '{API_SECRET}'); 
В API находим метод: https://vk.com/dev/wall.getComments
И используем:

Код: Выделить всё

$vk->api('wall.getComments', ['post_id' => ...]);
Но каждый раз создавать экземпляр нам весьма лениво. Для красоты напишем компонент-обёртку:

Код: Выделить всё

class VKApi extends Component
{
    public $appId;
    public $apiSecret;
    public $accessToken = null;

    private $_vk;

    public function init() {
        $this->_vk = new \VK\VK($this->appId, $this->apiSecret, $this->accessToken);
        parent::init();
    }
    
    public function getAuthorizeURL($apiSettings, $callbackUrl) {
        return $this->_vk->getAuthorizeURL($apiSettings, $callbackUrl);
    }
    
    public function getAccessToken($code) {
        return $this->_vk->getAccessToken($code);
    }
    
    public function isAuth() {
        return $this->_vk->isAuth();
    }

    public function api($method, $params = []) {
        return $this->_vk->api($method, $params);
    }
} 
Объявляем его в конфиге:

Код: Выделить всё

'components' => [
    ...
    'vk' => [
        'class' => '\app\components\VKApi',
        'appId' => '...',
        'apiSecret' => '...',
        'accessToken' => null,
    ],
], 
И используем теперь где угодно:

Код: Выделить всё

Yii::$app->vk->api('wall.getComments', ['post_id' => ...]); 
Десять минут стараний и... страшный пункт ТЗ по интеграции выполнен.
Последний раз редактировалось ElisDN 2015.07.08, 22:28, всего редактировалось 1 раз.
rusnire
Сообщения: 167
Зарегистрирован: 2015.05.25, 09:51

Re: API Вконтакте

Сообщение rusnire »

Спасибо. У вас крутые мастер классы, спасибо вам еще раз ;)
Будущее за нами | Спасибо разработчикам yii2 и всему русскому комьюнити по нему
rusnire
Сообщения: 167
Зарегистрирован: 2015.05.25, 09:51

Re: API Вконтакте

Сообщение rusnire »

Выдает ошибку Getting unknown property: app\components\VKApi::ippId

Установил, Создал папку components/VKApi.php , но сомневаюсь что прописал перед классом необходимое, потому что подсвечивается код (getAuthorizeURL, getAccessToken и т.п.)

namespace app\components;
use Yii;
use yii\base\Component;

В web.php прописал все.

В чем может быть проблема?
Будущее за нами | Спасибо разработчикам yii2 и всему русскому комьюнити по нему
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: API Вконтакте

Сообщение asset »

Код: Выделить всё

public $appId;
а не ippId

синтаксическая ошибка, проверь.
rusnire
Сообщения: 167
Зарегистрирован: 2015.05.25, 09:51

Re: API Вконтакте

Сообщение rusnire »

asset писал(а):

Код: Выделить всё

public $appId; 
а не ippId

синтаксическая ошибка, проверь.
Точно! Спасибо.
Будущее за нами | Спасибо разработчикам yii2 и всему русскому комьюнити по нему
rusnire
Сообщения: 167
Зарегистрирован: 2015.05.25, 09:51

Re: API Вконтакте

Сообщение rusnire »

ElisDN писал(а):Ищем пакеты: https://packagist.org/search/?q=vk-api
Смотрим первый попавшийся: https://packagist.org/packages/vladkens/vk
Читаем описание на GitHub: https://github.com/vladkens/VK
Устанавливаем:

Код: Выделить всё

composer require vladkens/vk:"dev-master"
И включаем:

Код: Выделить всё

$vk = new \VK\VK('{APP_ID}', '{API_SECRET}'); 
В API находим метод: https://vk.com/dev/wall.getComments
И используем:

Код: Выделить всё

$vk->api('wall.getComments', ['post_id' => ...]);
Но каждый раз создавать экземпляр нам весьма лениво. Для красоты напишем компонент-обёртку:

Код: Выделить всё

class VKApi extends Component
{
    public $appId;
    public $apiSecret;
    public $accessToken = null;

    private $_vk;

    public function init() {
        $this->_vk = new \VK\VK($this->ippId, $this->apiSecret, $this->accessToken);
        parent::init();
    }
    
    public function getAuthorizeURL($apiSettings, $callbackUrl) {
        return $this->_vk->getAuthorizeURL($apiSettings, $callbackUrl);
    }
    
    public function getAccessToken($code) {
        return $this->_vk->getAccessToken($code);
    }
    
    public function isAuth() {
        return $this->_vk->isAuth();
    }

    public function api($method, $params = []) {
        return $this->_vk->api($method, $params);
    }
} 
Объявляем его в конфиге:

Код: Выделить всё

'components' => [
    ...
    'vk' => [
        'class' => '\app\components\VKApi',
        'appId' => '...',
        'apiSecret' => '...',
        'accessToken' => null,
    ],
], 
И используем теперь где угодно:

Код: Выделить всё

Yii::$app->vk->api('wall.getComments', ['post_id' => ...]); 
Десять минут стараний и... страшный пункт ТЗ по интеграции выполнен.
Подскажите, пожалуйста, а как получить токен? Нужен токен, но в данном примере он равен нулю. В документации пишут из ссылки получить, но я не могу понять как.
Будущее за нами | Спасибо разработчикам yii2 и всему русскому комьюнити по нему
rusnire
Сообщения: 167
Зарегистрирован: 2015.05.25, 09:51

Re: API Вконтакте

Сообщение rusnire »

ElisDN писал(а):...
Подскажите, вы создали обертку VK API, но если я передаю не пустой токен, а токен, который получил, то все время выводит ошибку. Подскажите, в чем дело, пожалуйста. Не могу сдвинуться с места.

Код: Выделить всё

VK\VKException
Invalid access token.

    1. in /var/www/admin/www/my.com/vendor/vladkens/vk/src/VK/VK.php at line 99


         * Set Access Token.
         * @param   string  $access_token
         * @throws  VKException
         * @return  void
         */
        public function setAccessToken($access_token)
        {
            $this->auth = $this->checkAccessToken();
            if (!$this->auth) {
                throw new VKException('Invalid access token.');
            } else {
                $this->access_token = $access_token;
            }
        } 
Будущее за нами | Спасибо разработчикам yii2 и всему русскому комьюнити по нему
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: API Вконтакте

Сообщение ElisDN »

Поковыряйтесь в методе checkAccessToken(). Проверьте, что там возвращается в $this->api('getUserSettings').
Аватара пользователя
krosh87
Сообщения: 160
Зарегистрирован: 2015.02.18, 15:32
Контактная информация:

Re: API Вконтакте

Сообщение krosh87 »

Пытаюсь тоже парсить вк

Код: Выделить всё

   public function actionVkgroups()
    {

      
      require('../vendor/vladkens/vk/src/VK/VK.php');
      
      $vk = new VK('4784354', 'Jx5cUkk6jnTnJly5KxmO'); 
      $vk->api('wall.getComments', ['post_id' => 1]);
        
    
      return $this->render('vkgroups', ['vk' => $vk] );  
    }
пишет ошибку

Код: Выделить всё

Class 'app\controllers\VK\VK' not found
Разработка, продвижение, сопровождение сайтов на Modx, Bitrix, Yii http://www.webapplex.ru
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: API Вконтакте

Сообщение zelenin »

krosh87 писал(а):Пытаюсь тоже парсить вк

Код: Выделить всё

   public function actionVkgroups()
    {

      
      require('../vendor/vladkens/vk/src/VK/VK.php');
      
      $vk = new VK('4784354', 'Jx5cUkk6jnTnJly5KxmO'); 
      $vk->api('wall.getComments', ['post_id' => 1]);
        
    
      return $this->render('vkgroups', ['vk' => $vk] );  
    }
 
пишет ошибку

Код: Выделить всё

Class 'app\controllers\VK\VK' not found
http://php.net/manual/en/language.namespaces.php
Аватара пользователя
krosh87
Сообщения: 160
Зарегистрирован: 2015.02.18, 15:32
Контактная информация:

Re: API Вконтакте

Сообщение krosh87 »

объясните поподробнее плиз

в контроллере уже стоит

Код: Выделить всё

namespace app\controllers;

    public function actionVkgroups()
    {
    
    error_reporting(E_ALL);
    require_once('../vendor/vladkens/vk/src/VK/VK.php');
    require_once('../vendor/vladkens/vk/src/VK/VKException.php');

    try {
            $vk = new \VK\VK('111111', '*********************'); // Use your app_id and api_secret
            
            $users = $vk->api('users.get', 
            [   'user_ids'   => '1',
                'fields' => 'first_name,last_name,sex']);
                
          /*  foreach ($users['response'] as $user) {
                echo $user['first_name'] . ' ' . $user['last_name'] . ' (' .
                    ($user['sex'] == 1 ? 'Girl' : 'Man') . ')<br />';
            } */
            
           echo '111';
           print_r($users); 
    
        } 
    catch (VK\VKException $error) {
        echo $error->getMessage();
    }   
пытаюсь получить информацию со старицы и ошибок не выдает и пустой массив возвращает
Разработка, продвижение, сопровождение сайтов на Modx, Bitrix, Yii http://www.webapplex.ru
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: API Вконтакте

Сообщение zelenin »

require_once('../vendor/vladkens/vk/src/VK/VK.php');
require_once('../vendor/vladkens/vk/src/VK/VKException.php');

от этого вас избавляет композер, который генерит автозагрузчики для всех устанволенных через него либ.
Аватара пользователя
krosh87
Сообщения: 160
Зарегистрирован: 2015.02.18, 15:32
Контактная информация:

Re: API Вконтакте

Сообщение krosh87 »

Код: Выделить всё

public function actionVkgroups()
    {
   
      header("Content-Type: text/html; charset=utf-8");
      error_reporting(E_ALL);

       try {
            $vk = new \VK\VK('111111', '********************'); // Use your app_id and api_secret
            
            $users = $vk->api('users.get', 
            [   'user_ids'   => '222222',
                'fields' => 'first_name,last_name,sex']);
                
            foreach ($users['response'] as $user) {
                echo $user['first_name'] . ' ' . $user['last_name'] . ' (' .
                    ($user['sex'] == 1 ? 'Женщина' : 'Мужчина') . ')<br />';
            } 
            

    
        } 
    catch (VK\VKException $error) {
        echo $error->getMessage();
    }
На локальной машине код работает все ок, переношу на хостинг говорит что массив пустой! Может что на хостинге отключено?
Разработка, продвижение, сопровождение сайтов на Modx, Bitrix, Yii http://www.webapplex.ru
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: API Вконтакте

Сообщение vitalik1183 »

то про неймспейсы, то про пустые массивы...
Yii2!
Аватара пользователя
krosh87
Сообщения: 160
Зарегистрирован: 2015.02.18, 15:32
Контактная информация:

Re: API Вконтакте

Сообщение krosh87 »

что не кто не в курсе, почему на локальном компьютере данные парсятся, а на хостинге пустой массив
Разработка, продвижение, сопровождение сайтов на Modx, Bitrix, Yii http://www.webapplex.ru
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: API Вконтакте

Сообщение zelenin »

krosh87 писал(а):что не кто не в курсе, почему на локальном компьютере данные парсятся, а на хостинге пустой массив
Марс не в созвездии Водолея
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: API Вконтакте

Сообщение lynicidn »

ретурн урл же когда апп регистрируешь (fp)
Аватара пользователя
krosh87
Сообщения: 160
Зарегистрирован: 2015.02.18, 15:32
Контактная информация:

Re: API Вконтакте

Сообщение krosh87 »

FireBag пишет "NetworkError: 500 Internal Server Error
Разработка, продвижение, сопровождение сайтов на Modx, Bitrix, Yii http://www.webapplex.ru
Аватара пользователя
jumper423
Сообщения: 61
Зарегистрирован: 2015.05.23, 02:30
Откуда: Тирасполь
Контактная информация:

Re: API Вконтакте

Сообщение jumper423 »

krosh87 писал(а):что не кто не в курсе, почему на локальном компьютере данные парсятся, а на хостинге пустой массив
Настрой http://joxi.ru/12MpqP5syyDKmJ
Хотите купить дешёвый, быстрый и качественный VPS сервер, моим выбором стал Rootwelt. Всем советую, не прогадаете ;)
Ответить