2016-11-02 1 views
2

J'ai trouvé une fonction de Stack pour obtenir la longueur d'une vidéo Vimeo qui fonctionne bien avec un ID vidéo fourni sur le code d'origine, mais ne semble pas fonctionner quand je le change. ..Dynamiquement obtenir la longueur d'une vidéo Vimeo via PHP

Quelqu'un peut-il aider?

La fonction:

function vimeoVideoDuration($video_url) { 
    $video_id = (int)substr(parse_url($video_url, PHP_URL_PATH), 1); 
    $json_url = 'http://vimeo.com/api/v2/video/' . $video_id . '.xml'; 
    $ch = curl_init($json_url); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    $data = curl_exec($ch); 
    curl_close($ch); 

    $data = new SimpleXmlElement($data, LIBXML_NOCDATA); 

    if (!isset($data->video->duration)) { 
     return null; 
    } 

    $duration = $data->video->duration; 
    return $duration; 
} 

Quand je echo vimeoVideoDuration('https://vimeo.com/115134273'); le nombre de secondes pour que la vidéo fonctionne avec brio.

Cependant, si je change cela à mon propre ID vidéo je reçois plusieurs erreurs dans mon journal d'erreurs ... J'ai fourni ces ci-dessous:

[02-Nov-2016 12:57:20 UTC] PHP Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : Start tag expected, '<' not found in /manage/view-module.php on line 28 
[02-Nov-2016 12:57:20 UTC] PHP Warning: SimpleXMLElement::__construct(): 149029246 not found. in /manage/view-module.php on line 28 
[02-Nov-2016 12:57:20 UTC] PHP Warning: SimpleXMLElement::__construct():^in /manage/view-module.php on line 28 
[02-Nov-2016 12:57:20 UTC] PHP Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /manage/view-module.php:28 
Stack trace: 
#0 /manage/view-module.php(28): SimpleXMLElement->__construct('149029246 not f...', 16384) 
#1 /manage/view-module.php(51): vimeoVideoDuration('https://vimeo.c...') 
#2 {main} 
    thrown in /manage/view-module.php on line 28 
+0

Avez-vous vérifié la réponse que vous obtenez de la appel curl? –

+0

@PatrickQ J'ai trouvé que si je modifiais le paramètre de confidentialité 'Tout le monde' peut voir cette vidéo, cela fonctionne mais j'en ai besoin caché sur Vimeo car c'est une vidéo de cours que les gens paient sur mon site et je ne veux pas gratuit. Aucune suggestion? –

Répondre

1

On dirait que la fonction utilise l'ancienne API simple (note le format: http://vimeo.com/api/v2/video/*) qui ne peut être utilisé qu'avec des vidéos publiques sur vimeo.com.

Si la vidéo a incorporé n'importe où la confidentialité, vous pouvez utiliser oEmbed pour récupérer le code d'intégration et la durée. Documentation pour cela se trouve ici: https://developer.vimeo.com/apis/oembed

(EDIT: oEmbed peut également être utilisé sur les vidéos de la vie privée de niveau de domaine)

Si la vidéo est privée et a la vie privée au niveau du domaine, vous aurez besoin de créez une application API sur le site Vimeo Developer et authentifiez vos requêtes auprès de l'API de données. Docs ici:

Vous pouvez également trouver la bibliothèque PHP officielle ici: https://developer.vimeo.com/api/libraries