Requête php api youtube
FerméWarren37 Messages postés 40 Date d'inscription vendredi 10 juin 2022 Statut Membre Dernière intervention 25 septembre 2023 - 16 juin 2023 à 15:11
- Api youtube php
- Comment télécharger une vidéo youtube - Guide
- Youtube sans pub - Accueil - Streaming
- Youtube mp3 - Guide
- Script vidéo youtube - Guide
- Easy php - Télécharger - Divers Web & Internet
10 réponses
12 juin 2023 à 20:12
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); }
Modifié le 13 juin 2023 à 08:30
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; } } ?>
13 juin 2023 à 08:40
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);
Modifié le 13 juin 2023 à 10:07
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; } } ?>
13 juin 2023 à 10:22
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 questionModifié le 14 juin 2023 à 09:45
<?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); ?>
14 juin 2023 à 09:46
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
14 juin 2023 à 09:53
Change ton var_dump en :
var_dump($activitiesData);
Modifié le 14 juin 2023 à 10:09
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.
14 juin 2023 à 10:29
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
14 juin 2023 à 12:54
Fais donc un écho de ta variable $searchUrl...
Puis relis ma première réponse....
Modifié le 14 juin 2023 à 13:20
<?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"
Modifié le 16 juin 2023 à 15:12
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.'; } ?>