dklight
@dklight
php кодер - level 2.5

Как заставить заработать Google_Service_YouTube в yii2?

Добрый день.
Устанавливаю последнюю версию yii2, расширения для гугла исользуя:
composer require google/apiclient:^2.0 (https://github.com/google/google-api-php-client#do...
при этом он ругается на guzzle http. Удаляю версию 1.4.2, после этого в composer.json
//
"guzzlehttp/psr7": "1.2.3",
        "google/apiclient": "2.0",
        "guzzlehttp/guzzle": "6.0"
//


далее пробую простейший код
$ids = [];
        $ids[] = 'IxjydzXg6cs';
        $api_key = Yii::$app->params['youtube_api_key_1'];

        $client = new Google_Client();
        $client->setDeveloperKey($api_key);

        $youtube = new Google_Service_YouTube($client);

        $rs = $youtube->videos->listVideos('snippet, statistics, contentDetails', [
            'id' => $ids,
        ]);

как тут https://developers.google.com/youtube/v3/code_samp...

в итоге получаю ошибку count(): Parameter must be an array or an object that implements Countable. Причем стек ошибок тянется довольно долго

Сталкивались ли с подобным?

Изначально пробовал код:

$video_id = '0KSOMA3QBU0';
$api_key = 'AIzaSyB7oqNYxEGnskHEpKHSCbIH_-VI4_sJkzg';

$json_result = file_get_contents ("https://www.googleapis.com/youtube/v3/videos?part=snippet&id=$video_id&key=$api_key");
var_dump(json_decode($json_result));

Но и он тоже не заработал выдав:
file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed


win7, apache 2.4, php 7.2, yii2.0.14
  • Вопрос задан
  • 621 просмотр
Решения вопроса 1
dklight
@dklight Автор вопроса
php кодер - level 2.5
Получил решение.

Если использовать тот же код, но без yii2, то удается узнать что проблема связана с ssl и curl. Почему встроенный отладчик сходу его не выдает не понятно.

выполняем следующее:
1. скачать отсюда https://curl.haxx.se/docs/caextract.html файл cacert.pem
2. прописать его в php.ini --> curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
3. перезагрузить сервер

Далее получается та же ошибка (которую выдавал yii2), а именно:

Warning: count(): Parameter must be an array or an object that implements Countable in ...\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php on line 73

Находим эту строку:
if (count($this->handles) >= $this->maxHandles)
и затыкаем его, используя @

Решение временное, но нужную информацию удается получить после:

$api_key = 'super_cool_api_key';

$client = new Google_Client();
$client->setDeveloperKey($api_key);

$youtube = new Google_Service_YouTube($client);

$rs2 = $youtube->search->listSearch('id,snippet', array(
   'q' => 'toster forum',
   'maxResults' => 7,
));

echo Debug::d($rs2,'resulting...',2);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы