J'utilise YouTube API v3 pour effectuer une recherche sur YouTube.
https://developers.google.com/youtube/v3/docs/search
Comme vous pouvez le constater, le JSON de réponse ne contient pas de durée de vidéo. Est-il possible d'obtenir des durées de vidéos?
De préférence, n'appelle pas à nouveau une API pour chaque élément du résultat (à moins que ce ne soit le seul moyen d'obtenir des durées).
Une fois l'appel de recherche effectué, vous devrez appeler la ressource vidéo de l'API de données YouTube. Vous pouvez utiliser jusqu'à 50 identifiants de vidéo dans une recherche pour ne pas avoir à l'appeler pour chaque élément.
https://developers.google.com/youtube/v3/docs/videos/list
Vous aurez envie de définir part=contentDetails
, parce que la durée est là.
Par exemple, l'appel suivant:
https://www.googleapis.com/youtube/v3/videos?id=9bZkp7q19f0&part=contentDetails&key={YOUR_API_KEY}
Donne ce résultat:
{
"kind": "youtube#videoListResponse",
"etag": "\"XlbeM5oNbUofJuiuGi6IkumnZR8/ny1S4th-ku477VARrY_U4tIqcTw\"",
"items": [
{
"id": "9bZkp7q19f0",
"kind": "youtube#video",
"etag": "\"XlbeM5oNbUofJuiuGi6IkumnZR8/HN8ILnw-DBXyCcTsc7JG0z51BGg\"",
"contentDetails": {
"duration": "PT4M13S",
"dimension": "2d",
"definition": "hd",
"caption": "false",
"licensedContent": true,
"regionRestriction": {
"blocked": [
"DE"
]
}
}
}
]
}
L'heure est au format ISO 8601. PT correspond à Time Duration, 4M à 4 minutes et 13S à 13 secondes.
J? ai compris!
$dur = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=$vId&key=dldfsd981asGhkxHxFf6JqyNrTqIeJ9sjMKFcX4");
$duration = json_decode($dur, true);
foreach ($duration['items'] as $vidTime) {
$vTime= $vidTime['contentDetails']['duration'];
Là, il renvoie l'heure pour l'API YouTube version 3 (la clé est composée par le chemin;). J'ai utilisé $vId
que j'avais extrait de la liste renvoyée des vidéos de la chaîne sur laquelle je visais les vidéos de ...
Cela fonctionne ... :) Google a VRAIMENT besoin d'inclure la durée dans l'extrait afin que vous puissiez l'obtenir avec un seul appel au lieu de deux ... soupir ....... c'est sur leur liste "wontfix".
J'ai écrit le cours suivant pour obtenir la durée de la vidéo YouTube à l'aide de l'API v3 de YouTube (qui renvoie également les vignettes):
class Youtube
{
static $api_key = '<API_KEY>';
static $api_base = 'https://www.googleapis.com/youtube/v3/videos';
static $thumbnail_base = 'https://i.ytimg.com/vi/';
// $vid - video id in youtube
// returns - video info
public static function getVideoInfo($vid)
{
$params = array(
'part' => 'contentDetails',
'id' => $vid,
'key' => self::$api_key,
);
$api_url = Youtube::$api_base . '?' . http_build_query($params);
$result = json_decode(@file_get_contents($api_url), true);
if(empty($result['items'][0]['contentDetails']))
return null;
$vinfo = $result['items'][0]['contentDetails'];
$interval = new DateInterval($vinfo['duration']);
$vinfo['duration_sec'] = $interval->h * 3600 + $interval->i * 60 + $interval->s;
$vinfo['thumbnail']['default'] = self::$thumbnail_base . $vid . '/default.jpg';
$vinfo['thumbnail']['mqDefault'] = self::$thumbnail_base . $vid . '/mqdefault.jpg';
$vinfo['thumbnail']['hqDefault'] = self::$thumbnail_base . $vid . '/hqdefault.jpg';
$vinfo['thumbnail']['sdDefault'] = self::$thumbnail_base . $vid . '/sddefault.jpg';
$vinfo['thumbnail']['maxresDefault'] = self::$thumbnail_base . $vid . '/maxresdefault.jpg';
return $vinfo;
}
}
Veuillez noter que vous aurez besoin de API_KEY pour utiliser l'API YouTube:
Ce code extrait la durée de la vidéo YouTube à l'aide de l'API YouTube v3 en transmettant un ID vidéo. Cela a fonctionné pour moi.
<?php
function getDuration($videoID){
$apikey = "YOUR-Youtube-API-KEY"; // Like this AIcvSyBsLA8znZn-i-aPLWFrsPOlWMkEyVaXAcv
$dur = file_get_contents("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=$videoID&key=$apikey");
$VidDuration =json_decode($dur, true);
foreach ($VidDuration['items'] as $vidTime)
{
$VidDuration= $vidTime['contentDetails']['duration'];
}
preg_match_all('/(\d+)/',$VidDuration,$parts);
return $parts[0][0] . ":" .
$parts[0][1] . ":".
$parts[0][2]; // Return 1:11:46 (i.e.) HH:MM:SS
}
echo getDuration("zyeubYQxHyY"); // Video ID
?>
Vous pouvez obtenir la clé d'API YouTube de votre domaine sur https://console.developers.google.com et générer des informations d'identification pour vos besoins.
Durée en secondes en utilisant Python 2.7 et l'API YouTube v3:
try:
dur = entry['contentDetails']['duration']
try:
minutes = int(dur[2:4]) * 60
except:
minutes = 0
try:
hours = int(dur[:2]) * 60 * 60
except:
hours = 0
secs = int(dur[5:7])
print hours, minutes, secs
video.duration = hours + minutes + secs
print video.duration
except Exception as e:
print "Couldnt extract time: %s" % e
pass