Get duration from a youtube url

前端 未结 6 1065
感情败类
感情败类 2021-02-08 10:51

Im looking for a function that will pull the youtube duration of a video from the url. I read some tutorials but don\'t get it. I embed videos on my site using a url and I have

6条回答
  •  青春惊慌失措
    2021-02-08 11:10

    1) You will need an API key. Go to https://developers.google.com/ and log in or create an account, if necessary. After logging in go to this link https://console.developers.google.com/project and click on the blue CREATE PROJECT button. Wait a moment as Google prepares your project.

    2) You will need a web host that is running PHP with file_get_content supported. You can check by creating a new script with just "echo php_info();" and verifying that allow_url_fopen is set to On. If it is not, then change the configuration or talk to your web host.

    ";
      //Replace This With The Video ID. You can get it from the URL.
      //ie https://www.youtube.com/XWuUdJo9ubM would be
      $sVideoId = "XWuUdJo9ubM";
    
      //Get The Video Details From The API.
      function getVideoDetails ($sVideoId) {
        global $sYouTubeApiKey;
        //Generate The API URL
        $sUrl = "https://www.googleapis.com/youtube/v3/videos?id=".$sVideoId."&key=".$sYouTubeApiKey."&part=contentDetails";
        //Perform The Request
        $sData = file_get_contents($sUrl);
        //Decode The JSON Response
        return json_decode($sData);
      }
    
      //Get The Video Duration In Seconds.
      function getVideoDuration ($sVideoId) {
        $oData = getVideoDetails($sVideoId);
        //Deal With No Videos In List
        if (count($oData->items) < 1) return false;
        //Get The First Video
        $oVideo = array_shift($oData->items);
        //Extract The Duration
        $sDuration = $oVideo->contentDetails->duration;
        //Use Regular Expression To Parse The Length
        $pFields = "'PT(?:([0-9]+)H)?(?:([0-9]+)M)?(?:([0-9]+)S)?'si";
        if (preg_match($pFields, $sDuration, $aMatch)) {
          //Add Up Hours, Minutes, and Seconds
          return $aMatch[1]*3600 + $aMatch[2]*60 + $aMatch[3];
        }
      }
    
      header("Content-Type: text/plain");
      $oData = getVideoDetails($sVideoId);
      print_r($oData);
      echo "Length: ".getVideoDuration($sVideoId);
    ?>
    

    Hope this helps!

提交回复
热议问题