Ringkasan YouTube Data API

Pengantar

Dokumen ini ditujukan bagi developer yang ingin menulis aplikasi yang dapat berinteraksi dengan YouTube. Video ini menjelaskan konsep dasar YouTube dan API itu sendiri. API ini juga menyediakan ringkasan tentang berbagai fungsi yang didukung API.

Sebelum memulai

  1. Anda memerlukan Akun Google untuk mengakses Konsol API Google, meminta kunci API, dan mendaftarkan aplikasi Anda.

  2. Buat project di Google Developers Console dan dapatkan kredensial otorisasi agar aplikasi Anda dapat mengirimkan permintaan API.

  3. Setelah membuat project, pastikan YouTube Data API adalah salah satu layanan yang didaftarkan untuk digunakan oleh aplikasi Anda:

    1. Buka Konsol API dan pilih project yang baru saja Anda daftarkan.
    2. Kunjungi halaman API yang Diaktifkan. Di daftar API, pastikan statusnya AKTIF untuk YouTube Data API v3.

  4. Jika aplikasi Anda akan menggunakan metode API mana pun yang mewajibkan otorisasi pengguna, baca panduan autentikasi untuk mempelajari cara menerapkan otorisasi OAuth 2.0.

  5. Pilih pustaka klien untuk memudahkan Anda dalam menerapkan API.

  6. Pahami konsep inti format data JSON (JavaScript Object Notation). JSON adalah format data umum yang tidak bergantung pada bahasa yang memberikan representasi teks sederhana untuk struktur data arbitrer. Untuk informasi selengkapnya, buka json.org.

Resource dan jenis resource

Resource adalah entity data individual dengan ID unik. Tabel di bawah ini menjelaskan berbagai jenis resource yang dapat Anda gunakan untuk berinteraksi menggunakan API.

Resource
activity Berisi informasi tentang tindakan yang dilakukan pengguna tertentu di situs YouTube. Tindakan pengguna yang dilaporkan di feed aktivitas antara lain memberi rating video, membagikan video, menandai video sebagai favorit, dan memposting buletin channel.
channel Berisi informasi tentang satu channel YouTube.
channelBanner Mengidentifikasi URL yang akan digunakan untuk menetapkan gambar yang baru diupload sebagai gambar banner untuk channel.
channelSection Berisi informasi tentang kumpulan video yang telah dipilih untuk diunggulkan oleh channel. Misalnya, suatu bagian dapat menampilkan upload terbaru channel, upload paling populer, atau video dari satu atau beberapa playlist.
guideCategory Mengidentifikasi kategori yang dikaitkan YouTube dengan channel berdasarkan konten atau indikator lainnya, seperti popularitas. Kategori panduan berupaya mengatur channel dengan cara yang memudahkan pengguna YouTube menemukan konten yang mereka cari. Meskipun dapat dikaitkan dengan satu atau beberapa kategori panduan, channel tersebut tidak dijamin berada dalam kategori panduan apa pun.
i18nLanguage Mengidentifikasi bahasa aplikasi yang didukung situs YouTube. Bahasa aplikasi juga dapat disebut sebagai bahasa UI.
i18nRegion Mengidentifikasi area geografis yang dapat dipilih pengguna YouTube sebagai wilayah konten pilihan. Wilayah konten juga dapat disebut sebagai lokalitas konten.
playlist Mewakili satu playlist YouTube. Playlist adalah kumpulan video yang dapat ditonton secara berurutan dan dibagikan kepada pengguna lain.
playlistItem Mengidentifikasi resource, seperti video, yang merupakan bagian dari playlist. Resource playlistItem juga berisi detail yang menjelaskan cara penggunaan resource yang disertakan dalam playlist.
search result Berisi informasi tentang video, channel, atau playlist YouTube yang cocok dengan parameter penelusuran yang ditentukan dalam permintaan API. Meskipun hasil penelusuran mengarah ke sumber daya yang dapat dikenali secara khusus, seperti video, hasil penelusuran tidak memiliki data tetap sendiri.
subscription Berisi informasi tentang subscription pengguna YouTube. Subscription memberi tahu pengguna saat ada video baru yang ditambahkan ke channel, atau saat pengguna lain melakukan salah satu dari beberapa tindakan di YouTube, seperti mengupload video, memberi rating video, atau mengomentari video.
thumbnail Mengidentifikasi gambar thumbnail yang terkait dengan resource.
video Mewakili satu video YouTube.
videoCategory Mengidentifikasi kategori yang telah atau dapat dikaitkan dengan video yang diupload.
watermark Mengidentifikasi gambar yang ditampilkan selama pemutaran video di channel tertentu. Pemilik channel juga dapat menentukan channel target tempat gambar ditautkan, serta detail pengaturan waktu yang menentukan kapan watermark muncul selama pemutaran video dan durasi visibilitasnya.

