Mengirim Permintaan Pertama

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

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_id wajib diisi dan mengidentifikasi pemilik konten CMS yang informasinya Anda ambil.
  • Parameter logging_level menentukan tingkat detail logging untuk skrip.
  • Parameter help menyebabkan 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_ID untuk akun Anda di halaman Setelan Akun di akun CMS Anda. Nilai tersebut tercantum sebagai Partner Code di 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 oauth2client mengenali parameter noauth_local_webserver meskipun 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()