İlk İstek Gönderme

Not: YouTube Content ID API, YouTube içerik iş ortakları tarafından kullanılmak üzere tasarlanmıştır. Tüm geliştiriciler veya YouTube kullanıcıları tarafından erişilemez. YouTube Content ID API'yi Google API Konsolu'nda listelenen hizmetler arasında görmüyorsanız YouTube İş Ortağı Programı hakkında daha fazla bilgi edinmek için YouTube Yardım Merkezi'ne göz atın.

Bu adım adım açıklamalı eğitimde, ContentOwnersService'e bağlanan ve belirli bir içerik sahibiyle ilgili bilgileri alan bir komut dosyası oluşturma işlemi açıklanmaktadır. Eğiticinin sonunda eksiksiz bir kod örneği verilmiştir. Bu kod Python'da yazılmış olsa da diğer popüler programlama dilleri için istemci kitaplıkları da mevcuttur.

Şartlar

API istekleri göndermek için komut dosyası oluşturma

Aşağıdaki adımlarda, YouTube Content ID API isteği göndermek için bir komut dosyası oluşturma işlemi açıklanmaktadır:

1. adım: Temel komut dosyasını oluşturun

Aşağıdaki komut dosyası aşağıdaki komut satırı parametrelerini kabul eder ve global FLAGS değişkeninde değerler belirler:

  • content_owner_id parametresi gereklidir ve hakkında bilgi aldığınız CMS içerik sahibini tanımlar.
  • logging_level parametresi, komut dosyasının günlük kaydı ayrıntı düzeyini belirtir.
  • help parametresi, komut dosyasının anladığı parametrelerin listesini oluşturmasına neden olur.
#!/usr/bin/python2.6
# -*- coding: utf-8 -*-

import gflags
import logging
import sys
import os

from datetime import *

# Define flags. The gflags module makes it easy to define command-line params
# for an application. Run this program with the '--help' argument to see all
# of the flags that it understands.
FLAGS = gflags.FLAGS
gflags.DEFINE_string('content_owner_id', None, ('Required flag. '
     'Identifies the content owner whose details are printed out.'))
gflags.MarkFlagAsRequired('content_owner_id')
gflags.DEFINE_enum('logging_level', 'ERROR',
    ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
    'Set the level of logging detail.')


def main(argv):
  # Let the gflags module process the command-line arguments
  try:
    argv = FLAGS(argv)
  except gflags.FlagsError, e:
    print '%s\nUsage: %s ARGS\n%s' % (e, argv[0], FLAGS)
    sys.exit(1)

  # Set the logging according to the command-line flag
  logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))

if __name__ == '__main__':
  main(sys.argv)

2. Adım: Kullanıcı kimlik doğrulamasını ve yetkilendirmesini etkinleştirin

Bu adımda, komut dosyasına OAuth 2.0 yetkilendirmesi ekleyeceğiz. Bu işlem, komut dosyasını çalıştıran kullanıcının, komut dosyasını kullanıcının hesabıyla ilişkilendirilen API istekleri gerçekleştirmesini sağlayacak şekilde yetkilendirmesini sağlar.

2a. adım: client_secrets.json dosyası oluşturun

YouTube Content ID API, kimlik doğrulama işlemi gerçekleştirmek için API Konsolu'ndaki bilgileri içeren bir client_secrets.json dosyası gerektirir. Ayrıca uygulamanızı kaydetmeniz gerekir. Kimlik doğrulamanın işleyiş şekli hakkında daha kapsamlı bir açıklama için kimlik doğrulama kılavuzuna göz atın.

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

Adım 2b: Komut dosyanıza kimlik doğrulama kodu ekleyin

Kullanıcı kimlik doğrulamasını ve yetkilendirmesini etkinleştirmek için aşağıdaki import ifadelerini eklemeniz gerekir:

from oauth2client.file import Storage
from oauth2client.client import flow_from_clientsecrets
from oauth2client.tools import run

Ardından, 2a adımında yapılandırılan istemci gizli anahtarlarını kullanarak bir FLOW nesnesi oluşturacağız. Kullanıcı, uygulamamıza kullanıcı adına API istekleri gönderme yetkisi verirse elde edilen kimlik bilgileri daha sonra kullanılmak üzere bir Storage nesnesinde saklanır. Kimlik bilgilerinin süresi dolarsa kullanıcının uygulamamızı yeniden yetkilendirmesi gerekir.

main işlevinin sonuna aşağıdaki kodu ekleyin:

  # 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, storage)

2c Adımı: httplib2 nesnesini oluşturun ve kimlik bilgileri ekleyin