Perhatikan bahwa dalam banyak kasus, resource berisi referensi ke resource lain. Misalnya, properti snippet.resourceId.videoId resource playlistItem mengidentifikasi resource video yang nantinya berisi informasi lengkap tentang video tersebut. Sebagai contoh lain, hasil penelusuran berisi properti videoId, playlistId, atau channelId yang mengidentifikasi video, playlist, atau resource channel tertentu.

Operasi yang didukung

Tabel berikut menunjukkan metode paling umum yang didukung API. Beberapa resource juga mendukung metode lain yang menjalankan fungsi secara lebih spesifik untuk resource tersebut. Misalnya, metode videos.rate mengaitkan rating pengguna dengan video, dan metode thumbnails.set mengupload gambar thumbnail video ke YouTube dan mengaitkannya dengan video.

Operasi
list Mengambil (GET) daftar yang berisi nol resource atau lebih.
insert Membuat (POST) resource baru.
update Memodifikasi (PUT) resource yang ada untuk mencerminkan data dalam permintaan Anda.
delete Menghapus (DELETE) resource tertentu.

API ini saat ini mendukung metode untuk mencantumkan setiap jenis resource yang didukung, dan juga mendukung operasi tulis untuk banyak resource.

Tabel di bawah ini mengidentifikasi operasi yang didukung untuk berbagai jenis resource. Operasi yang menyisipkan, memperbarui, atau menghapus resource selalu memerlukan otorisasi pengguna. Dalam beberapa kasus, metode list mendukung permintaan yang diizinkan dan tidak sah, dengan permintaan yang tidak sah hanya mengambil data publik, sedangkan permintaan yang diotorisasi juga dapat mengambil informasi tentang atau pribadi untuk pengguna yang saat ini diautentikasi.

Operasi yang Didukung
list insert update delete
activity
caption
channel
channelBanner
channelSection
comment
commentThread
guideCategory
i18nLanguage
i18nRegion
playlist
playlistItem
search result
subscription
thumbnail
video
videoCategory
watermark

Penggunaan kuota

YouTube Data API menggunakan kuota untuk memastikan bahwa developer menggunakan layanan sebagaimana mestinya dan tidak membuat aplikasi yang secara tidak adil mengurangi kualitas layanan atau membatasi akses untuk orang lain. Semua permintaan API, termasuk permintaan yang tidak valid, dikenai setidaknya biaya kuota satu poin. Anda dapat menemukan kuota yang tersedia untuk aplikasi Anda di API Console.

Project yang mengaktifkan YouTube Data API memiliki alokasi kuota default 10.000 unit per hari, jumlah yang cukup untuk sebagian besar pengguna API kami. Kuota default, yang dapat berubah sewaktu-waktu, membantu kami mengoptimalkan alokasi kuota dan menskalakan infrastruktur kami dengan cara yang lebih bermanfaat bagi pengguna API. Anda dapat melihat penggunaan kuota di halaman Quotas di Konsol API.

Catatan: Jika mencapai batas kuota, Anda dapat meminta kuota tambahan dengan menyelesaikan Perpanjangan kuota formulir permintaan untuk Layanan YouTube API.

Menghitung penggunaan kuota

Google menghitung penggunaan kuota Anda dengan menetapkan biaya untuk setiap permintaan. Berbagai jenis memiliki biaya kuota yang berbeda. Contoh:

  • Operasi baca yang mengambil daftar sumber daya - saluran, video, daftar putar - biasanya memerlukan 1 unit.
  • Operasi tulis yang membuat, memperbarui, atau menghapus resource biasanya memerlukan biaya Unit 50.
  • Permintaan penelusuran memerlukan 100 unit.
  • Upload video dikenai biaya 1600 unit.

Tabel Biaya kuota untuk permintaan API menampilkan biaya kuota setiap metode API. Dengan mengingat aturan ini, Anda dapat memperkirakan jumlah permintaan yang dapat dikirim aplikasi Anda per hari tanpa melebihi kuota.

Resource sebagian

API memungkinkan, dan sebenarnya memerlukan, pengambilan resource parsial sehingga aplikasi menghindari transfer, penguraian, dan penyimpanan data yang tidak diperlukan. Pendekatan ini juga memastikan bahwa API menggunakan resource jaringan, CPU, dan memori secara lebih efisien.

