मुझे YouTube API संस्करण 3 के साथ वीडियो अवधि कैसे प्राप्त होगी?


92

मैं YouTube की खोज करने के लिए YouTube API v3 का उपयोग कर रहा हूं।

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

जैसा कि आप देख सकते हैं, JSON की प्रतिक्रिया में वीडियो अवधि नहीं है। क्या वीडियो अवधि प्राप्त करने का कोई तरीका है?

अधिमानतः परिणाम में प्रत्येक तत्व के लिए फिर से एक एपीआई नहीं बुला रहा है (जब तक कि अवधि प्राप्त करने का एकमात्र तरीका नहीं है)।


24
विशिष्ट Google, कुछ ऐसा ले रहा है जो ठीक काम करता है और इसे बर्बाद कर रहा है।
सिंटेक

1
इस सवाल को PHP और Objective-C दोनों के साथ क्यों टैग किया गया है? कुछ उत्तर पायथन का भी उपयोग करते हैं।
पीटर मोर्टेंसन

जवाबों:


127

खोज कॉल करने के बाद आपको YouTube डेटा API के वीडियो संसाधन पर कॉल करना होगा। आप एक खोज में 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"
     ]
    }
   }
  }
 ]
}

समय को आईएसओ 8601 स्ट्रिंग के रूप में स्वरूपित किया गया है। पीटी समय अवधि के लिए खड़ा है, 4M 4 मिनट है, और 13S 13 सेकंड है।


4
यह समय प्रारूप क्या है? क्या यह एक मानक है जो उद्देश्य सी का समर्थन करता है?
रुक्शण मरपाना

3
देर से टिप्पणी, लेकिन शायद आप इस टिकट पर नज़र रखना चाहते हैं और यह अनुरोध करते हैं कि खोज प्रतिक्रिया में शामिल होने वाले अनुरोधों
एंड्रयू गुयाना

3
@ और - यह आईएसओ 8601 स्वरूपित है। मैं मानता हूं कि यह बहुत ही अत्याचारी दिखता है, लेकिन कम से कम इसे आसानी से किसी भी भाषा में परिवर्तित किया जा सकता है - बस आईएसओ 8601 कनवर्टर देखें।
मैट कोसेला

2
पायथन के लिए, अवधि को परिवर्तित करने के लिए एक महान पुस्तकालय aniso8601 है । यह एक रिटर्न देता है datetime.timedelta, जिसे मूल रूप से कुछ भी करने के लिए स्वरूपित किया जा सकता है।
अरण्डऑफ

4
YouTube पर कौन से वीडियो सप्ताह भर लंबे होते हैं?!?
मैट कोसेला

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 है, वे कुछ भी सही तरीके से नहीं करते हैं।
सिंथेटिक्स

क्या आपको सेकंड में अवधि प्राप्त करने का एक तरीका मिला, यह PT **** प्रारूप से सेकंड में परिवर्तित करने के लिए ahrd प्रतीत होता है।
लीनिक्स

क्या आप एक समापन याद नहीं कर रहे हैं }?
पीटर मोर्टेंसन

7

मैंने YouTube API v3 का उपयोग करके YouTube वीडियो अवधि प्राप्त करने के लिए निम्न वर्ग लिखा है (यह थंबनेल भी देता है):

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

कृपया ध्यान दें कि YouTube API का उपयोग करने के लिए आपको API_KEY की आवश्यकता होगी:

  1. यहां एक नया प्रोजेक्ट बनाएं: https://console.developers.google.com/project
  2. "YouTube डेटा API" को "API और विशेषाधिकार" -> API के अंतर्गत सक्षम करें
  3. "एपीआई और ऑर्टिकल" के तहत एक नई सर्वर कुंजी बनाएं -> क्रेडेंशियल

2

यह कोड YouTube API v3 का उपयोग करके एक वीडियो आईडी पास करके YouTube वीडियो अवधि निकालता है। इसने मेरे लिए काम किया।

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

आप https://console.developers.google.com पर अपने डोमेन की अपनी YouTube API कुंजी प्राप्त कर सकते हैं और अपनी आवश्यकता के लिए क्रेडेंशियल उत्पन्न कर सकते हैं।



1

पायथन 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

यूट्यूब डेटा 3 एपीआई, अवधि स्ट्रिंग से पाइथन में सेकंड रूपांतरण

उदाहरण:

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.