מבוא
המסמך הזה מיועד למפתחים שרוצים לכתוב אפליקציות שמתקשרות עם YouTube. הוא כולל הסברים על מושגים בסיסיים ב-YouTube ועל ה-API עצמו. בנוסף, תוכלו לקרוא סקירה כללית של הפונקציות השונות שה-API תומך בהן.
לפני שמתחילים
-
כדי לגשת אל Google API Console, לבקש מפתח API ולרשום את האפליקציה, צריך חשבון Google.
-
יוצרים פרויקט ב-Google Developers Console ומקבלים פרטי אימות כדי שהאפליקציה תוכל לשלוח בקשות API.
-
אחרי שיוצרים את הפרויקט, צריך לוודא ש-YouTube Data API הוא אחד מהשירותים שהאפליקציה רשומה לשימוש בהם:
- נכנסים אל API Console ובוחרים את הפרויקט שרשמתם.
- נכנסים אל הדף Enabled APIs. ברשימת ממשקי ה-API, מוודאים שהסטטוס של YouTube Data API v3 הוא מופעל.
-
אם האפליקציה שלכם תשתמש בשיטות API שדורשות הרשאת משתמש, כדאי לקרוא את מדריך האימות כדי ללמוד איך להטמיע הרשאה של OAuth 2.0.
-
בוחרים ספריית לקוח כדי לפשט את הטמעת ה-API.
-
כדאי להכיר את המושגים הבסיסיים של פורמט הנתונים JSON (JavaScript Object Notation). JSON הוא פורמט נתונים נפוץ בלתי תלוי בשפה, שמספק ייצוג טקסט פשוט של מבני נתונים שרירותיים. למידע נוסף היכנסו לאתר של json.org.
משאבים וסוגי משאבים
משאב הוא ישות נתונים נפרדת עם מזהה ייחודי. בטבלה הבאה מתוארים הסוגים השונים של משאבים שאפשר ליצור איתם אינטראקציה באמצעות ה-API.
| משאבים | |
|---|---|
activity |
מכיל מידע על פעולה שמשתמש מסוים ביצע באתר YouTube. פעולות משתמש שמדווחות בפיד הפעילות כוללות דירוג סרטון, שיתוף סרטון, סימון סרטון כמועדף ופרסום מבזק בערוץ, בין היתר. |
channel |
מכיל מידע על ערוץ YouTube יחיד. |
channelBanner |
מציין את כתובת ה-URL שמשמשת להגדרת תמונה חדשה שהועלתה כתמונת הבאנר של הערוץ. |
channelSection |
הקובץ מכיל מידע על קבוצת סרטונים שהערוץ בחר להציג. לדוגמה, קטע יכול להציג את ההעלאות האחרונות של הערוץ, את ההעלאות הפופולריות ביותר או סרטונים מפלייליסט אחד או יותר. |
guideCategory |
מזהה קטגוריה שמערכת YouTube משייכת לערוצים על סמך התוכן שלהם או אינדיקטורים אחרים, כמו פופולריות. המטרה של קטגוריות המדריך היא לארגן את הערוצים בצורה שתקל על משתמשי YouTube למצוא את התוכן שהם מחפשים. יכול להיות שערוצים ישויכו לקטגוריה אחת או יותר במדריך, אבל אין ערובה לכך שהם ישויכו לקטגוריה כלשהי במדריך. |
i18nLanguage |
מזהה שפה של אפליקציה שאתר YouTube תומך בה. שפת האפליקציה נקראת גם שפת ממשק המשתמש. |
i18nRegion |
מזהה אזור גיאוגרפי שמשתמש ב-YouTube יכול לבחור כאזור המועדף לצפייה בתוכן. אפשר גם לקרוא לאזור התוכן 'לוקאל תוכן'. |
playlist |
מייצג פלייליסט יחיד ב-YouTube. פלייליסט הוא אוסף של סרטונים שאפשר לצפות בהם ברצף ולשתף עם משתמשים אחרים. |
playlistItem |
מזהה משאב, כמו סרטון, שכלול בפלייליסט. בנוסף, המשאב playlistItem מכיל פרטים שמסבירים איך המשאב הכלול משמש בפלייליסט. |
search result |
מכיל מידע על סרטון, ערוץ או פלייליסט ב-YouTube שתואמים לפרמטרים של החיפוש שצוינו בבקשת API. תוצאת חיפוש מפנה למשאב שאפשר לזהות אותו באופן ייחודי, כמו סרטון, אבל אין לה נתונים משלה שקיימים לאורך זמן. |
subscription |
מכיל מידע על מינוי של משתמש ב-YouTube. מינוי מאפשר למשתמש לקבל התראה כשסרטונים חדשים מתווספים לערוץ או כשמשתמש אחר מבצע אחת מכמה פעולות ב-YouTube, כמו העלאת סרטון, דירוג סרטון או הוספת תגובה לסרטון. |
thumbnail |
מזהה תמונות ממוזערות שמשויכות למקור מידע. |
video |
מייצג סרטון יחיד ב-YouTube. |
videoCategory |
מזהה קטגוריה ששויכה לסרטונים שהועלו או שאפשר לשייך לה סרטונים שהועלו. |
watermark |
מזהה תמונה שמוצגת במהלך הפעלת סרטונים בערוץ מסוים. בעל הערוץ יכול גם לציין ערוץ יעד שאליו התמונה מקושרת, ופרטי תזמון שקובעים מתי סימן המים יופיע במהלך הפעלת הסרטונים וכמה זמן הוא יהיה גלוי. |
שימו לב שבמקרים רבים, משאב מכיל הפניות למשאבים אחרים. לדוגמה, מאפיין snippet.resourceId.videoId של משאב playlistItem מזהה משאב סרטון, שמכיל בתורו מידע מלא על הסרטון. דוגמה נוספת: תוצאת חיפוש מכילה נכס מסוג videoId, playlistId או channelId שמזהה משאב מסוים של סרטון, פלייליסט או ערוץ.
פעולות נתמכות
בטבלה הבאה מפורטות השיטות הנפוצות ביותר שה-API תומך בהן. חלק מהמשאבים תומכים גם בשיטות אחרות שמבצעות פונקציות ספציפיות יותר למשאבים האלה. לדוגמה, הפונקציה videos.rate משייכת דירוג משתמש לסרטון, והפונקציה thumbnails.set מעלה תמונה ממוזערת של סרטון ל-YouTube ומשייכת אותה לסרטון.
| תפעול | |
|---|---|
list |
מאחזר (GET) רשימה של אפס משאבים או יותר. |
insert |
יוצר (POST) משאב חדש. |
update |
שינוי (PUT) של משאב קיים כך שישקף את הנתונים בבקשה. |
delete |
מסירה (DELETE) משאב ספציפי. |
בשלב הזה ה-API תומך ב-methods לרישום כל אחד מסוגי המשאבים הנתמכים, והוא תומך גם בפעולות כתיבה עבור משאבים רבים.
בטבלה הבאה מפורטות הפעולות שנתמכות עבור סוגים שונים של משאבים. פעולות שמוסיפות, מעדכנות או מוחקות משאבים תמיד מחייבות הרשאת משתמש. במקרים מסוימים, list שיטות תומכות גם בבקשות מורשות וגם בבקשות לא מורשות. בבקשות לא מורשות מתקבלים רק נתונים ציבוריים, ואילו בבקשות מורשות אפשר לקבל גם מידע על המשתמש שאומת כרגע או מידע פרטי שלו.
| פעולות נתמכות | ||||
|---|---|---|---|---|
| list | insert | update | delete | |
activity |
||||
caption |
||||
channel |
||||
channelBanner |
||||
channelSection |
||||
comment |
||||
commentThread |
||||
guideCategory |
||||
i18nLanguage |
||||
i18nRegion |
||||
playlist |
||||
playlistItem |
||||
search result |
||||
subscription |
||||
thumbnail |
||||
video |
||||
videoCategory |
||||
watermark |
||||
ניצול המכסה
ה-YouTube Data API משתמש במכסת נתונים כדי לוודא שהמפתחים משתמשים בשירות בהתאם לייעוד שלו, ולא יוצרים אפליקציות שמפחיתות באופן לא הוגן את איכות השירות או מגבילות את הגישה למשתמשים אחרים. כל בקשות ה-API, כולל בקשות לא חוקיות, כרוכות בעלות של נקודת מכסה אחת לפחות. אפשר לראות את המכסה שזמינה לאפליקציה בAPI Console.
בפרויקטים שמופעל בהם YouTube Data API,הקצאת המכסה היא 10, 000 יחידות ביום כברירת מחדל. הכמות הזו מספיקה לרוב המוחלט של משתמשי ה-API שלנו. מכסת ברירת המחדל, שעשויה להשתנות, עוזרת לנו לבצע אופטימיזציה של הקצאות המכסות ולהרחיב את התשתית שלנו באופן משמעותי יותר עבור משתמשי ה-API. בדף Quotas ב-API Console אפשר לראות את השימוש במכסה.
הערה: אם תגיעו למגבלת המכסה, תוכלו לבקש מכסה נוספת באמצעות טופס הבקשה להגדלת המכסה לשירותי YouTube API.
חישוב ניצול המכסה
Google מחשבת את השימוש במכסה על ידי הקצאת עלות לכל בקשה. לסוגים שונים של פעולות יש עלויות שונות של מכסות. לדוגמה:
- פעולת קריאה שמחלצת רשימה של משאבים – ערוצים, סרטונים, פלייליסטים – בדרך כלל עולה יחידה אחת.
- פעולת כתיבה שיוצרת, מעדכנת או מוחקת משאב בדרך כלל עולה
50יחידות. - בקשת חיפוש עולה
100יחידות. - העלאת סרטון עולה
100יחידות.
בטבלה Quota costs for API requests מוצגת עלות המכסה של כל שיטת API. בהתאם לכללים האלה, תוכלו להעריך את מספר הבקשות שהאפליקציה שלכם יכולה לשלוח ביום בלי לחרוג מהמכסה.
משאבים חלקיים
ה-API מאפשר, ואפילו מחייב, אחזור של משאבים חלקיים כדי שאפליקציות לא יעבירו, ינתחו ויאחסנו נתונים לא נחוצים. הגישה הזו גם מבטיחה שה-API ישתמש במשאבי הרשת, CPU והזיכרון בצורה יעילה יותר.
ה-API תומך בשני פרמטרים של בקשות, שמפורטים בקטעים הבאים, שמאפשרים לכם לזהות את מאפייני המשאב שצריכים להיכלל בתשובות של ה-API.
- הפרמטר
partמזהה קבוצות של מאפיינים שצריך להחזיר עבור משאב. - הפרמטר
fieldsמסנן את התשובה של ה-API כדי להחזיר רק מאפיינים ספציפיים בחלקים של המשאב המבוקש.
איך משתמשים בפרמטר part
הפרמטר part הוא פרמטר חובה לכל בקשת API שמקבלת או מחזירה משאב. הפרמטר מזהה מאפיין משאב ברמה העליונה (לא מקונן) אחד או יותר שצריך לכלול בתגובת API. לדוגמה, משאב video כולל את החלקים הבאים:
snippetcontentDetailsfileDetailsplayerprocessingDetailsrecordingDetailsstatisticsstatussuggestionstopicDetails
כל החלקים האלה הם אובייקטים שמכילים מאפיינים מוטמעים, ואפשר לחשוב על האובייקטים האלה כעל קבוצות של שדות מטא-נתונים ששרת ה-API עשוי (או לא עשוי) לאחזר. לכן, בפרמטר part צריך לבחור את רכיבי המשאבים שהאפליקציה שלכם משתמשת בהם בפועל. הדרישה הזו נועדה להשיג שתי מטרות עיקריות:
- היא מצמצמת את זמן האחזור בכך שהיא מונעת משרת ה-API לבזבז זמן על אחזור שדות מטא-נתונים שהאפליקציה שלכם לא משתמשת בהם.
- הוא מצמצם את השימוש ברוחב הפס על ידי הפחתה (או ביטול) של כמות הנתונים המיותרים שהאפליקציה עשויה לאחזר.
עם הזמן, ככל שיוספו עוד חלקים למשאבים, היתרונות האלה רק יגדלו, כי האפליקציה לא תבקש מאפיינים חדשים שהיא לא תומכת בהם.
איך משתמשים בפרמטר fields
הפרמטר fields מסנן את התגובה של ה-API, שמכילה רק את חלקי המשאב שצוינו בערך של הפרמטר part, כך שהתגובה כוללת רק קבוצה ספציפית של שדות. הפרמטר fields מאפשר להסיר מאפיינים מקוננים מתגובת API וכך להקטין עוד יותר את השימוש ברוחב הפס. (אי אפשר להשתמש בפרמטר part כדי לסנן נכסים מוטמעים מתשובה).
הכללים הבאים מסבירים את התחביר הנתמך של ערך הפרמטר fields, שמבוסס באופן חלקי על התחביר של XPath:
- כדי לבחור כמה שדות, משתמשים ברשימה מופרדת בפסיקים (
fields=a,b). - משתמשים בכוכבית (
fields=*) כתו כללי לחיפוש כדי לזהות את כל השדות. - משתמשים בסוגריים (
fields=a(b,c)) כדי לציין קבוצה של מאפיינים מוטמעים שייכללו בתגובת ה-API. - כדי לזהות מאפיין מקונן, משתמשים בלוכסן (
fields=a/b).
בפועל, הכללים האלה מאפשרים לעיתים קרובות להשתמש בכמה ערכים שונים של פרמטר fields כדי לאחזר את אותה תגובת API. לדוגמה, אם רוצים לאחזר את המזהה, השם והמיקום של כל פריט בפלייליסט, אפשר להשתמש בכל אחד מהערכים הבאים:
fields=items/id,playlistItems/snippet/title,playlistItems/snippet/positionfields=items(id,snippet/title,snippet/position)fields=items(id,snippet(title,position))
הערה: כמו כל ערכי הפרמטרים של השאילתה, ערך הפרמטר fields חייב להיות מקודד בכתובת ה-URL. כדי שהדוגמאות במסמך הזה יהיו קלות יותר לקריאה, השמטנו את הקידוד.
דוגמאות לבקשות חלקיות
בדוגמאות הבאות מוצגות דרכים להשתמש בפרמטרים part ו-fields כדי לוודא שהתגובות של ה-API כוללות רק את הנתונים שהאפליקציה שלכם משתמשת בהם:
- בדוגמה 1 מוחזר משאב סרטון שכולל ארבעה חלקים וגם את המאפיינים
kindו-etag. - בדוגמה 2 מוחזר משאב סרטון שכולל שני חלקים וגם את המאפיינים
kindו-etag. - בדוגמה 3 מוחזר משאב מסוג video שכולל שני חלקים אבל לא כולל את המאפיינים
kindו-etag. - בדוגמה 4 מוחזר משאב של סרטון שכולל שני חלקים, אבל לא כולל את
kindואתetag, וגם לא כמה מאפיינים מוטמעים באובייקטsnippetשל המשאב.
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,contentDetails,statistics,status Description: This example retrieves avideoresource and identifies several resource parts that should be included in the API response. API response:{ "kind": "youtube#videoListResponse", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"", "videos": [ { "id": "7lCDEYXw3mM", "kind": "youtube#video", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "contentDetails": { "duration": "PT15M51S", "aspectRatio": "RATIO_16_9" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" }, "status": { "uploadStatus": "STATUS_PROCESSED", "privacyStatus": "PRIVACY_PUBLIC" } } ] }
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics Description: This example modifies thepartparameter value so that thecontentDetailsandstatusproperties are not included in the response. API response:{ "kind": "youtube#videoListResponse", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"", "videos": [ { "id": "7lCDEYXw3mM", "kind": "youtube#video", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics&fields=items(id,snippet,statistics) Description: This example adds thefieldsparameter to remove allkindandetagproperties from the API response. API response:{ "videos": [ { "id": "7lCDEYXw3mM", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&fields=items(id,snippet(channelId,title,categoryId),statistics)&part=snippet,statistics Description: This example modifies thefieldsparameter from example 3 so that in the API response, each video resource'ssnippetobject only includes thechannelId,title, andcategoryIdproperties. API response:{ "videos": [ { "id": "7lCDEYXw3mM", "snippet": { "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
אופטימיזציה של הביצועים
שימוש ב-ETags
ETags, חלק סטנדרטי מפרוטוקול HTTP, מאפשר לאפליקציות להפנות לגרסה ספציפית של משאב API מסוים. המשאב יכול להיות פיד שלם או פריט בפיד. הפונקציונליות הזו תומכת בתרחישי השימוש הבאים:
-
שמירה במטמון ואחזור מותנה – האפליקציה יכולה לשמור במטמון משאבי API ותגי ETags שלהם. לאחר מכן, כשהאפליקציה שלכם מבקשת שוב משאב מאוחסן, היא מציינת את תג ה-ETag שמשויך למשאב הזה. אם המשאב השתנה, ממשק ה-API מחזיר את המשאב ששונה ואת ה-ETag שמשויך לגרסה הזו של המשאב. אם המשאב לא השתנה, ה-API מחזיר תגובת HTTP 304 (
Not Modified), שמציינת שהמשאב לא השתנה. האפליקציה יכולה להקטין את זמן האחזור ואת השימוש ברוחב הפס על ידי הצגת משאבים ששמורים במטמון באופן הזה.יש הבדלים בין ספריות הלקוח של Google APIs מבחינת התמיכה שלהן ב-ETags. לדוגמה, ספריית הלקוח של JavaScript תומכת ב-ETags דרך רשימת היתרים של כותרות בקשה מותרות, שכוללת את
If-Matchו-If-None-Match. הרשימה הלבנה מאפשרת שמירה רגילה במטמון של הדפדפן, כך שאם ה-ETag של משאב לא השתנה, אפשר להציג את המשאב מהמטמון של הדפדפן. לעומת זאת, לקוח Obj-C לא תומך ב-ETags. -
הגנה מפני החלפה לא מכוונת של שינויים – תגי ETag עוזרים לוודא שכמה לקוחות API לא יחליפו בטעות את השינויים אחד של השני. כשמעדכנים או מוחקים משאב, האפליקציה יכולה לציין את ה-ETag של המשאב. אם ה-ETag לא תואם לגרסה העדכנית ביותר של המשאב, בקשת ה-API תיכשל.
יש כמה יתרונות לשימוש ב-ETags באפליקציה:
- ה-API מגיב מהר יותר לבקשות למשאבים שנשמרו במטמון אבל לא השתנו, וכך זמן האחזור קצר יותר והשימוש ברוחב הפס נמוך יותר.
- האפליקציה לא תשכתב בטעות שינויים במשאב שבוצעו על ידי לקוח API אחר.
Google APIs Client Library for JavaScript תומך בכותרות של בקשות HTTP מסוג If-Match ו-If-None-Match, וכך מאפשר ל-ETags לפעול בהקשר של שמירת נתונים במטמון של דפדפן רגיל.
שימוש ב-gzip
אפשר גם לצמצם את רוחב הפס שנדרש לכל תגובה של API על ידי הפעלת דחיסת נתונים מסוג gzip. האפליקציה תצטרך זמן CPU נוסף כדי לבטל את הדחיסה של התגובות מ-API, אבל בדרך כלל היתרון של צריכת פחות משאבי רשת עולה על העלות הזו.
כדי לקבל תגובה עם קידוד gzip, צריך לבצע שני דברים:
- מגדירים את כותרת בקשת ה-HTTP
Accept-Encodingלערךgzip. - משנים את סוכן המשתמש כך שיכיל את המחרוזת
gzip.
בדוגמאות הבאות של כותרות HTTP אפשר לראות איך עומדים בדרישות האלה להפעלת דחיסת gzip:
Accept-Encoding: gzip User-Agent: my program (gzip)