API ini mendukung dua parameter permintaan, yang dijelaskan di bagian berikut, yang memungkinkan Anda mengidentifikasi properti resource yang harus disertakan dalam respons API.

  • Parameter part mengidentifikasi kelompok properti yang harus ditampilkan untuk resource.
  • Parameter fields memfilter respons API agar hanya menampilkan properti tertentu dalam bagian resource yang diminta.

Cara menggunakan parameter part

Parameter part adalah parameter wajib untuk setiap permintaan API yang mengambil atau menampilkan resource. Parameter ini mengidentifikasi satu atau beberapa properti resource level teratas (tidak bertingkat) yang harus disertakan dalam respons API. Misalnya, resource video memiliki bagian berikut:

  • snippet
  • contentDetails
  • fileDetails
  • player
  • processingDetails
  • recordingDetails
  • statistics
  • status
  • suggestions
  • topicDetails

Semua bagian ini adalah objek yang berisi properti bertingkat, dan Anda dapat menganggap objek ini sebagai kelompok kolom metadata yang mungkin (atau mungkin tidak) diambil oleh server API. Dengan demikian, parameter part mengharuskan Anda memilih komponen resource yang benar-benar digunakan aplikasi Anda. Persyaratan ini memiliki dua tujuan utama:

  • API tersebut mengurangi latensi dengan mencegah server API menghabiskan waktu untuk mengambil kolom metadata yang tidak digunakan aplikasi Anda.
  • Mengurangi penggunaan bandwidth dengan mengurangi (atau menghilangkan) jumlah data yang tidak diperlukan yang mungkin diambil aplikasi Anda.

Seiring waktu, ketika resource menambahkan lebih banyak bagian, manfaat ini hanya akan meningkat karena aplikasi Anda tidak akan meminta properti baru yang diperkenalkan yang tidak didukung.

Cara menggunakan parameter fields

Parameter fields memfilter respons API, yang hanya berisi bagian resource yang diidentifikasi dalam nilai parameter part, sehingga respons hanya menyertakan kumpulan kolom tertentu. Parameter fields memungkinkan Anda menghapus properti bertingkat dari respons API sehingga semakin mengurangi penggunaan bandwidth. (Parameter part tidak dapat digunakan untuk memfilter properti bertingkat dari respons.)

Aturan berikut menjelaskan sintaksis yang didukung untuk nilai parameter fields, yang secara longgar didasarkan pada sintaksis XPath:

  • Gunakan daftar yang dipisahkan koma (fields=a,b) untuk memilih beberapa kolom.
  • Gunakan tanda bintang (fields=*) sebagai karakter pengganti untuk mengidentifikasi semua kolom.
  • Gunakan tanda kurung (fields=a(b,c)) untuk menentukan grup properti bertingkat yang akan disertakan dalam respons API.
  • Gunakan garis miring (fields=a/b) untuk mengidentifikasi properti bertingkat.

Dalam praktiknya, aturan ini sering kali mengizinkan beberapa parameter value fields yang berbeda untuk mengambil respons API yang sama. Misalnya, jika Anda ingin mengambil ID, judul, dan posisi item playlist untuk setiap item dalam playlist, Anda dapat menggunakan salah satu nilai berikut:

  • fields=items/id,playlistItems/snippet/title,playlistItems/snippet/position
  • fields=items(id,snippet/title,snippet/position)
  • fields=items(id,snippet(title,position))

Catatan: Seperti semua nilai parameter kueri, nilai parameter fields harus dienkode ke URL. Agar lebih mudah dibaca, contoh dalam dokumen ini menghilangkan encoding.

Contoh permintaan sebagian

Contoh di bawah menunjukkan cara menggunakan parameter part dan fields untuk memastikan bahwa respons API hanya menyertakan data yang digunakan aplikasi Anda:

  1. Contoh 1 menampilkan resource video yang mencakup empat bagian serta properti kind dan etag.
  2. Contoh 2 menampilkan resource video yang menyertakan dua bagian serta properti kind dan etag.
  3. Contoh 3 menampilkan resource video yang mencakup dua bagian, tetapi tidak termasuk properti kind dan etag.
  4. Contoh 4 menampilkan resource video yang mencakup dua bagian, tetapi tidak mencakup kind dan etag serta beberapa properti bertingkat di objek snippet resource.
