PHP编写获取YouTube频道视频列表函数返回空数组求助
解决YouTube API返回空数组的问题
我来帮你排查这个问题,你的channels_list()函数返回空数组大概率是几个常见问题导致的,咱们一步步来解决:
1. 移除URL中的多余单引号
你的请求URL里把API密钥和频道ID用单引号括起来了,这会导致Google API无法正确识别这些参数——单引号会被当作参数值的一部分发送,直接导致请求无效。
把原URL里的:
$json_link="https://www.googleapis.com/youtube/v3/search?key='MY API KEY'&channelId='MY CHANNEL ID'&part=snippet,id&order=date&maxResults=10";
改成:
$json_link="https://www.googleapis.com/youtube/v3/search?key=你的API密钥&channelId=你的频道ID&part=snippet,id&order=date&maxResults=10";
注意直接填写密钥和频道ID,不要加任何引号。
2. 捕获请求错误,排查API响应
你现在的代码没有处理请求失败或API返回错误的情况,导致你看不到问题所在。建议添加错误捕获逻辑,明确知道是请求失败还是API返回了错误信息:
public function channels_list() { $method = $_SERVER['REQUEST_METHOD']; if($method != 'GET') { json_output(400,array('status' => 400,'message' => 'Bad request.')); } else { $data = array(); $json_link="https://www.googleapis.com/youtube/v3/search?key=你的API密钥&channelId=你的频道ID&part=snippet,id&order=date&maxResults=10"; // 用cURL替代file_get_contents(更稳定且易调试) $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $json_link); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $json = curl_exec($ch); $curl_error = curl_error($ch); curl_close($ch); if ($curl_error) { json_output(500, array('status' => 500, 'message' => '请求失败: ' . $curl_error)); return; } $response = json_decode($json, true); // 检查API是否返回错误 if (isset($response['error'])) { $error_msg = $response['error']['message'] ?? '未知API错误'; json_output(400, array('status' => 400, 'message' => 'API错误: ' . $error_msg)); return; } // 提取视频列表(如果存在) $data = $response['items'] ?? array(); json_output(200, array('status' => 200, 'data' => $data)); } }
3. 确认API配置是否正确
- 确保你在Google Cloud控制台中启用了「YouTube Data API v3」,未启用的话API会直接返回权限错误。
- 检查你的API密钥是否设置了IP限制,如果有,确保你的服务器IP在允许列表内。
- 确认频道ID正确:频道ID一般是
UC开头的字符串,不要把频道的自定义URL(比如@我的频道)当成频道ID,可以在YouTube频道的「设置 > 高级设置」里找到正确的频道ID。
4. 检查服务器环境
有些服务器禁用了allow_url_fopen,导致file_get_contents无法请求外部URL,上面的代码用cURL替代了file_get_contents,兼容性更好,也更容易调试请求问题。
内容的提问来源于stack exchange,提问作者Maddy
相关产品推荐
相关产品推荐

