הוראות
הכלי האינטראקטיבי של קטעי הקוד מאפשר לכם לבדוק בקלות בקשות API וליצור דוגמאות קוד ספציפיות לבקשות האלה. לכל שיטה נתונה, הכלי מציג קטעי קוד לתרחיש אחד או יותר, וכל תרחיש מתאר דרך נפוצה להפעלת השיטה הזו. לדוגמה, אפשר להפעיל את ה-method channels.list כדי לאחזר נתונים על ערוץ ספציפי או על הערוץ של המשתמש הנוכחי.
ביצוע בקשות API
כדי להריץ בקשות, לוחצים על הלחצן Execute (הפעלה) לצד רשימת פרמטרים של בקשות. אם לא אישרתם בעבר לאפליקציה לשלוח בקשות API בשמכם, תתבקשו לעשות זאת. כאמצעי זהירות נוסף, אם הבקשה שלכם מבצעת פעולת כתיבה – הוספה, עדכון או מחיקה של משאבים שמשויכים לערוץ שלכם – תתבקשו לאשר שאתם רוצים לבצע את הבקשה לפני שהיא תבוצע בפועל.

החלפת מצב בין קטעי קוד לדוגמאות מלאות
לכל תרחיש שימוש, הכלי מציג קטע קוד שמזהה קוד שספציפי לשיטה מסוימת שמופעלת. כל קטע קוד מזהה את השיטה שמופעלת, וגם את הערכים של הפרמטרים והמאפיינים שמשמשים בבקשת ה-API.
בנוסף, הכלי מציג דוגמת קוד מלאה שמוסיפה את קטע הקוד לתבנית שמגדירה פונקציות סטנדרטיות לאישור בקשות API ולבניית בקשות API. אפשר להשתמש בפס ההזזה שמעל הדוגמאות כדי לעבור בין קטע הקוד לבין הדוגמה המלאה:

