Почему этот file_get_contents () иногда работает, а иногда нет? - PullRequest
0 голосов
/ 29 апреля 2019

Я создаю небольшой интерфейс для показа живого видео с канала YouTube на веб-странице. Я получил ключ API, настроил его, и он заработал. Но потом я не смог получить доступ к определенной информации из json, который я получил с сервера YouTube.

Я попытался сделать несколько вещей, исправляя любые поломки на ходу, но понял, что иногда это работает, а иногда нет ... Я искал другие темы, но больше не могу понять, что происходит.

Итак, вопросы:

  1. Как использовать file_get_contents_url () для получения информации о канале Youtube каждый раз без сбоя ответа HTTP?

  2. Почему в моем тестировании используются все единицы измерения, которые у меня есть в качестве квоты из API Google? (У него заканчивается 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 голосов
/ 29 апреля 2019

Если ответ, который вы показываете нам, завершен, то, если вы получаете канал, который находится в автономном режиме, то массив элементов отправляется, но является пустым, поэтому ваш код должен проверить это возможность

// 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";
}
...