Kullanıcı komut dosyamızı yetkilendirdikten sonra, API isteklerini işleyen bir httplib2.Http nesnesi oluşturur ve yetkilendirme kimlik bilgilerini bu nesneye ekleriz.

Aşağıdaki içe aktarma deyimini ekleyin:

  import httplib2

Ardından main işlevinin sonuna şu kodu ekleyin:

  # Create httplib2.Http object to handle HTTP requests and
  # attach auth credentials.
  http = httplib2.Http()
  http = credentials.authorize(http)

3. Adım: Hizmet alın

Python istemci kitaplığının build işlevi, API ile etkileşim kurabilecek bir kaynak oluşturur. Kullanıcı uygulamamıza yetki verdikten sonra, ContentOwnerService ile etkileşime geçme yöntemleri sağlayan service nesnesini oluştururuz.

Aşağıdaki içe aktarma beyanını ekleyin:

from apiclient.discovery import build

Ayrıca, bu kodu main işlevinin sonuna ekleyin:

  service = build("youtubePartner", "v1", http=http, static_discovery=False)
  contentOwnersService = service.contentOwners()

4. Adım: API isteği yürütme

Şimdi bir hizmet isteği oluşturup gerçekleştireceğiz. Aşağıdaki kod, belirtilen içerik sahibiyle ilgili bilgileri alan bir contentOwnersService.get() isteği oluşturur ve yürütür.

Bu kodu main işlevinin sonuna ekleyin:

  # Create and execute get request.
  request = contentOwnersService.get(contentOwnerId=FLAGS.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'])

Başvuruyu tamamlama

Bu bölümde, komut dosyasındaki bazı lisanslama bilgileri ve ek yorumlarla birlikte uygulamanın tamamı gösterilir. Programı yürütmenin iki yolu vardır:

  • Bu komut, gerekirse kimlik doğrulama yapabileceğiniz ve uygulamaya API isteği gönderme yetkisi vereceğiniz bir tarayıcı penceresi açar. Uygulamayı yetkilendirirseniz kimlik bilgileri otomatik olarak komut dosyasına geri aktarılır.

    python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID.

    Not: Hesabınızın CONTENT_OWNER_ID değerini, İYS hesabınızdaki Hesap Ayarları sayfasında bulabilirsiniz. Değer, ilgili sayfadaki hesap bilgileri bölümünde Partner Code olarak listelenir.

  • Bu komut, tarayıcıda açabileceğiniz bir URL üretir ve ayrıca yetkilendirme kodu girmenizi ister. URL'ye gittiğinizde bu sayfa, uygulamayı sizin adınıza API istekleri göndermesi için yetkilendirmenize olanak tanır. Bu yetkilendirmeyi verirseniz sayfada, yetkilendirme akışını tamamlamak için istemde girmeniz gereken yetkilendirme kodu gösterilir.

    python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID --noauth_local_webserver.

    Not: oauth2clientmodülü, komut dosyasında bahsedilmemesine rağmen noauth_local_webserver parametresini tanır.

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/python2.6
# -*- coding: utf-8 -*-
#
# 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 Content ID API.

Command-line application that retrieves the information
about given content owner.

Usage:
  $ python yt_partner_api.py --content_owner_id=[contentOwnerId]
  $ python 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:

  $ python yt_partner_api.py --help

To get detailed log output run:

  $ python yt_partner_api.py --logging_level=DEBUG \
    --content_owner_id=[contentOwnerId]
"""

import gflags
import httplib2
import logging
import sys
import os

from datetime import *
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import flow_from_clientsecrets
from oauth2client.tools import run

# Define flags. The gflags module makes it easy to define command-line options
# for an application. Run this program with the '--help' argument to see all
# of the flags that it understands.
FLAGS = gflags.FLAGS
gflags.DEFINE_string('content_owner_id', None, ('Required flag. '
     'Identifies the content owner id whose details are printed out.'))
gflags.MarkFlagAsRequired('content_owner_id')
gflags.DEFINE_enum('logging_level', 'ERROR',
    ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
    'Set the level of logging detail.')

  
def main(argv):
  # Let the gflags module process the command-line arguments
  try:
    argv = FLAGS(argv)
  except gflags.FlagsError, e:
    print '%s\nUsage: %s ARGS\n%s' % (e, argv[0], FLAGS)
    sys.exit(1)
  
  # Set the logging according to the command-line flag
  logging.getLogger().setLevel(getattr(logging, FLAGS.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, storage)

  http = httplib2.Http()
  http = credentials.authorize(http)

  service = build("youtubePartner", "v1", http=http)
  contentOwnersService = service.contentOwners()

  # Create and execute get request.
  request = contentOwnersService.get(contentOwnerId=FLAGS.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(sys.argv)