Contoh 1
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,contentDetails,statistics,status
Description: This example retrieves a video resource and identifies several resource parts that should be included in the API response. API response:
{ "kind": "youtube#videoListResponse", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"", "videos": [ { "id": "7lCDEYXw3mM", "kind": "youtube#video", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "contentDetails": { "duration": "PT15M51S", "aspectRatio": "RATIO_16_9" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" }, "status": { "uploadStatus": "STATUS_PROCESSED", "privacyStatus": "PRIVACY_PUBLIC" } } ] }
Contoh 2
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics
Description: This example modifies the part parameter value so that the contentDetails and status properties are not included in the response. API response:
{ "kind": "youtube#videoListResponse", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"", "videos": [ { "id": "7lCDEYXw3mM", "kind": "youtube#video", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
Contoh 3
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics&fields=items(id,snippet,statistics)
Description: This example adds the fields parameter to remove all kind and etag properties from the API response. API response:
{ "videos": [ { "id": "7lCDEYXw3mM", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
Contoh 4
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&fields=items(id,snippet(channelId,title,categoryId),statistics)&part=snippet,statistics
Description: This example modifies the fields parameter from example 3 so that in the API response, each video resource's snippet object only includes the channelId, title, and categoryId properties. API response:
{ "videos": [ { "id": "7lCDEYXw3mM", "snippet": { "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }

Mengoptimalkan performa

Menggunakan ETag

ETags, bagian standar dari protokol HTTP, yang memungkinkan aplikasi merujuk ke versi tertentu dari resource API tertentu. Resource dapat berupa seluruh feed atau item pada feed tersebut. Fungsi ini mendukung kasus penggunaan berikut:

  • Pembuatan cache dan pengambilan kondisional – Aplikasi Anda dapat menyimpan resource API dan ETag-nya dalam cache. Kemudian, ketika aplikasi meminta kembali sumber daya yang disimpan, aplikasi akan menentukan ETag yang terkait dengan sumber daya tersebut. Jika sumber daya telah berubah, API akan mengembalikan sumber daya yang dimodifikasi dan ETag yang terkait dengan versi sumber daya tersebut. Jika resource belum berubah, API akan menampilkan respons HTTP 304 (Not Modified), yang menunjukkan bahwa resource tidak berubah. Aplikasi Anda dapat mengurangi latensi dan penggunaan bandwidth dengan menyalurkan resource yang di-cache melalui cara ini.

    Library klien untuk Google API berbeda dalam dukungan ETag. Misalnya, library klien JavaScript mendukung ETag melalui daftar putih untuk header permintaan yang diizinkan yang mencakup If-Match dan If-None-Match. Daftar putih memungkinkan caching browser normal terjadi sehingga jika ETag sumber daya tidak berubah, sumber daya bisa disajikan dari cache browser. Di sisi lain, klien Obj-C tidak mendukung ETag.

  • Melindungi dari penimpaan perubahan yang tidak disengaja – ETag membantu memastikan bahwa beberapa klien API tidak saling menimpa perubahan secara tidak sengaja. Saat mengupdate atau menghapus resource, aplikasi Anda bisa menetapkan ETag resource. Jika ETag tidak sesuai dengan versi terbaru resource tersebut, permintaan API akan gagal.

Penggunaan ETag di aplikasi Anda memberikan beberapa manfaat:

  • API merespons lebih cepat permintaan untuk resource yang di-cache tetapi tidak berubah, sehingga menghasilkan latensi yang lebih rendah dan penggunaan bandwidth yang lebih rendah.
  • Aplikasi Anda tidak akan menimpa perubahan secara tidak sengaja pada resource yang dibuat dari klien API lain.

Google APIs Client Library for JavaScript mendukung header permintaan HTTP If-Match dan If-None-Match, sehingga ETag dapat berfungsi dalam konteks penyimpanan cache browser normal.

Menggunakan gzip

Anda juga dapat mengurangi bandwidth yang diperlukan untuk setiap respons API dengan mengaktifkan kompresi gzip. Meskipun aplikasi Anda akan memerlukan waktu CPU tambahan untuk membatalkan kompresi respons API, manfaat dari menggunakan lebih sedikit resource jaringan biasanya lebih besar daripada biayanya.

Untuk menerima respons yang dienkode dengan gzip, Anda harus melakukan dua hal:

  • Tetapkan header permintaan HTTP Accept-Encoding ke gzip.
  • Ubah agen pengguna Anda agar berisi string gzip.

Contoh header HTTP di bawah menunjukkan persyaratan tersebut untuk mengaktifkan kompresi gzip:

Accept-Encoding: gzip
User-Agent: my program (gzip)