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
-
Anda memerlukan Akun Google untuk mengakses Konsol API Google, meminta kunci API, dan mendaftarkan aplikasi Anda.
-
Buat project di Google Developers Console dan dapatkan kredensial otorisasi agar aplikasi Anda dapat mengirimkan permintaan API.
-
Setelah membuat project, pastikan YouTube Data API adalah salah satu layanan yang didaftarkan untuk digunakan oleh aplikasi Anda:
- Buka Konsol API dan pilih project yang baru saja Anda daftarkan.
- Kunjungi halaman API yang Diaktifkan. Di daftar API, pastikan statusnya AKTIF untuk YouTube Data API v3.
-
Jika aplikasi Anda akan menggunakan metode API mana pun yang mewajibkan otorisasi pengguna, baca panduan autentikasi untuk mempelajari cara menerapkan otorisasi OAuth 2.0.
-
Pilih pustaka klien untuk memudahkan Anda dalam menerapkan API.
-
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:
- Contoh 1 menampilkan resource video yang mencakup empat bagian serta properti
kind
danetag
. - Contoh 2 menampilkan resource video yang menyertakan dua bagian serta properti
kind
danetag
. - Contoh 3 menampilkan resource video yang mencakup dua bagian, tetapi tidak termasuk properti
kind
danetag
. - Contoh 4 menampilkan resource video yang mencakup dua bagian, tetapi tidak mencakup
kind
danetag
serta beberapa properti bertingkat di objeksnippet
resource.
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,contentDetails,statistics,status Description: This example retrieves avideo
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" } } ] }
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics Description: This example modifies thepart
parameter value so that thecontentDetails
andstatus
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" } } ] }
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 thefields
parameter to remove allkind
andetag
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" } } ] }
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 thefields
parameter from example 3 so that in the API response, each video resource'ssnippet
object only includes thechannelId
,title
, andcategoryId
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
danIf-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
kegzip
. - 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)