Episodes
No episodes found for this playlist.
prepare("SELECT * FROM programmes WHERE id = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();
$programme = $stmt->fetch(PDO::FETCH_ASSOC);
// Check if programme exists
if (!$programme) {
die("Programme not found.");
}
// YouTube API setup
$api_key = 'AIzaSyBAON_ChCgF5BEXX7ijp--GImeRmAHdUBY';
$playlist_id = $programme['youtube_playlist'];
$items_per_page = 21; // Match the first code
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$page_token = isset($_GET['pageToken']) ? $_GET['pageToken'] : '';
// Reset page tokens if programme ID changes
if (!isset($_SESSION['current_programme_id']) || $_SESSION['current_programme_id'] != $id) {
$_SESSION['page_tokens'] = [];
$_SESSION['current_programme_id'] = $id;
}
// Fetch total items to calculate total pages
$total_url = "https://www.googleapis.com/youtube/v3/playlists?part=contentDetails&id=$playlist_id&key=$api_key";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $total_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$total_response = curl_exec($ch);
if (curl_errno($ch)) {
$error_msg = curl_error($ch);
curl_close($ch);
die("cURL Error (Total Items): $error_msg");
}
curl_close($ch);
$total_data = json_decode($total_response, true);
$total_items = $total_data['items'][0]['contentDetails']['itemCount'] ?? 0;
$total_pages = ceil($total_items / $items_per_page);
// Function to fetch page tokens up to the desired page
function fetchPageTokens($playlist_id, $api_key, $items_per_page, $target_page, &$page_tokens) {
$current_page = 1;
$next_page_token = '';
$page_tokens[1] = ''; // Page 1 has no pageToken
while ($current_page < $target_page && $next_page_token !== null) {
$url = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=$items_per_page&playlistId=$playlist_id&key=$api_key";
if ($next_page_token) {
$url .= "&pageToken=$next_page_token";
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
if (curl_errno($ch)) {
curl_close($ch);
return false;
}
curl_close($ch);
$data = json_decode($response, true);
if (isset($data['error'])) {
return false;
}
$next_page_token = $data['nextPageToken'] ?? null;
$current_page++;
if ($next_page_token && $current_page <= $target_page) {
$page_tokens[$current_page] = $next_page_token;
}
}
return true;
}
// Fetch page tokens if not already stored
if (!isset($_SESSION['page_tokens'][$page]) && $page > 1) {
if (!fetchPageTokens($playlist_id, $api_key, $items_per_page, $page, $_SESSION['page_tokens'])) {
echo "YouTube API Error: Unable to fetch page tokens.";
$episodes = [];
$next_page_token = '';
$prev_page_token = '';
}
}
// Use the page token for the current page
$page_token = $_SESSION['page_tokens'][$page] ?? '';
// Fetch episodes for the current page
$max_results = $items_per_page;
$url = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=$max_results&playlistId=$playlist_id&key=$api_key";
if ($page_token) {
$url .= "&pageToken=$page_token";
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
if (curl_errno($ch)) {
$error_msg = curl_error($ch);
curl_close($ch);
die("cURL Error: $error_msg");
}
curl_close($ch);
// Parse the response
$playlist_data = json_decode($response, true);
if (isset($playlist_data['error'])) {
echo "YouTube API Error: " . htmlspecialchars($playlist_data['error']['message']) . "
";
$episodes = [];
$next_page_token = '';
$prev_page_token = '';
} else {
$episodes = $playlist_data['items'] ?? [];
$next_page_token = $playlist_data['nextPageToken'] ?? '';
$prev_page_token = $playlist_data['prevPageToken'] ?? '';
// Store tokens for next and previous pages
if ($next_page_token && !isset($_SESSION['page_tokens'][$page + 1])) {
$_SESSION['page_tokens'][$page + 1] = $next_page_token;
}
if ($prev_page_token && !isset($_SESSION['page_tokens'][$page - 1])) {
$_SESSION['page_tokens'][$page - 1] = $prev_page_token;
}
}
// Set page title
$page_title = $programme['title'] . " | TV Channel";
require 'components/header.php';
?>
No episodes found for this playlist.