Not: YouTube Data API, YouTube içerik iş ortakları tarafından kullanılmak üzere tasarlanmıştır ve tüm geliştiriciler veya tüm YouTube kullanıcıları tarafından erişilemez. Erişim için YouTube İçerik Yöneticisi hesabı gerekir. YouTube İçerik Yöneticisi hesabınız varsa ancak Google Cloud Console'da listelenen hizmetler arasında YouTube Data API'yi görmüyorsanız atanan iş ortağı yöneticiniz veya iş ortağı desteği ile iletişime geçin.
Bu adım adım açıklamalı eğiticide, ContentOwnersService'a bağlanan ve belirli bir içerik sahibiyle ilgili bilgileri alan bir komut dosyasının nasıl oluşturulacağı açıklanmaktadır. Eğitimin sonunda tam 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
- Python 3.7 veya sonraki sürümler
- google-api-python-client
API istekleri göndermek için komut dosyası oluşturma
Aşağıdaki adımlarda, YouTube Data API isteği göndermek için komut dosyasının nasıl oluşturulacağı açıklanmaktadır:
1. adım: Temel komut dosyasını oluşturun
Aşağıdaki komut dosyası, şu komut satırı bağımsız değişkenlerini kabul eder:
content_owner_idparametresi zorunludur ve hakkında bilgi aldığınız İYS içerik sahibini tanımlar.logging_levelparametresi, komut dosyası için günlük kaydı ayrıntı düzeyini belirtir.helpparametresi, komut dosyasının anladığı parametrelerin listesini vermesine neden olur.
#!/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()
2. adım: Kullanıcı kimlik doğrulamasını ve yetkilendirmeyi etkinleştirin
Bu adımda, OAuth 2.0 yetkilendirmesini komut dosyasına dahil edeceğiz. Bu, komut dosyasını çalıştıran kullanıcının, komut dosyasını kullanıcının hesabıyla ilişkilendirilen API isteklerini gerçekleştirmek üzere yetkilendirmesini sağlar.
Adım 2a: client_secrets.json dosyası oluşturun
YouTube Data API, kimlik doğrulama için Cloud Console'daki bilgileri içeren bir client_secrets.json dosyası gerektirir. Ayrıca uygulamanızı kaydetmeniz gerekir. Kimlik doğrulamanın işleyiş şekliyle ilgili daha ayrıntılı açıklama için kimlik doğrulama kılavuzuna bakı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" } }
2b adımı: Komut dosyanıza kimlik doğrulama kodu ekleyin
Kullanıcı kimlik doğrulamasını ve yetkilendirmeyi etkinleştirmek için aşağıdaki import ifadelerini eklemeniz gerekir:
from datetime import datetime from oauth2client.file import Storage from oauth2client.client import flow_from_clientsecrets from oauth2client.tools import argparser, run_flow
Ardından, 2a adımında yapılandırılan istemci gizli anahtarlarını kullanarak bir FLOW nesnesi oluşturacağız. Kullanıcı, uygulamamızın kendi adına API istekleri göndermesine izin verirse sonuçta 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.
Aşağıdaki kodu main işlevinin sonuna 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(FLOW, storage, args)
Adım 2c: httplib2 nesnesi oluşturun ve kimlik bilgilerini 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 ifadesini ekleyin:
import httplib2
Ayrıca 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, bir API ile etkileşimde bulunabilecek bir kaynak oluşturur. Kullanıcı uygulamamızı yetkilendirdikten sonra, ContentOwnerService ile etkileşim kurma yöntemleri sağlayan service nesnesini oluştururuz.
Aşağıdaki içe aktarma ifadesini ekleyin:
from apiclient.discovery import build
Ayrıca main işlevinin sonuna şu kodu ekleyin:
service = build("youtubePartner", "v1", http=http, static_discovery=False) contentOwnersService = service.contentOwners()
4. adım: API isteği yürütün
Şimdi bir hizmet isteği oluşturup yürüteceğiz. Aşağıdaki kod, belirtilen içerik sahibiyle ilgili bilgileri alan bir contentOwnersService.get() isteği oluşturup yürütür.
Bu kodu main işlevinin sonuna ekleyin:
# 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']))
Başvuruyu tamamlama
Bu bölümde, senaryodaki bazı lisanslama bilgileri ve ek yorumlarla birlikte uygulamanın tamamı gösterilmektedir. Programı çalıştırmanın iki yolu vardır:
-
Bu komut, gerekirse kimliğinizi doğrulayabileceğiniz ve uygulamanın API istekleri göndermesine izin verebileceğiniz bir tarayıcı penceresi başlatır. Uygulamayı yetkilendirirseniz kimlik bilgileri otomatik olarak komut dosyasına geri iletilir.
python3 yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID
Not: Hesabınızın
CONTENT_OWNER_IDdeğerini CMS hesabınızdaki Hesap Ayarları sayfasında bulabilirsiniz. Değer, söz konusu sayfadaki hesap bilgileri bölümündePartner Codeolarak listelenir. -
Bu komut, tarayıcıda açabileceğiniz bir URL çıkışı verir ve sizden yetkilendirme kodu girmenizi ister. URL'ye gittiğinizde, bu sayfa uygulamanın sizin adınıza API istekleri göndermesine izin vermenizi sağlar. Bu yetkilendirmeyi verirseniz sayfada, yetkilendirme akışını tamamlamak için istemde girmeniz gereken yetkilendirme kodu gösterilir.
python3 yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID --noauth_local_webserver
Not:
oauth2clientmodülü, komut dosyasında belirtilmese bilenoauth_local_webserverparametresini 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/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()