מבוא
המסמך הזה מיועד למפתחים שרוצים לכתוב אפליקציות שפועלות עם YouTube. הוא כולל הסברים על מושגים בסיסיים ב-YouTube ועל ה-API עצמו. בנוסף, יש בו סקירה כללית של הפונקציות השונות שנתמכות ב-API.
לפני שמתחילים
-
כדי לגשת למסוף Google Cloud, לבקש מפתח API ולרשום את האפליקציה, אתם צריכים חשבון Google.
-
יוצרים פרויקט ב-Google Developers Console ומקבלים פרטי כניסה לאימות כדי שהאפליקציה תוכל לשלוח בקשות API.
-
אחרי שיוצרים את הפרויקט, צריך לוודא ש-YouTube Data API הוא אחד מהשירותים שהאפליקציה רשומה לשימוש בהם:
- נכנסים אל Cloud Console ובוחרים את הפרויקט שרשמתם.
- נכנסים לדף ממשקי ה-API המופעלים. מוודאים ש-YouTube Data API מופיע ברשימת ממשקי ה-API המופעלים. אם הוא לא מופיע, פותחים את ספריית ה-API ומפעילים את ה-API.
-
אם האפליקציה שלכם תשתמש בשיטות 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 תומך בשיטות להצגת רשימה של כל אחד מסוגי המשאבים הנתמכים, והוא תומך גם בפעולות כתיבה של משאבים רבים.
בטבלה הבאה מפורטות הפעולות שנתמכות עבור סוגים שונים של משאבים. פעולות שמוסיפות, מעדכנות או מוחקות משאבים תמיד דורשות הרשאת משתמש. במקרים מסוימים, שיטות של 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, מכסת ברירת המחדל היא 100 קריאות ל-API מסוג search.list, 100 קריאות ל-API מסוג videos.insert ו-10,000 יחידות ביום לכל שאר נקודות הקצה יחד. מכסת ברירת המחדל, שעשויה להשתנות, עוזרת לנו לבצע אופטימיזציה של הקצאות המכסות ולהרחיב את התשתית שלנו באופן שמועיל יותר למשתמשי ה-API. אפשר לראות את השימוש במכסה בדף Quotas בקונסולה לממשקי API.
הערה: אם הגעתם למגבלת המכסה, אתם יכולים לבקש מכסה נוספת באמצעות מילוי טופס בקשה להגדלת המכסה של שירותי ה-API של YouTube.
מתבצע חישוב של ניצול המכסה
כדי לחשב את ניצול המכסה, Google מקצה עלות לכל בקשה. לסוגים שונים של פעולות יש עלויות מכסה שונות. לדוגמה:
- פעולת קריאה שמחלצת רשימה של משאבים – ערוצים, סרטונים, פלייליסטים – בדרך כלל עולה יחידה אחת.
- פעולת כתיבה שיוצרת, מעדכנת או מוחקת משאב בדרך כלל עולה
50יחידות. - שאילתת חיפוש עולה יחידה אחת (
1). - העלאת סרטון עולה
1יחידות.
בטבלה 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 מחזירה משאב וידאו שכולל שני חלקים, אבל לא כולל את המאפיינים
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 ותגי ETag שלהם. לאחר מכן, כשהאפליקציה מבקשת שוב משאב מאוחסן, היא מציינת את ה-ETag שמשויך למשאב הזה. אם המשאב השתנה, ה-API מחזיר את המשאב ששונה ואת ה-ETag שמשויך לגרסה הזו של המשאב. אם המשאב לא השתנה, ה-API מחזיר תגובת HTTP 304 (
Not Modified), שמציינת שהמשאב לא השתנה. כך האפליקציה יכולה להפחית את זמן האחזור ואת השימוש ברוחב הפס על ידי הצגת משאבים שנשמרו במטמון.ספריות הלקוח של Google APIs שונות בתמיכה שלהן בתגי ישות. לדוגמה, ספריית הלקוח של JavaScript תומכת בתגי ישות באמצעות רשימת היתרים של כותרות בקשה מותרות, שכוללת את
If-Matchו-If-None-Match. רשימת ההיתרים מאפשרת שמירה רגילה במטמון הדפדפן, כך שאם ה-ETag של משאב לא השתנה, אפשר להציג את המשאב ממטמון הדפדפן. לעומת זאת, לקוח Obj-C לא תומך ב-ETags. -
הגנה מפני החלפה לא מכוונת של שינויים – תגי ETag עוזרים לוודא שכמה לקוחות API לא יחליפו בטעות את השינויים אחד של השני. כשמעדכנים או מוחקים משאב, האפליקציה יכולה לציין את ה-ETag של המשאב. אם ה-ETag לא תואם לגרסה העדכנית ביותר של המשאב, בקשת ה-API תיכשל.
לשימוש בתגי ETag באפליקציה יש כמה יתרונות:
- תגובה מה-API מגיבה מהר יותר לבקשות למשאבים שנשמרו במטמון אבל לא השתנו, וכך מקצרת את זמן הטעינה ומפחיתה את השימוש ברוחב הפס.
- האפליקציה לא תחליף בטעות שינויים במשאב שבוצעו מלקוח API אחר.
Google APIs Client Library for JavaScript תומך בכותרות של בקשות HTTP מסוג If-Match ו-If-None-Match, וכך מאפשר לתגי ישות לפעול בהקשר של שמירה רגילה במטמון הדפדפן.
שימוש ב-gzip
אתם יכולים גם להפעיל דחיסת נתונים מסוג gzip כדי לצמצם את רוחב הפס הדרוש לכל תגובה מה-API. האפליקציה תצטרך זמן מעבד (CPU) נוסף כדי לבטל את הדחיסה של התגובות מה-API, אבל בדרך כלל היתרון של צריכת פחות משאבי רשת עולה על העלות הזו.
כדי לקבל תגובה בקידוד gzip, צריך לבצע שתי פעולות:
- מגדירים את כותרת בקשת ה-HTTP
Accept-Encodingלערךgzip. - משנים את סוכן המשתמש כך שיכיל את המחרוזת
gzip.
בדוגמה הבאה של כותרות HTTP אפשר לראות איך להפעיל דחיסת gzip בהתאם לדרישות:
Accept-Encoding: gzip User-Agent: my program (gzip)