ฉันจะดูระยะเวลาของวิดีโอด้วย YouTube API เวอร์ชัน 3 ได้อย่างไร


93

ฉันใช้ YouTube API v3 เพื่อค้นหา YouTube

https://developers.google.com/youtube/v3/docs/search

อย่างที่คุณเห็น JSON ตอบกลับไม่มีระยะเวลาของวิดีโอ มีวิธีรับระยะเวลาของวิดีโอหรือไม่?

ไม่ควรเรียก API สำหรับแต่ละองค์ประกอบในผลลัพธ์อีกครั้ง (เว้นแต่เป็นวิธีเดียวที่จะได้รับระยะเวลา)


24
ตามแบบฉบับของ Google เอาสิ่งที่ใช้ได้ผลดีมาทำลายมัน
Synetech

1
เหตุใดคำถามนี้จึงถูกแท็กด้วยทั้ง PHP และ Objective-C บางคำตอบยังใช้ Python
Peter Mortensen

คำตอบ:


128

คุณจะต้องโทรไปยังแหล่งข้อมูลวิดีโอของ API ข้อมูลของ YouTube หลังจากทำการโทรค้นหา คุณสามารถใส่รหัสวิดีโอได้ถึง 50 รหัสในการค้นหาดังนั้นคุณจะไม่ต้องเรียกมันสำหรับแต่ละองค์ประกอบ

https://developers.google.com/youtube/v3/docs/videos/list

คุณจะต้องตั้งค่าpart=contentDetailsเนื่องจากระยะเวลาอยู่ที่นั่น

ตัวอย่างเช่นการเรียกต่อไปนี้:

https://www.googleapis.com/youtube/v3/videos?id=9bZkp7q19f0&part=contentDetails&key={YOUR_API_KEY}

ให้ผลลัพธ์นี้:

{
 "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"
     ]
    }
   }
  }
 ]
}

เวลาถูกจัดรูปแบบเป็นสตริง ISO 8601 PT ย่อมาจาก Time Duration 4M คือ 4 นาทีและ 13S คือ 13 วินาที


4
รูปแบบเวลานี้คืออะไร? เป็นมาตรฐานที่ Objective C รองรับหรือไม่?
Rukshan Marapana

3
ความคิดเห็นที่ล่าช้า แต่บางทีคุณอาจต้องการติดดาวและจับตาดูตั๋วนี้ขอระยะเวลารวมอยู่ในการตอบกลับการค้นหา: code.google.com/p/gdata-issues/issues/detail?id=4294
Andrew Nguyen

3
@Andrew - เป็นรูปแบบ ISO 8601 ฉันยอมรับว่ามันดูโหดร้าย แต่อย่างน้อยก็สามารถแปลงเป็นภาษาใดก็ได้ - เพียงแค่ค้นหาตัวแปลง ISO 8601
Matt Koskela

2
สำหรับงูหลามห้องสมุดที่ดีในการแปลงระยะเวลาเป็นaniso8601 จะส่งคืน a datetime.timedeltaซึ่งสามารถจัดรูปแบบเป็นอะไรก็ได้
arnaudoff

4
วิดีโออะไรยาวเป็นสัปดาห์บน YouTube!?
Matt Koskela

14

ฉันเข้าใจแล้ว!

$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'];
}

ที่นั่นจะคืนเวลาสำหรับ YouTube API เวอร์ชัน 3 (คีย์ถูกสร้างขึ้นตามวิธีการ;) ฉันเคย$vIdว่าฉันได้ออกจากรายการที่ส่งคืนของวิดีโอจากช่องที่ฉันกำลังแสดงวิดีโอจาก ...

มันได้ผล. Google จำเป็นต้องรวมระยะเวลาไว้ในตัวอย่างข้อมูลเพื่อให้คุณสามารถรับได้ทั้งหมดด้วยการโทรเพียงครั้งเดียวแทนที่จะเป็นสองครั้ง ... อยู่ในรายการ 'wontfix'


ใช่และรวมระยะเวลาไว้ในรูปแบบที่มนุษย์อ่านได้เช่นวินาที
andreszs

2
คุณคาดหวังอะไร? เป็น Google พวกเขาไม่ได้ทำอะไรที่ถูกต้อง
Synetech

คุณพบวิธีที่จะได้ระยะเวลาเป็นวินาทีดูเหมือนว่า ahrd ในการแปลงจากรูปแบบ PT **** เป็นวินาที
Loenix

คุณไม่พลาดการปิด}?
Peter Mortensen

7

ฉันเขียนคลาสต่อไปนี้เพื่อรับระยะเวลาวิดีโอ YouTube โดยใช้ YouTube API v3 (ส่งคืนภาพขนาดย่อด้วย):

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;
    }
}

โปรดทราบว่าคุณจะต้องใช้ API_KEY เพื่อใช้ YouTube API:

  1. สร้างโครงการใหม่ที่นี่: https://console.developers.google.com/project
  2. เปิดใช้งาน "API ข้อมูล YouTube" ภายใต้ "APIs & auth" -> API
  3. สร้างคีย์เซิร์ฟเวอร์ใหม่ภายใต้ "APIs & auth" -> Credentials

2

โค้ดนี้แยกระยะเวลาวิดีโอ YouTube โดยใช้ YouTube API v3 โดยส่งรหัสวิดีโอ มันได้ผลสำหรับฉัน

<?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
?>

คุณสามารถรับคีย์ API ของ YouTube สำหรับโดเมนของคุณได้ที่https://console.developers.google.comและสร้างข้อมูลรับรองสำหรับความต้องการของคุณเอง



1

ระยะเวลาเป็นวินาทีโดยใช้ Python 2.7 และ YouTube API 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

0

Youtube data 3 API, การแปลงสตริงระยะเวลาเป็นวินาทีใน Python

ตัวอย่าง:

Convert_YouTube_duration_to_seconds ('P2DT1S')
172801

Convert_YouTube_duration_to_seconds ('PT2H12M51S')
7971

def convert_YouTube_duration_to_seconds(duration):
   day_time = duration.split('T')
   day_duration = day_time[0].replace('P', '')
   day_list = day_duration.split('D')
   if len(day_list) == 2:
      day = int(day_list[0]) * 60 * 60 * 24
      day_list = day_list[1]
   else:
      day = 0
      day_list = day_list[0]
   hour_list = day_time[1].split('H')
   if len(hour_list) == 2:
      hour = int(hour_list[0]) * 60 * 60
      hour_list = hour_list[1]
   else:
      hour = 0
      hour_list = hour_list[0]
   minute_list = hour_list.split('M')
   if len(minute_list) == 2:
      minute = int(minute_list[0]) * 60
      minute_list = minute_list[1]
   else:
      minute = 0
      minute_list = minute_list[0]
   second_list = minute_list.split('S')
   if len(second_list) == 2:
      second = int(second_list[0])
   else:
      second = 0
   return day + hour + minute + second
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.