Catatan: YouTube Data API ditujukan untuk digunakan oleh partner konten YouTube dan tidak dapat diakses oleh semua developer atau semua pengguna YouTube. Akses memerlukan akun Pengelola Konten YouTube. Jika Anda memiliki akun Pengelola Konten YouTube, tetapi tidak melihat YouTube Data API sebagai salah satu layanan yang tercantum di konsol Google Cloud, hubungi partner manager atau dukungan partner yang ditetapkan untuk Anda.
Tutorial langkah demi langkah ini menjelaskan cara membuat skrip yang terhubung ke ContentOwnersService dan mengambil informasi tentang pemilik konten tertentu. Contoh kode lengkap disediakan di akhir tutorial. Meskipun kode ini ditulis dalam Python, library klien untuk bahasa pemrograman populer lainnya juga tersedia.
Persyaratan
- Python 3.7 atau yang lebih tinggi
- google-api-python-client
Membuat skrip untuk mengirim permintaan API
Langkah-langkah berikut menjelaskan cara membuat skrip untuk mengirim permintaan YouTube Data API:
Langkah 1: Buat skrip dasar
Skrip berikut menerima argumen command line berikut:
- Parameter
content_owner_idwajib diisi dan mengidentifikasi pemilik konten CMS yang informasinya Anda ambil. - Parameter
logging_levelmenentukan tingkat detail logging untuk skrip. - Parameter
helpmenyebabkan skrip menampilkan daftar parameter yang dipahaminya.
#!/usr/bin/env python3 import argparse import logging import sys # Define command-line arguments using argparse. Run this program with # the '--help' argument to see all parameters that it understands. parser = argparse.ArgumentParser( description='Simple command-line sample for YouTube Data API.') parser.add_argument( '--content_owner_id', required=True, help='Required. Identifies the content owner whose details are printed out.') parser.add_argument( '--logging_level', default='ERROR', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], help='Set the level of logging detail.') def main(): args = parser.parse_args() # Set the logging according to the command-line flag logging.getLogger().setLevel(getattr(logging, args.logging_level)) if __name__ == '__main__': main()
Langkah 2: Aktifkan autentikasi dan otorisasi pengguna
Pada langkah ini, kita akan menggabungkan otorisasi OAuth 2.0 ke dalam skrip. Hal ini memungkinkan pengguna yang menjalankan skrip mengizinkan skrip untuk melakukan permintaan API yang dikaitkan dengan akun pengguna.
Langkah 2a: Buat file client_secrets.json
YouTube Data API memerlukan file client_secrets.json, yang berisi informasi dari konsol Cloud, untuk melakukan autentikasi. Anda juga perlu mendaftarkan aplikasi Anda. Untuk penjelasan yang lebih lengkap tentang cara kerja autentikasi, lihat panduan autentikasi.
{ "web": { "client_id": "INSERT CLIENT ID HERE", "client_secret": "INSERT CLIENT SECRET HERE", "redirect_uris": [], "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token" } }
Langkah 2b: Tambahkan kode autentikasi ke skrip Anda
Untuk mengaktifkan autentikasi dan otorisasi pengguna, Anda perlu menambahkan pernyataan import berikut:
from datetime import datetime from oauth2client.file import Storage from oauth2client.client import flow_from_clientsecrets from oauth2client.tools import argparser, run_flow
Selanjutnya, kita akan membuat objek FLOW menggunakan rahasia klien yang dikonfigurasi pada langkah 2a. Jika pengguna mengizinkan aplikasi kami untuk mengirimkan permintaan API atas nama pengguna, kredensial yang dihasilkan akan disimpan dalam objek Storage untuk digunakan nanti. Pengguna harus memberikan otorisasi ulang aplikasi kami jika kredensialnya berakhir.
Tambahkan kode berikut ke bagian akhir fungsi main:
# Set up a Flow object to be used if we need to authenticate. FLOW = flow_from_clientsecrets('client_secrets.json', scope='https://www.googleapis.com/auth/youtubepartner', message='error message') # The Storage object stores the credentials. If it doesn't exist, or if # the credentials are invalid or expired, run through the native client flow. storage = Storage('yt_partner_api.dat') credentials = storage.get() if (credentials is None or credentials.invalid or credentials.token_expiry <= datetime.now()): credentials = run_flow(FLOW, storage, args)
Langkah 2c: Buat objek httplib2 dan lampirkan kredensial
Setelah pengguna mengizinkan skrip kita, kita akan membuat objek httplib2.Http, yang menangani permintaan API, dan melampirkan kredensial otorisasi ke objek tersebut.
Tambahkan pernyataan import berikut:
import httplib2
Lalu, tambahkan kode ini ke bagian akhir fungsi main:
# Create httplib2.Http object to handle HTTP requests and # attach auth credentials. http = httplib2.Http() http = credentials.authorize(http)
Langkah 3: Dapatkan layanan
Fungsi build library klien Python membuat resource yang dapat berinteraksi dengan API. Setelah pengguna mengizinkan aplikasi kami, kami membuat objek service, yang menyediakan metode untuk berinteraksi dengan ContentOwnerService.
Tambahkan pernyataan import berikut:
from apiclient.discovery import build
Lalu, tambahkan kode ini di akhir fungsi main:
service = build("youtubePartner", "v1", http=http, static_discovery=False) contentOwnersService = service.contentOwners()
Langkah 4: Jalankan permintaan API
Sekarang, kita akan membuat permintaan layanan dan mengeksekusinya. Kode berikut membuat dan mengeksekusi permintaan contentOwnersService.get(), yang mengambil informasi tentang pemilik konten yang ditentukan.
Tambahkan kode ini di akhir fungsi main:
# Create and execute get request. request = contentOwnersService.get(contentOwnerId=args.content_owner_id) content_owner_doc = request.execute(http) print('Content owner details: id: %s, name: %s, notification email: %s' % ( content_owner_doc['id'], content_owner_doc['displayName'], content_owner_doc['disputeNotificationEmails']))
Selesaikan permohonan
Bagian ini menunjukkan aplikasi lengkap dengan beberapa informasi pemberian lisensi dan komentar tambahan dalam skrip. Ada dua cara untuk menjalankan program:
-
Perintah ini meluncurkan jendela browser yang dapat Anda gunakan untuk mengautentikasi, jika perlu, dan memberi otorisasi aplikasi untuk mengirimkan permintaan API. Jika Anda mengizinkan aplikasi, kredensial akan otomatis diteruskan kembali ke skrip.
python3 yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID
Catatan: Anda dapat menemukan nilai
CONTENT_OWNER_IDuntuk akun Anda di halaman Setelan Akun di akun CMS Anda. Nilai tersebut tercantum sebagaiPartner Codedi bagian informasi akun di halaman tersebut. -
Perintah ini menampilkan URL yang dapat Anda buka di browser dan juga meminta Anda untuk memasukkan kode otorisasi. Saat Anda membuka URL tersebut, halaman itu akan memungkinkan Anda mengizinkan aplikasi untuk mengirimkan permintaan API atas nama Anda. Jika Anda memberikan otorisasi tersebut, halaman akan menampilkan kode otorisasi yang perlu Anda masukkan pada perintah untuk menyelesaikan alur otorisasi.
python3 yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID --noauth_local_webserver
Catatan: Modul
oauth2clientmengenali parameternoauth_local_webservermeskipun parameter tersebut tidak disebutkan dalam skrip.
client_secrets.json
{ "web": { "client_id": "INSERT CLIENT ID HERE", "client_secret": "INSERT CLIENT SECRET HERE", "redirect_uris": [], "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token" } }
yt_partner_api.py
#!/usr/bin/env python3 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Simple command-line sample for YouTube Data API. Command-line application that retrieves the information about given content owner. Usage: $ python3 yt_partner_api.py --content_owner_id=[contentOwnerId] $ python3 yt_partner_api.py --content_owner_id=[contentOwnerId] --noauth_local_webserver You can also get help on all the command-line flags the program understands by running: $ python3 yt_partner_api.py --help To get detailed log output run: $ python3 yt_partner_api.py --logging_level=DEBUG \ --content_owner_id=[contentOwnerId] """ import argparse from datetime import datetime import logging import os import sys from apiclient.discovery import build import httplib2 from oauth2client.client import flow_from_clientsecrets from oauth2client.file import Storage from oauth2client.tools import argparser, run_flow # Define parser. parser = argparse.ArgumentParser( parents=[argparser], description='Simple command-line sample for YouTube Data API.') parser.add_argument( '--content_owner_id', required=True, help='Required. Identifies the content owner id whose details are printed out.') parser.add_argument( '--logging_level', default='ERROR', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], help='Set the level of logging detail.') def main(): args = parser.parse_args() # Set the logging according to the command-line flag logging.getLogger().setLevel(getattr(logging, args.logging_level)) # Set up a Flow object to be used if we need to authenticate. FLOW = flow_from_clientsecrets('client_secrets.json', scope='https://www.googleapis.com/auth/youtubepartner', message='error message') # The Storage object stores the credentials. If the credentials are invalid # or expired and the script isn't working, delete the file specified below # and run the script again. storage = Storage('yt_partner_api.dat') credentials = storage.get() if (credentials is None or credentials.invalid or credentials.token_expiry <= datetime.now()): credentials = run_flow(FLOW, storage, args) http = httplib2.Http() http = credentials.authorize(http) service = build("youtubePartner", "v1", http=http, static_discovery=False) contentOwnersService = service.contentOwners() # Create and execute get request. request = contentOwnersService.get(contentOwnerId=args.content_owner_id) content_owner_doc = request.execute(http) print('Content owner details: id: %s, name: %s, notification email: %s' % ( content_owner_doc['id'], content_owner_doc['displayName'], content_owner_doc['disputeNotificationEmails'])) if __name__ == '__main__': main()