3

I want to get the subscriber count from my youtube channel with the new API v3.

  1. I created a Google API app for youtube here: Google API Console
  2. I have both the APP key and the youtube channel ID
  3. I use "json_decode" to get the object

<?php
    $url_yt = "https://www.googleapis.com/youtube/v3/channels?part=statistics&id=CHANNELID&key=APIKEY";
    $yt_array = file_get_contents($url_yt);
    $ytcount = json_decode($yt_array, true);
    $ytsubscribers = $ytcount['items'][0]['subscriberCount'];
     
    echo $ytsubscribers;
?>

I get some errors even if the code snippet looks ok.

Warning: file_get_contents() [function.file-get-contents]: SSL: Success in /ytsub2.php on line 4

Warning: file_get_contents() [function.file-get-contents]: Failed to enable crypto in /ytsub2.php on line 4

Warning: file_get_contents(https://www.googleapis.com/youtube/v3/channels?part=statistics&id=CHANNELID&key=APIKEY) [function.file-get-contents]: failed to open stream: operation failed in /ytsub2.php on line 4

I have no idea how to fix this errors. It seems my site server is not able to get the JSON properly.

EDIT:

I tried using cURL without any result:

<?php

 //function to get the remote data
 function url_get_contents ($url) {
     if (function_exists('curl_exec')){ 
         $conn = curl_init($url);
         curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, true);
         curl_setopt($conn, CURLOPT_FRESH_CONNECT,  true);
         curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);
         $url_get_contents_data = (curl_exec($conn));
         curl_close($conn);
     }elseif(function_exists('file_get_contents')){
         $url_get_contents_data = file_get_contents($url);
     }elseif(function_exists('fopen') && function_exists('stream_get_contents')){
         $handle = fopen ($url, "r");
         $url_get_contents_data = stream_get_contents($handle);
     }else{
         $url_get_contents_data = false;
     }
 return $url_get_contents_data;
 } 
 


 $url_yt = "https://www.googleapis.com/youtube/v3/channels?part=statistics&id=CHANNELID&key=APIKEY";
 $yt_array = url_get_contents($url_yt);
 $ytcount = json_decode($yt_array, true);
 $ytsubscribers = $ytcount['items'][0]['subscriberCount'];



// echo the youtube follower count
    echo $ytsubscribers;

?>
Cœur
  • 37,241
  • 25
  • 195
  • 267
Damien Sellier
  • 155
  • 2
  • 13

2 Answers2

1

Here is the correct working code with cURL:

 # url_get_contents function by Andy Langton: http://andylangton.co.uk/
 function url_get_contents($url,$useragent='cURL',$headers=false, $follow_redirects=false,$debug=false) {
 # initialise the CURL library
 $ch = curl_init();
 # specify the URL to be retrieved
 curl_setopt($ch, CURLOPT_URL,$url);
 # we want to get the contents of the URL and store it in a variable
 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
 # specify the useragent: this is a required courtesy to site owners
 curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
 # ignore SSL errors
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 # return headers as requested
 if ($headers==true){
 curl_setopt($ch, CURLOPT_HEADER,1);
 }
 # only return headers
 if ($headers=='headers only') {
 curl_setopt($ch, CURLOPT_NOBODY ,1);
 }
 # follow redirects - note this is disabled by default in most PHP installs from 4.4.4 up
 if ($follow_redirects==true) {
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
 }
 # if debugging, return an array with CURL's debug info and the URL contents
 if ($debug==true) {
 $result['contents']=curl_exec($ch);
 $result['info']=curl_getinfo($ch);
 }
 # otherwise just return the contents as a variable
 else $result=curl_exec($ch);
 # free resources
 curl_close($ch);
 # send back the data
 return $result;
 }
 
  $url_yt = "https://www.googleapis.com/youtube/v3/channels?part=statistics&id=YOUR_CHANNEL_ID&key=YOUR_API_KEY";
 url_get_contents($url_yt);
 $yt_array = url_get_contents($url_yt);
 $ytcount = json_decode($yt_array, true);
 $ytsubscribers = $ytcount['items'][0]['statistics']['subscriberCount'];

Then call the variable $ytsubscribers where you want to display it.

echo $ytsubscribers;
Damien Sellier
  • 155
  • 2
  • 13
0

Make sure that you're allowing access from your IP address in the Google Developers Console.

Also, change this line:

$ytsubscribers = $ytcount['items'][0]['subscriberCount'];

to this:

$ytsubscribers = $ytcount['items'][0]['statistics']['subscriberCount'];
  • Thanks. In the Google Dev Console, every URL is allowed for this API. You are right "$ytsubscribers" is fixed according to what you said. But it still not display anything. – Damien Sellier Jul 14 '15 at 21:49