הרצת דוגמאות קוד מלאות באופן מקומי
דוגמאות הקוד המלאות מיועדות להעתקה ולהרצה באופן מקומי. שימו לב לדרישות המוקדמות ולשלבי ההגדרה הבאים להרצת דוגמאות הקוד המלאות:
דרישות מוקדמות
- Java 1.7 ואילך
- Gradle מגרסה 2.3 ואילך
הגדרת הפרויקט והרצת דוגמאות קוד
-
יוצרים פרויקט ב-מסוף Cloud ומגדירים פרטי כניסה לאפליקציית אינטרנט. מגדירים את כתובות ה-URI המורשות להפניה אוטומטית לפי הצורך.
-
פועלים לפי ההוראות במדריך למתחילים של API Java כדי להכין את הפרויקט, אבל מחליפים את התוכן של קובץ ברירת המחדל
build.gradleבקוד הבא:apply plugin: 'java' apply plugin: 'application' mainClassName = 'ApiExample' sourceCompatibility = 1.7 targetCompatibility = 1.7 version = '1.0' repositories { mavenCentral() } dependencies { compile 'com.google.api-client:google-api-client:1.22.0' compile 'com.google.oauth-client:google-oauth-client-jetty:1.22.0' compile 'com.google.apis:google-api-services-youtube:v3-rev182-1.22.0' compile group: 'com.google.code.gson', name: 'gson', version: '1.7.2' compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.4.4' } compileJava { options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" } -
מספריית העבודה, שומרים את הקובץ
client_secrets.jsonשמשויך לפרטי הכניסה ב-src/main/resources/client_secret.json. -
מספריית העבודה, מעתיקים את דוגמת הקוד המלאה אל
src/main/java/ApiExample.java. (שם הכיתה בכל דוגמה הואApiExample, כך שלא צריך לשנות את הקובץbuild.gradleכדי להריץ דוגמאות שונות). -
מריצים את הדוגמה משורת הפקודה:
gradle -q run
-
רוב הדוגמאות מדפיסות משהו ב-
STDOUT. אתם יכולים גם לבדוק באתר YouTube את ההשפעות של בקשות שכותבות נתונים, כמו בקשות שיוצרות פלייליסטים או קטעים בערוץ.
-
יוצרים פרויקט ב-מסוף Cloud ומגדירים פרטי כניסה לאפליקציית אינטרנט. מגדירים את מקורות ה-JavaScript המורשים כדי לזהות את כתובת ה-URL שממנה יישלחו הבקשות (למשל
http://localhost). -
מעתיקים את דוגמת הקוד המלאה לקובץ מקומי שנגיש לשרת האינטרנט (למשל
/var/www/html/example.html). -
מחפשים בדוגמת הקוד את השורה שבה מוגדר מזהה הלקוח שישמש לבקשה, ומחליפים את הערך במזהה הלקוח של פרטי הכניסה:
gapi.client.init({ 'clientId': 'REPLACE_ME', -
פותחים את הקובץ בדפדפן (לדוגמה,
http://localhost/example.html). מומלץ להשתמש בדפדפן עם מסוף ניפוי באגים, כמו Google Chrome. -
אם צריך, מאשרים את הבקשה. אם הבקשה מאושרת, במסוף לניפוי באגים אמורה להופיע תגובה מה-API לבקשה כאובייקט JSON.
דרישות מוקדמות
- צריך להתקין את Node.js.
- כלי ניהול החבילות npm (מגיע עם Node.js).
- ספריית הלקוח של Google APIs ל-Node.js:
npm install googleapis --save
- גישה לאינטרנט ודפדפן אינטרנט.
- חשבון Google.
הגדרת הפרויקט והרצת דוגמאות קוד
-
יוצרים פרויקט במסוף Cloud ומגדירים את פרטי הכניסה ל-OAuth 2.0 במסוף Google Cloud. כשמגדירים את פרטי הכניסה, מגדירים את סוג האפליקציה לאחר.
-
שומרים את קובץ ה-
client_secret.jsonשמשויך לפרטי הכניסה שלכם כקובץ מקומי. -
מעתיקים את דוגמת הקוד המלאה לקובץ מקומי באותה ספרייה שבה נמצא הקובץ
client_secret.json(או משנים את הדוגמה כדי לזהות בצורה נכונה את המיקום של הקובץ הזה). -
מריצים את הדוגמה משורת הפקודה:
node sample.js
-
רוב הדוגמאות מדפיסות משהו ב-
STDOUTאו, בדוגמאות של אפליקציות אינטרנט, בדף האינטרנט שבו אתם צופים. אתם יכולים גם לבדוק באתר YouTube את ההשפעות של בקשות שכותבות נתונים, כמו בקשות שיוצרות פלייליסטים או קטעים בערוץ.
דרישות מוקדמות
- Python 2.6 ואילך
- כלי ניהול החבילות pip
- ספריית הלקוח של Google APIs ל-Python:
pip install --upgrade google-api-python-client
- google-auth, google-auth-oauthlib ו-google-auth-httplib2 להרשאת משתמש.
pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2
- המסגרת של אפליקציית האינטרנט Flask Python (אם אתם מריצים את דוגמאות ה-Python לאפליקציות של שרת האינטרנט).
pip install --upgrade flask
- ספריית ה-HTTP של הבקשות.
pip install --upgrade requests
הגדרת הפרויקט והרצת דוגמאות קוד
-
יוצרים פרויקט במסוף Cloud ומגדירים את פרטי הכניסה ל-OAuth 2.0 במסוף Google Cloud. כשמגדירים את פרטי הכניסה, צריך להגדיר את סוג האפליקציה כאפליקציית אינטרנט לדוגמאות שמשתמשות במסגרת של אפליקציית האינטרנט Flask Python, וגם להגדיר את כתובות ה-URI המורשות להפניה אוטומטית לפרטי הכניסה האלה. אחרת, מגדירים את סוג האפליקציה כ-Other.
-
שומרים את קובץ ה-
client_secret.jsonשמשויך לפרטי הכניסה שלכם כקובץ מקומי. -
מעתיקים את דוגמת הקוד המלאה לקובץ מקומי באותה ספרייה שבה נמצא הקובץ
client_secret.json(או משנים את הדוגמה כדי לזהות בצורה נכונה את המיקום של הקובץ הזה). -
מריצים את הדוגמה משורת הפקודה:
python sample.py
הערה לגבי דוגמאות של אפליקציות לשרת אינטרנט:
אם מריצים את הדוגמאות של Python לאפליקציות לשרת אינטרנט, הפעלת הסקריפט תתחיל שרת אינטרנט מקומי. כדי להריץ את בקשת ה-API, צריך לעבור לדף האינטרנט המוצג בדפדפן. לדוגמה, דוגמאות הקוד ב-Python שמשתמשות במסגרת של אפליקציית האינטרנט Flask מכילות שורה כזו:
app.run('localhost', 8080, debug=True)
הקוד הזה מפעיל שרת אינטרנט מקומי בכתובתhttp://localhost:8080. עם זאת, הסקריפט לא מנסה לבצע בקשת API עד שאתם לא עוברים בפועל אלhttp://localhost:8080בדפדפן. (צריך גם להגדיר את כתובת ה-URL של השרת המקומי ככתובת URI מורשית להפניה אוטומטית בשביל פרטי הכניסה לאימות). -
רוב הדוגמאות מדפיסות משהו ב-
STDOUTאו, בדוגמאות של אפליקציות אינטרנט, בדף האינטרנט שבו אתם צופים. אתם יכולים גם לבדוק באתר YouTube את ההשפעות של בקשות שכותבות נתונים, כמו בקשות שיוצרות פלייליסטים או קטעים בערוץ.
דרישות מוקדמות
- PHP 5.4 ומעלה עם ממשק שורת הפקודה (CLI) ותוסף JSON מותקנים.
- כלי ניהול התלות Composer.
- ספריית הלקוח של Google APIs ל-PHP:
php composer.phar require google/apiclient:^2.0
הגדרת הפרויקט והרצת דוגמאות קוד
-
יוצרים פרויקט במסוף Cloud ומגדירים את פרטי הכניסה ל-OAuth 2.0 במסוף Google Cloud. כשמגדירים את פרטי הכניסה, צריך להגדיר את סוג האפליקציה כאחר.
-
שומרים את קובץ ה-
client_secret.jsonשמשויך לפרטי הכניסה שלכם כקובץ מקומי. -
מעתיקים את דוגמת הקוד המלאה לקובץ מקומי באותה ספרייה שבה נמצא הקובץ
client_secret.json(או משנים את הדוגמה כדי לזהות בצורה נכונה את המיקום של הקובץ הזה). -
מריצים את הדוגמה משורת הפקודה:
php sample.php
-
רוב הדוגמאות מדפיסות משהו ב-
STDOUTאו, בדוגמאות של אפליקציות אינטרנט, בדף האינטרנט שבו אתם צופים. אתם יכולים גם לבדוק באתר YouTube את ההשפעות של בקשות שכותבות נתונים, כמו בקשות שיוצרות פלייליסטים או קטעים בערוץ.
דרישות מוקדמות
- Ruby 2.0 ואילך
- ספריית הלקוח של Google APIs ל-Ruby:
gem install google-api-client
הגדרת הפרויקט והרצת דוגמאות קוד
-
יוצרים פרויקט במסוף Cloud ומגדירים פרטי כניסה ל-OAuth 2.0 במסוף Google Cloud. כשמגדירים את פרטי הכניסה, צריך להגדיר את סוג האפליקציה כאחר.
-
שומרים את קובץ ה-
client_secret.jsonשמשויך לפרטי הכניסה שלכם כקובץ מקומי. -
מעתיקים את דוגמת הקוד המלאה לקובץ מקומי באותה ספרייה שבה נמצא הקובץ
client_secret.json(או משנים את הדוגמה כדי לזהות בצורה נכונה את המיקום של הקובץ הזה). -
מריצים את הדוגמה משורת הפקודה:
ruby sample.rb
-
ברוב הדוגמאות מודפס משהו ב-
STDOUTאו, בדוגמאות של אפליקציות אינטרנט, בדף האינטרנט שמוצג. אפשר גם לבדוק באתר YouTube את ההשפעות של בקשות שכותבות נתונים, כמו בקשות ליצירת פלייליסטים או מדורים בערוץ.
-
יוצרים פרויקט במסוף Cloud ומגדירים את פרטי הכניסה ל-OAuth 2.0 במסוף Google Cloud. כשמגדירים את פרטי הכניסה, צריך להגדיר את סוג האפליקציה כאחר.
-
שומרים את קובץ ה-
client_secret.jsonשמשויך לפרטי הכניסה שלכם כקובץ מקומי. -
מעתיקים את דוגמת הקוד המלאה לקובץ מקומי באותה ספרייה שבה נמצא הקובץ
client_secret.json(או משנים את הדוגמה כדי לזהות בצורה נכונה את המיקום של הקובץ הזה). -
מריצים את הדוגמה משורת הפקודה:
go run sample.go
-
ברוב הדוגמאות מודפס משהו ב-
STDOUTאו, בדוגמאות של אפליקציות אינטרנט, בדף האינטרנט שמוצג. אתם יכולים גם לבדוק באתר YouTube את ההשפעות של בקשות שכותבות נתונים, כמו בקשות שיוצרות פלייליסטים או קטעים בערוץ.
שימוש בפונקציות של טקסט קבוע
כמו שצוין למעלה, דוגמאות הקוד המלאות משתמשות בקוד שחוזר על עצמו (boilerplate) כדי לאשר וליצור בקשות API. לדוגמה, הפונקציה build_resource בדוגמאות של Python משתמשת במילון שממפה מאפייני משאבים לערכים שלהם כדי ליצור משאב שאפשר להוסיף או לעדכן. פונקציות דומות זמינות ב-JavaScript, ב-PHP, ב-Ruby, ב-Go וב-Apps Script.
לדוגמה, בכרטיסיות שלמטה אפשר לראות איך קוראים לפונקציות של תבנית קבועה ליצירת משאבים כדי ליצור משאב playlist. שימו לב שהפונקציות של הקוד הגנרי לא צריכות לדעת איזה סוג של משאב נוצר.
function createResource(properties) {
var resource = {};
var normalizedProps = properties;
for (var p in properties) {
var value = properties[p];
if (p && p.substr(-2, 2) == '[]') {
var adjustedName = p.replace('[]', '');
if (value) {
normalizedProps[adjustedName] = value.split(',');
}
delete normalizedProps[p];
}
}
for (var p in normalizedProps) {
// Leave properties that don't have values out of inserted resource.
if (normalizedProps.hasOwnProperty(p) && normalizedProps[p]) {
var propArray = p.split('.');
var ref = resource;
for (var pa = 0; pa < propArray.length; pa++) {
var key = propArray[pa];
if (pa == propArray.length - 1) {
ref[key] = normalizedProps[p];
} else {
ref = ref[key] = ref[key] || {};
}
}
};
}
return resource;
}
var resource = createResource({
'snippet.title': 'Sample playlist ',
'snippet.description': 'This is a sample playlist description.',
'snippet.tags[]': 'JavaScript code, interactive',
'snippet.defaultLanguage': '',
'status.privacyStatus': 'private'
}
# Build a resource based on a list of properties given as key-value pairs.
# Leave properties with empty values out of the inserted resource.
def build_resource(properties):
resource = {}
for p in properties:
# Given a key like "snippet.title", split into "snippet" and "title", where
# "snippet" will be an object and "title" will be a property in that object.
prop_array = p.split('.')
ref = resource
for pa in range(0, len(prop_array)):
is_array = False
key = prop_array[pa]
# Convert a name like "snippet.tags[]" to snippet.tags, but handle
# the value as an array.
if key[-2:] == '[]':
key = key[0:len(key)-2:]
is_array = True
if pa == (len(prop_array) - 1):
# Leave properties without values out of inserted resource.
if properties[p]:
if is_array:
ref[key] = properties[p].split(',')
else:
ref[key] = properties[p]
elif key not in ref:
# For example, the property is "snippet.title", but the resource does
# not yet have a "snippet" object. Create the snippet object here.
# Setting "ref = ref[key]" means that in the next time through the
# "for pa in range ..." loop, we will be setting a property in the
# resource's "snippet" object.
ref[key] = {}
ref = ref[key]
else:
# For example, the property is "snippet.description", and the resource
# already has a "snippet" object.
ref = ref[key]
return resource
resource = build_resource({
'snippet.title': 'Sample playlist ',
'snippet.description': 'This is a sample playlist description.',
'snippet.tags[]': 'Python code, interactive',
'snippet.defaultLanguage': '',
'status.privacyStatus': 'private'}
// Add a property to the resource.
function addPropertyToResource(&$ref, $property, $value) {
$keys = explode(".", $property);
$is_array = false;
foreach ($keys as $key) {
// Convert a name like "snippet.tags[]" to "snippet.tags" and
// set a boolean variable to handle the value like an array.
if (substr($key, -2) == "[]") {
$key = substr($key, 0, -2);
$is_array = true;
}
$ref = &$ref[$key];
}
// Set the property value. Make sure array values are handled properly.
if ($is_array && $value) {
$ref = $value;
$ref = explode(",", $value);
} elseif ($is_array) {
$ref = array();
} else {
$ref = $value;
}
}
// Build a resource based on a list of properties given as key-value pairs.
function createResource($properties) {
$resource = array();
foreach ($properties as $prop => $value) {
if ($value) {
addPropertyToResource($resource, $prop, $value);
}
}
return $resource;
}
$propertyObject = createResource(array(
'snippet.title' => 'Sample playlist ',
'snippet.description' => 'This is a sample playlist description.',
'snippet.tags[]' => 'Python code, interactive',
'snippet.defaultLanguage' => '',
'status.privacyStatus' => 'private'));
# Build a resource based on a list of properties given as key-value pairs.
def create_resource(properties)
resource = {}
properties.each do |prop, value|
ref = resource
prop_array = prop.to_s.split(".")
for p in 0..(prop_array.size - 1)
is_array = false
key = prop_array[p]
if key[-2,2] == "[]"
key = key[0...-2]
is_array = true
end
if p == (prop_array.size - 1)
if is_array
if value == ""
ref[key.to_sym] = []
else
ref[key.to_sym] = value.split(",")
end
elsif value != ""
ref[key.to_sym] = value
end
elsif ref.include?(key.to_sym)
ref = ref[key.to_sym]
else
ref[key.to_sym] = {}
ref = ref[key.to_sym]
end
end
end
return resource
end
resource = create_resource({
'snippet.title': 'Sample playlist ',
'snippet.description': 'This is a sample playlist description.',
'snippet.tags[]': 'Ruby code, interactive',
'snippet.default_language': '',
'status.privacy_status': 'private'})
// Build an object from an object containing properties as key-value pairs
function createResource(properties) {
var res = {};
var normalizedProps = {};
for (var p in properties) {
var value = properties[p];
if (p.substr(-2, 2) == '[]' && value) {
var adjustedName = p.replace('[]', '');
normalizedProps[adjustedName] = value.split(',');
} else {
normalizedProps[p] = value;
}
}
for (var p in normalizedProps) {
if (normalizedProps.hasOwnProperty(p) && normalizedProps[p]) {
var propArray = p.split('.');
var ref = res;
for (var pa = 0; pa < propArray.length; pa++) {
var key = propArray[pa];
if (pa == propArray.length - 1) {
ref[key] = normalizedProps[p];
} else {
ref = ref[key] = ref[key] || {};
}
}
};
}
return res;
}
var resource = createResource({
'snippet.title': 'Sample playlist ',
'snippet.description': 'This is a sample playlist description.',
'snippet.tags[]': 'Apps Script code, interactive',
'snippet.defaultLanguage': '',
'status.privacyStatus': 'private'
});
func addPropertyToResource(ref map[string]interface{}, keys []string, value string, count int) map[string]interface{} {
for k := count; k < (len(keys) - 1); k++ {
switch val := ref[keys[k]].(type) {
case map[string]interface{}:
ref[keys[k]] = addPropertyToResource(val, keys, value, (k + 1))
case nil:
next := make(map[string]interface{})
ref[keys[k]] = addPropertyToResource(next, keys, value, (k + 1))
}
}
// Only include properties that have values.
if (count == len(keys) - 1 && value != "") {
valueKey := keys[len(keys)-1]
if valueKey[len(valueKey)-2:] == "[]" {
ref[valueKey[0:len(valueKey)-2]] = strings.Split(value, ",")
} else if len(valueKey) > 4 && valueKey[len(valueKey)-4:] == "|int" {
ref[valueKey[0:len(valueKey)-4]], _ = strconv.Atoi(value)
} else if value == "true" {
ref[valueKey] = true
} else if value == "false" {
ref[valueKey] = false
} else {
ref[valueKey] = value
}
}
return ref
}
func createResource(properties map[string]string) string {
resource := make(map[string]interface{})
for key, value := range properties {
keys := strings.Split(key, ".")
ref := addPropertyToResource(resource, keys, value, 0)
resource = ref
}
propJson, err := json.Marshal(resource)
if err != nil {
log.Fatal("cannot encode to JSON ", err)
}
return string(propJson)
}
func main() {
properties := (map[string]string{
"snippet.title": "Sample playlist ",
"snippet.description": "This is a sample playlist description.",
"snippet.tags[]": "Go code, interactive",
"snippet.defaultLanguage": "",
"status.privacyStatus": "private",
})
res := createResource(properties)טעינת משאבים קיימים
כדי לבדוק בקשה לעדכון של משאב קיים, אתם יכולים לטעון את ערכי המאפיינים הנוכחיים של המשאב הזה לטופס העדכון. לדוגמה, כדי לעדכן מטא-נתונים של סרטון, מזינים את מזהה הסרטון בשדה המאפיין id ולוחצים על הכפתור Load resource (טעינת המשאב). ערכי הנכס הנוכחיים נטענים לטופס, ואפשר לעדכן רק את הערכים שרוצים לשנות.