توجه: YouTube Content ID API برای استفاده شرکای محتوای YouTube در نظر گرفته شده است و برای همه توسعه دهندگان یا همه کاربران YouTube قابل دسترسی نیست. اگر API شناسه محتوای YouTube را بهعنوان یکی از سرویسهای فهرست شده در Google API Console نمیبینید، برای کسب اطلاعات بیشتر درباره YouTube Partner Program به مرکز راهنمایی YouTube مراجعه کنید.
این آموزش گام به گام نحوه ساخت یک اسکریپت را توضیح می دهد که به ContentOwnersService
متصل می شود و اطلاعات مربوط به مالک محتوای معین را بازیابی می کند. نمونه کد کامل در انتهای آموزش ارائه شده است. در حالی که این کد در پایتون نوشته شده است، کتابخانه های سرویس گیرنده برای سایر زبان های برنامه نویسی محبوب نیز در دسترس هستند.
الزامات
- پایتون 2.5 یا بالاتر
- google-api-python-client
ساخت یک اسکریپت برای ارسال درخواست های API
مراحل زیر نحوه ساخت یک اسکریپت برای ارسال درخواست API Content ID YouTube را توضیح می دهد.
مرحله 1: اسکریپت اصلی را ایجاد کنید
اسکریپت زیر پارامترهای خط فرمان زیر را می پذیرد و مقادیر را روی متغیر جهانی FLAGS
تنظیم می کند:
- پارامتر
content_owner_id
لازم است و مالک محتوای CMS را که در حال بازیابی اطلاعات در مورد آن هستید، شناسایی می کند. - پارامتر
logging_level
سطح جزئیات ورود به سیستم را برای اسکریپت مشخص می کند. - پارامتر
help
باعث می شود که اسکریپت لیستی از پارامترهایی را که درک می کند به بیرون ارائه دهد.
#!/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: احراز هویت و مجوز کاربر را فعال کنید
در این مرحله، مجوز OAuth 2.0 را در اسکریپت قرار می دهیم. این به کاربر در حال اجرا اسکریپت را قادر میسازد تا به اسکریپت اجازه دهد تا درخواستهای API منتسب به حساب کاربر را انجام دهد.
مرحله 2a: یک فایل client_secrets.json ایجاد کنید
API شناسه محتوای YouTube برای احراز هویت به فایل client_secrets.json
نیاز دارد که حاوی اطلاعاتی از کنسول API است. همچنین باید درخواست خود را ثبت کنید . برای توضیح کامل تر در مورد نحوه عملکرد احراز هویت، راهنمای احراز هویت را ببینید.
{ "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: کد احراز هویت را به اسکریپت خود اضافه کنید
برای فعال کردن احراز هویت و مجوز کاربر، باید عبارات import
زیر را اضافه کنید:
from oauth2client.file import Storage from oauth2client.client import flow_from_clientsecrets from oauth2client.tools import run
در مرحله بعد، یک شی FLOW
با استفاده از رمزهای سرویس گیرنده پیکربندی شده در مرحله 2a ایجاد می کنیم. اگر کاربر به برنامه ما اجازه دهد درخواستهای API را از طرف کاربر ارسال کند، اعتبارنامههای حاصل در یک شی Storage
برای استفاده بعدی ذخیره میشوند. اگر اعتبارنامه منقضی شود، کاربر باید مجدداً مجوز برنامه ما را صادر کند.
کد زیر را به انتهای تابع 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, storage)
مرحله 2c: شی httplib2
ایجاد کنید و اعتبارنامه ها را پیوست کنید
پس از اینکه کاربر اسکریپت ما را تأیید کرد، یک شی httplib2.Http
ایجاد می کنیم که درخواست های API را مدیریت می کند و اعتبار مجوز را به آن شی متصل می کنیم.
عبارت import زیر را اضافه کنید:
import httplib2
و این کد را به انتهای تابع main
اضافه کنید:
# Create httplib2.Http object to handle HTTP requests and # attach auth credentials. http = httplib2.Http() http = credentials.authorize(http)
مرحله 3: دریافت خدمات
تابع build
کتابخانه کلاینت پایتون منبعی را می سازد که می تواند با یک API تعامل داشته باشد. پس از اینکه کاربر برنامه ما را مجاز کرد، شیء service
را ایجاد می کنیم که روش هایی را برای تعامل با ContentOwnerService
ارائه می دهد.
عبارت import زیر را اضافه کنید:
from apiclient.discovery import build
و این کد را در انتهای تابع main
اضافه کنید:
service = build("youtubePartner", "v1", http=http, static_discovery=False) contentOwnersService = service.contentOwners()
مرحله 4: یک درخواست API را اجرا کنید
اکنون یک درخواست سرویس ایجاد می کنیم و آن را اجرا می کنیم. کد زیر یک درخواست contentOwnersService.get()
را ایجاد و اجرا می کند که اطلاعات مربوط به مالک محتوای مشخص شده را بازیابی می کند.
این کد را در انتهای تابع main
اضافه کنید:
# 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'])
برنامه کامل
این بخش برنامه کامل را با برخی از اطلاعات مجوز و نظرات اضافی در اسکریپت نشان می دهد. دو راه برای اجرای برنامه وجود دارد:
این دستور یک پنجره مرورگر راه اندازی می کند که از طریق آن می توانید در صورت لزوم احراز هویت کنید و به برنامه اجازه دهید درخواست های API را ارسال کند. اگر برنامه را مجاز کنید، اعتبارنامه ها به طور خودکار به اسکریپت بازگردانده می شوند.
python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID.
توجه: میتوانید مقدار
CONTENT_OWNER_ID
را برای حساب خود در صفحه تنظیمات حساب در حساب CMS خود پیدا کنید. مقدار به عنوانPartner Code
در بخش اطلاعات حساب در آن صفحه ذکر شده است.این دستور یک URL را خروجی می دهد که می توانید آن را در مرورگر باز کنید و همچنین از شما می خواهد که یک کد مجوز را وارد کنید. وقتی به URL هدایت میشوید، آن صفحه به شما اجازه میدهد تا درخواستهای API را از طرف شما ارسال کند. اگر آن مجوز را اعطا کنید، صفحه کد مجوزی را که باید برای تکمیل جریان مجوز وارد کنید، نمایش میدهد.
python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID --noauth_local_webserver.
توجه: ماژول
oauth2client
پارامترnoauth_local_webserver
را تشخیص می دهد حتی اگر این پارامتر در اسکریپت ذکر نشده باشد.
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)