为什么这个file_get_contents()有时有效,有时却无效?

时间:2019-04-29 11:28:56

标签: php api youtube file-get-contents

我正在构建一个小的界面,以显示从YouTube频道到网页的实时视频流。我获得了API密钥,我对其进行了设置并成功运行。但是后来我无法从YouTube服务器返回的json中访问某些信息。

我尝试了一些方法,解决了旅途中的任何问题,但我意识到有时它可以工作,有时却无法...我搜索了其他线程,但我不明白发生了什么。

所以问题是:

  1. 如何在每次没有HTTP响应失败的情况下如何使用file_get_contents_url()获取有关Youtube频道的信息?

  2. 为什么我要使用Google API中作为配额的所有单位进行测试? (一次刷新约50个单元就用完了)

我的代码

<?php
header("Access-Control-Allow-Origin: *");

# Enable Error Reporting and Display:
error_reporting(~0);
ini_set('display_errors', 1);

$API_KEY = 'API KEY HERE';
$ChannelID = ' CHANNEL ID HERE';

$channelInfo = 'https://www.googleapis.com/youtube/v3/search?part=snippet&channelId='.$ChannelID.'&type=video&eventType=live&key='.$API_KEY;

$extractInfo = file_get_contents_url($channelInfo);
$extractInfo = str_replace('},]',"}]",$extractInfo);
$showInfo = json_decode($extractInfo, true);

if($showInfo['pageInfo']['totalResults'] === 0){
    echo 'Users channel is Offline';
}else{
    echo 'Users channel is LIVE!';
}

$videoId = $extractInfo['items'][0]['id']["videoId"];

if ($videoId = 0) {
    echo "<h2>No live stream yet.</h2>";
} else {
    echo "</h2>$videoId</h2>";
}
?>

我需要的是

  1. 访问我的YouTube频道
  2. 将内容获取为json
  3. 将其转换为php数组,
  4. 从中获取实时视频的 videoId
  5. 并显示它。

当我回声$extractInfo时,我会得到

{
    "kind": "youtube#searchListResponse", 
    "etag": "\"XpPGQXPnxQJhLgs6enD_n8JR4Qk/yOWNawoTMP4atq-Ylgqt-1puBAQ\"", 
    "regionCode": "NL", 
    "pageInfo": { 
            "totalResults": 0, 
            "resultsPerPage": 5 
            }, 
    "items": [] 
} 0

1 个答案:

答案 0 :(得分:0)

如果您显示给我们的回复是完整的,那么如果您获得的频道是离线的,则发送项目数组但为空,因此您的代码需要检查该内容 可能性

// only run this if we actually have an array to process
if ( count($showInfo['items']) > 0 ) {
    $videoId = $showInfo['items'][0]['id']["videoId"];

    if ($videoId = 0) {
        echo "<h2>No live stream yet.</h2>";
    } else {
        echo "</h2>$videoId</h2>";
    }
} else {
    echo "No items in the array";
}