使用新的YouTube API v3

时间:2015-07-14 20:39:35

标签: php json youtube-api

我希望使用新的API v3从我的YouTube频道获取订阅者数量。

  1. 我在这里为youtube创建了一个Google API应用:Google API Console
  2. 我有APP密钥和youtube渠道ID
  3. 我使用“json_decode”来获取对象
  4. <?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;
    ?>

    即使代码段看起来没问题,我也会收到一些错误。

    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

    我不知道如何解决这个错误。看来我的站点服务器无法正常获取JSON。 在此先感谢您的帮助

    编辑:

    我尝试使用cURL而没有任何结果:

    <?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;
    
    ?>

2 个答案:

答案 0 :(得分:1)

以下是使用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'];

然后调用要显示它的变量$ ytsubscribers。

echo $ytsubscribers;

答案 1 :(得分:0)

确保您允许通过Google Developers Console中的IP地址进行访问。

另外,请更改此行:

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

到此:

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