使用新的 YouTube API v3 解析 YouTube 订阅者数量

Posted

技术标签:

【中文标题】使用新的 YouTube API v3 解析 YouTube 订阅者数量【英文标题】:Parse YouTube Subscribers Count with new YouTube API v3 【发布时间】:2015-10-03 16:40:04 【问题描述】:

我想使用新的 API v3 从我的 youtube 频道获取订阅者数量。

    我在这里为 youtube 创建了一个 Google API 应用程序:Google API Console 我有 APP 密钥和 youtube 频道 ID 我使用“json_decode”来获取对象

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

即使代码 sn-p 看起来没问题,我也会遇到一些错误。

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;

?>

【问题讨论】:

这是你的文件ytsub2.php?如果是这样,我们能看到整个事情吗? ***.com/questions/1975461/… @jonmrich 这个 php 页面只包含将关注者数显示为测试页面的代码。 @cmorrissey 刚刚尝试使用 cURL,但我没有得到任何结果。请检查我的帖子编辑。谢谢 你最后做对了吗?如果是,我需要那个代码!谢谢! 【参考方案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;

【讨论】:

【参考方案2】:

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

另外,更改这一行:

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

到这里:

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

【讨论】:

谢谢。在 Google Dev Console 中,此 API 允许每个 URL。你是对的“$ytsubscribers”是根据你所说的固定的。但它仍然没有显示任何内容。

以上是关于使用新的 YouTube API v3 解析 YouTube 订阅者数量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用新的 YouTube Data API (V3) 获取某个频道的上传视频列表?

如何使用新的 YouTube Data API (V3) 获取某个频道的上传视频列表?

无帐号的 Youtube 视频列表(使用新的 API v3)

解析 youtube 数据 v3 api

如何使用YouTube API V3?

如何使用 YouTube API V3?