YouTube API sürüm 3 ile video sürelerini nasıl edinebilirim?


93

YouTube'da arama yapmak için YouTube API v3'ü kullanıyorum.

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

Gördüğünüz gibi, JSON yanıtı video sürelerini içermiyor. Video sürelerini almanın bir yolu var mı?

Tercihen sonuçtaki her öğe için bir API çağırmamak (süreleri almanın tek yolu bu değilse)


24
Tipik Google, gayet iyi çalışan ve onu mahveden bir şeyi alıyor.
Synetech

1
Bu soru neden hem PHP hem de Objective-C ile etiketlendi? Bazı cevaplar da Python kullanır.
Peter Mortensen

Yanıtlar:


128

Arama çağrısını yaptıktan sonra YouTube veri API'sinin video kaynağına çağrı yapmanız gerekecektir. Bir aramaya 50'ye kadar video kimliği koyabilirsiniz, böylece her öğe için onu aramanıza gerek kalmaz.

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

Ayarlamak isteyeceksiniz part=contentDetails, çünkü süre orada.

Örneğin, aşağıdaki çağrı:

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

Bu sonucu verir:

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

Saat, ISO 8601 dizesi olarak biçimlendirilir. PT, Süre Süresi anlamına gelir, 4M 4 dakika ve 13S 13 saniyedir.


4
Bu saat biçimi nedir? Objective C'nin desteklediği bir standart mı?
Rukshan Marapana

3
Geç yorum, ancak arama yanıtına sürelerin dahil edilmesini isteyen bu bilete yıldız vermek ve göz kulak olmak isteyebilirsiniz: code.google.com/p/gdata-issues/issues/detail?id=4294
Andrew Nguyen

3
@Andrew - ISO 8601 olarak biçimlendirilmiştir. Oldukça iğrenç göründüğünü kabul ediyorum, ancak en azından herhangi bir dile kolayca dönüştürülebilir - sadece ISO 8601 dönüştürücüsüne bakın.
Matt Koskela

2
Python için süreyi dönüştürmek için harika bir kitaplık aniso8601'dir . datetime.timedeltaTemelde her şeye biçimlendirilebilen a döndürür .
arnaudoff

4
YouTube'da haftalar süren videolar nelerdir?!?
Matt Koskela 01

14

Anladım!

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

Orada YouTube API sürüm 3 için zamanı döndürür (anahtar bu arada yapılır;). $vIdVideoları gösterdiğim kanaldan dönen videolar listesinden çıktığımı kullandım ...

İşe yarıyor. Google'ın süreyi GERÇEKTEN parçaya eklemesi gerekir, böylece hepsini iki yerine tek bir aramayla alabilirsiniz ... bu onların 'wontfix' listesinde.


Evet ve süreyi saniye gibi okunabilir biçimlerde ekleyin.
andreszs

2
Ne bekliyorsunuz? Google, hiçbir şeyi doğru şekilde yapmıyorlar.
Synetech

Saniye cinsinden süre almanın bir yolunu buldunuz mu, PT **** formatından saniyeye dönüştürmek ahrd gibi görünüyor.
Loenix

Bir kapanış eksik değil mi }?
Peter Mortensen

7

YouTube API v3'ü kullanarak YouTube video süresini almak için aşağıdaki sınıfı yazdım (aynı zamanda küçük resimler de döndürür):

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'sini kullanmak için API_KEY'e ihtiyacınız olacağını lütfen unutmayın:

  1. Burada yeni bir proje oluşturun: https://console.developers.google.com/project
  2. "API'ler ve kimlik doğrulama" -> API'ler altında "YouTube Veri API'sını" etkinleştirin
  3. "API'ler ve kimlik doğrulama" -> Kimlik bilgileri altında yeni bir sunucu anahtarı oluşturun

2

Bu kod, bir video kimliği ileterek YouTube API v3'ü kullanarak YouTube video süresini çıkarır. Benim için çalıştı.

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

Alanınızın kendi YouTube API anahtarını https://console.developers.google.com adresinden alabilir ve kendi gereksiniminiz için kimlik bilgileri oluşturabilirsiniz.



1

Python 2.7 ve YouTube API v3 kullanılarak saniye cinsinden süre:

    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 verileri 3 API, süre dizesi Python'da saniye dönüşümü

Misal:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.