Requête php api youtube
Warren37 Messages postés 40 Date d'inscription Statut Membre Dernière intervention -
Bonjour, j'essaye de récupérer la dernière vidéo d'une page youtube sur ma page web, en local déjà. Je veux que quand une nouvelle vidéo est postée sur cette page youtube, elle s'affiche sur mon site quand je le recharge.
Je n'ai actuellement plus de messages d'erreurs mais rien ne s'affiche dans ma page web. J'ai fait la procédure pour avoir une clé api de l'api youtube sur google dev. Avant j'affichais moi même une vidéo du moment mais je souhaite l'automatiser.
Avez vous des suggestions?
Merci d'avance
Ma page php:
<?php $username = 'username'; $apiKey = 'token'; $activitiesUrl = "https://www.googleapis.com/youtube/v3/activities?part=snippet%2CcontentDetails&channelId=%24username&maxResults=1&key=%24apiKey"; $curl = curl_init($activitiesUrl); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); curl_close($curl); $activitiesData = json_decode($response); if (isset($activitiesData->items) && count($activitiesData->items) > 0) { $videoId = $activitiesData->items[0]->contentDetails->upload->videoId; $videoTitle = $activitiesData->items[0]->snippet->title; $videoDescription = $activitiesData->items[0]->snippet->description; $videoThumbnail = $activitiesData->items[0]->snippet->thumbnails->default->url; // Générer le code HTML pour afficher la vidéo $html = '<div class="video-responsive>'; $html .= '<iframe width="560" height="315" src="https://www.youtube.com/embed/' . $videoId . '" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'; $html .= '</div>'; // Afficher le code HTML echo $html; } ?>
En html:
<div class="containerbis"> <?php include("youtube.php"); ?> </div>
Windows / Firefox 114.0
- Api youtube php
- Comment télécharger une vidéo youtube - Guide
- Supprimer pub youtube - Accueil - Streaming
- Youtube mp3 - Guide
- Script vidéo youtube - Guide
- Télécharger youtube gratuit en arabe - Télécharger - TV & Vidéo
10 réponses
Bonjour
Si tu fais un var_dump de la variable $response ...
Qu'est-ce que ça t'affiche ?
Et puis, pourrais-tu ajouter avant de faire le close, une gestion d'erreur au niveau du curl
if(curl_exec($curl) === false) { echo 'Erreur Curl : ' . curl_error($curl); }
J'obtiens alors:
"Erreur Curl :" (sans erreur Curl)
<?php $username = 'username'; $apiKey = 'apikey'; $activitiesUrl = "https://www.googleapis.com/youtube/v3/activities?part=snippet%2CcontentDetails&channelId=%24username&maxResults=1&key=%24apiKey"; $curl = curl_init($activitiesUrl); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); if ($response === false) { echo 'Erreur Curl : ' . curl_error($curl); } else { var_dump($response); curl_close($curl); $activitiesData = json_decode($response); if (isset($activitiesData->items) && count($activitiesData->items) > 0) { $videoId = $activitiesData->items[0]->contentDetails->upload->videoId; $videoTitle = $activitiesData->items[0]->snippet->title; $videoDescription = $activitiesData->items[0]->snippet->description; $videoThumbnail = $activitiesData->items[0]->snippet->thumbnails->default->url; // Générer le code HTML pour afficher la vidéo $html = '<div class="video-responsive>'; $html .= '<iframe width="560" height="315" src="https://www.youtube.com/embed/' . $videoId . '" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'; $html .= '</div>'; // Afficher le code HTML echo $html; } } ?>
Ton url me semble étrange
Tu sembles avoir remplacé les $ par %24
$activitiesUrl = "https://www.googleapis.com/youtube/v3/activities?part=snippet%2CcontentDetails&channelId=".$username."&maxResults=1&key=".$apiKey;
Ensuite, vu que tu testes en "local", essaye de désactiver la verif ssl et du host
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
j'obtiens Erreur Curl : 3 -
cURL n'a pas pu résoudre l'adresse de l'URL spécifiée dans la requête.
(Le $ est bien présent, quand je le copie dans des balises code php ici il se transforme en %24)
<?php $username = 'username'; $apiKey = 'apikey'; $activitiesUrl = "https://www.googleapis.com/youtube/v3/activities?part=snippet%2CcontentDetails&channelId=%24username&maxResults=1&key=%24apiKey"; $curl = curl_init($activitiesUrl); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); if ($response === false) { echo 'Erreur Curl : ' . curl_errno($curl) . ' - ' . curl_error($curl); } else { var_dump($response); curl_close($curl); $activitiesData = json_decode($response); if (isset($activitiesData->items) && count($activitiesData->items) > 0) { $videoId = $activitiesData->items[0]->contentDetails->upload->videoId; $videoTitle = $activitiesData->items[0]->snippet->title; $videoDescription = $activitiesData->items[0]->snippet->description; $videoThumbnail = $activitiesData->items[0]->snippet->thumbnails->default->url; // Générer le code HTML pour afficher la vidéo $html = '<div class="video-responsive>'; $html .= '<iframe width="560" height="315" src="https://www.youtube.com/embed/' . $videoId . '" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'; $html .= '</div>'; // Afficher le code HTML echo $html; } } ?>
En mettant
$activitiesUrl = "https://www.googleapis.com/youtube/v3/activities?part=snippet%2CcontentDetails&channelId=" . urlencode($username) . "&maxResults=1&key=" . urlencode($apiKey);
J'obtiens l'erreur:
string(264) "{ "error": { "code": 403, "message": "The request is not properly authorized.", "errors": [ { "message": "The request is not properly authorized.", "domain": "youtube.activity", "reason": "forbidden" } ] } } "
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question<?php $username = 'username'; $apiKey = 'apikey'; $activitiesUrl = "https://www.googleapis.com/youtube/v3/activities?part=snippet%2CcontentDetails%2Cid&username=%24username&maxResults=1&key=%24apiKey&format=json"; $curl = curl_init($activitiesUrl); /*Seulement sur localhost : Désactiver la vérification du host et le certificat curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); */ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response=curl_exec($curl); if($response === false) { echo 'Erreur Curl : ' . curl_errno($curl) . ' - ' . curl_error($curl); } else { echo 'Operation completed without any errors'."\n\r"; $activitiesData =json_decode($response); var_dump($activitiesData->items); $html=""; if (isset($activitiesData->items) && count($activitiesData->items) > 0) { foreach($activitiesData->items as $index=>$item){ $videoId = $item->contentDetails->upload->videoId; $videoTitle = $item->snippet->title; $videoDescription = $item->snippet->description; $videoThumbnail = $item->snippet->thumbnails->default->url; // Générer le code HTML pour afficher la vidéo $html .= '<div class="video-responsive paddingtab blue-stylized-border" data-aos="fade-in" data-aos-offset="-5">'; $html .= '<iframe width="560" height="315" src="https://www.youtube.com/embed/' . $videoId . '" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'; $html .= '</div>'; } // Afficher le code HTML echo $html; } } curl_close($curl); ?>
Avec ceci j'obtiens en message:
Avec vos modifications après la ligne 22, j'obtiens le message:
Operation completed without any errors
Warning: Undefined property: stdClass::$items in ... on line 24
NULL
Mais il y a bien des vidéos postées régulièrement sur la page youtube concernée
https://www.youtube.com/@ClashRoyale
J'obtiens le message:
Operation completed without any errors object(stdClass)#4 (1) { ["error"]=> object(stdClass)#2 (3) { ["code"]=> int(400) ["message"]=> string(58) "No filter selected. Expected one of: home, channelId, mine" ["errors"]=> array(1) { [0]=> object(stdClass)#3 (5) { ["message"]=> string(58) "No filter selected. Expected one of: home, channelId, mine" ["domain"]=> string(17) "youtube.parameter" ["reason"]=> string(24) "missingRequiredParameter" ["location"]=> string(11) "parameters." ["locationType"]=> string(5) "other" } } } }
Il semble que je ne peux pas utiliser l'username comme ça.
Il me faudrait le channelId de la page youtube mais je ne vois pas comment l'obtenir.
Si je fais
<?php $apiKey = 'apikey'; $searchQuery = '@ClashRoyale'; // Remplacez par le nom d'utilisateur ou le nom de la chaîne recherchée $searchUrl = "https://www.googleapis.com/youtube/v3/channels?part=id&forUsername=%24searchQuery&key=%24apiKey"; $curl = curl_init($searchUrl); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); if ($response === false) { echo 'Erreur Curl : ' . curl_errno($curl) . ' - ' . curl_error($curl); } else { $searchData = json_decode($response); if (isset($searchData->items) && count($searchData->items) > 0) { $channelId = $searchData->items[0]->id; echo "Channel ID: $channelId"; } else { echo "Aucune chaîne trouvée pour la requête : $searchQuery"; } } curl_close($curl); ?>
j'obtiens le message: Aucune chaîne trouvée pour la requête : @ClashRoyale
<?php $channelId = 'UC_F8DoJf9MZogEOU51TpTbQ'; $apiKey = 'api key'; // Requête pour obtenir les dernières vidéos de la chaîne $videosUrl = "https://www.googleapis.com/youtube/v3/search?order=date&part=snippet&channelId=%24channelId&maxResults=1&key=%24apiKey"; $curl = curl_init($videosUrl); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); if ($response === false) { echo 'Curl error: ' . curl_error($curl); } else { $videosData = json_decode($response, true); if (isset($videosData['items'][0]['id']['videoId'])) { $videoId = $videosData['items'][0]['id']['videoId']; $videoTitle = $videosData['items'][0]['snippet']['title']; $videoDescription = $videosData['items'][0]['snippet']['description']; $videoThumbnail = $videosData['items'][0]['snippet']['thumbnails']['default']['url']; // Afficher la vidéo sur votre site web $html = '<div class="video-responsive">'; $html .= '<iframe width="560" height="315" src="https://www.youtube.com/embed/' . $videoId . '" title="' . $videoTitle . '" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'; $html .= '</div>'; echo $html; } else { echo 'No video found.'; } } curl_close($curl);
ça avance. J'obtiens la dernière vidéos mais dans la rubrique "shorts". Je cherche à avoir celle dans "Accueil" ou "vidéos"
"https://www.youtube.com/clashroyale"
J'ai réussi comme cela à récupérer la dernière vidéo dans la rubrique "vidéos" de la page youtube, mais comme il s'agit de la dernière vidéo publiée, si une vidéo est publiée dans une autre rubrique tel que "shorts" ou "playlist", ma vidéo sera remplacé. Je ne pense pas qu'on puisse restreindre la récupération à la rubrique vidéo de la page youtube.
<?php $channelId = 'UC_F8DoJf9MZogEOU51TpTbQ'; // Identifiant de la chaîne Clash Royale $feedUrl = 'https://www.youtube.com/feeds/videos.xml?channel_id='.$channelId; // Récupération du contenu XML $xml = file_get_contents($feedUrl); // Conversion en objet SimpleXML $feed = simplexml_load_string($xml); if ($feed !== false && isset($feed->entry[0])) { $latestVideo = $feed->entry[0]; $videoId = substr((string)$latestVideo->id, 9); // Extraction de l'identifiant de la vidéo $videoUrl = 'https://www.youtube.com/embed/'.$videoId; // URL de l'intégration de la vidéo // Affichage de la vidéo sur le site web echo'<div class="video-responsive paddingtab blue-stylized-border" data-aos="fade-in" data-aos-offset="-5">'; echo'<iframe width="560" height="315" src="'.$videoUrl.'" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>'; echo'</div>'; } else { echo'Aucune vidéo trouvée.'; } ?>