קטעי קוד ב-Data API

הוראות

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

ביצוע בקשות API

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

החלפת מצב בין קטעי קוד לדוגמאות מלאות

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

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

הרצת דוגמאות קוד מלאות באופן מקומי

דוגמאות הקוד המלאות מיועדות להעתקה ולהרצה באופן מקומי. שימו לב לדרישות המוקדמות ולשלבי ההגדרה הבאים להרצת דוגמאות הקוד המלאות:

Java

דרישות מוקדמות

  • ‫Java 1.7 ואילך
  • ‫Gradle מגרסה 2.3 ואילך

הגדרת הפרויקט והרצת דוגמאות קוד

  1. יוצרים פרויקט ב-מסוף Cloud ומגדירים פרטי כניסה לאפליקציית אינטרנט. מגדירים את כתובות ה-URI המורשות להפניה אוטומטית לפי הצורך.

  2. פועלים לפי ההוראות במדריך למתחילים של 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"
    }
  3. מספריית העבודה, שומרים את הקובץ client_secrets.json שמשויך לפרטי הכניסה ב-src/main/resources/client_secret.json.

  4. מספריית העבודה, מעתיקים את דוגמת הקוד המלאה אל src/main/java/ApiExample.java. (שם הכיתה בכל דוגמה הוא ApiExample, כך שלא צריך לשנות את הקובץ build.gradle כדי להריץ דוגמאות שונות).

  5. מריצים את הדוגמה משורת הפקודה:

    gradle -q run
  6. רוב הדוגמאות מדפיסות משהו ב-STDOUT. אתם יכולים גם לבדוק באתר YouTube את ההשפעות של בקשות שכותבות נתונים, כמו בקשות שיוצרות פלייליסטים או קטעים בערוץ.

JavaScript
  1. יוצרים פרויקט ב-מסוף Cloud ומגדירים פרטי כניסה לאפליקציית אינטרנט. מגדירים את מקורות ה-JavaScript המורשים כדי לזהות את כתובת ה-URL שממנה יישלחו הבקשות (למשל http://localhost).

  2. מעתיקים את דוגמת הקוד המלאה לקובץ מקומי שנגיש לשרת האינטרנט (למשל /var/www/html/example.html).

  3. מחפשים בדוגמת הקוד את השורה שבה מוגדר מזהה הלקוח שישמש לבקשה, ומחליפים את הערך במזהה הלקוח של פרטי הכניסה:

    gapi.client.init({
        'clientId': 'REPLACE_ME',
  4. פותחים את הקובץ בדפדפן (לדוגמה, http://localhost/example.html). מומלץ להשתמש בדפדפן עם מסוף ניפוי באגים, כמו Google Chrome.

  5. אם צריך, מאשרים את הבקשה. אם הבקשה מאושרת, במסוף לניפוי באגים אמורה להופיע תגובה מה-API לבקשה כאובייקט JSON.

Node.js

דרישות מוקדמות

  • צריך להתקין את Node.js.
  • כלי ניהול החבילות npm (מגיע עם Node.js).
  • ספריית הלקוח של Google APIs ל-Node.js:
    npm install googleapis --save
  • גישה לאינטרנט ודפדפן אינטרנט.
  • חשבון Google.

הגדרת הפרויקט והרצת דוגמאות קוד

  1. יוצרים פרויקט במסוף Cloud ומגדירים את פרטי הכניסה ל-OAuth 2.0 במסוף Google Cloud. כשמגדירים את פרטי הכניסה, מגדירים את סוג האפליקציה לאחר.

  2. שומרים את קובץ ה-client_secret.json שמשויך לפרטי הכניסה שלכם כקובץ מקומי.

  3. מעתיקים את דוגמת הקוד המלאה לקובץ מקומי באותה ספרייה שבה נמצא הקובץ client_secret.json (או משנים את הדוגמה כדי לזהות בצורה נכונה את המיקום של הקובץ הזה).

  4. מריצים את הדוגמה משורת הפקודה:

    node sample.js
  5. רוב הדוגמאות מדפיסות משהו ב-STDOUT או, בדוגמאות של אפליקציות אינטרנט, בדף האינטרנט שבו אתם צופים. אתם יכולים גם לבדוק באתר YouTube את ההשפעות של בקשות שכותבות נתונים, כמו בקשות שיוצרות פלייליסטים או קטעים בערוץ.

Python

דרישות מוקדמות

  • ‫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

הגדרת הפרויקט והרצת דוגמאות קוד

  1. יוצרים פרויקט במסוף Cloud ומגדירים את פרטי הכניסה ל-OAuth 2.0 במסוף Google Cloud. כשמגדירים את פרטי הכניסה, צריך להגדיר את סוג האפליקציה כאפליקציית אינטרנט לדוגמאות שמשתמשות במסגרת של אפליקציית האינטרנט Flask Python, וגם להגדיר את כתובות ה-URI המורשות להפניה אוטומטית לפרטי הכניסה האלה. אחרת, מגדירים את סוג האפליקציה כ-Other.

  2. שומרים את קובץ ה-client_secret.json שמשויך לפרטי הכניסה שלכם כקובץ מקומי.

  3. מעתיקים את דוגמת הקוד המלאה לקובץ מקומי באותה ספרייה שבה נמצא הקובץ client_secret.json (או משנים את הדוגמה כדי לזהות בצורה נכונה את המיקום של הקובץ הזה).

  4. מריצים את הדוגמה משורת הפקודה:

    python sample.py
    הערה לגבי דוגמאות של אפליקציות לשרת אינטרנט:

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

    app.run('localhost', 8080, debug=True)

    הקוד הזה מפעיל שרת אינטרנט מקומי בכתובת http://localhost:8080. עם זאת, הסקריפט לא מנסה לבצע בקשת API עד שאתם לא עוברים בפועל אל http://localhost:8080 בדפדפן. (צריך גם להגדיר את כתובת ה-URL של השרת המקומי ככתובת URI מורשית להפניה אוטומטית בשביל פרטי הכניסה לאימות).
  5. רוב הדוגמאות מדפיסות משהו ב-STDOUT או, בדוגמאות של אפליקציות אינטרנט, בדף האינטרנט שבו אתם צופים. אתם יכולים גם לבדוק באתר YouTube את ההשפעות של בקשות שכותבות נתונים, כמו בקשות שיוצרות פלייליסטים או קטעים בערוץ.

PHP

דרישות מוקדמות

  • ‫PHP 5.4 ומעלה עם ממשק שורת הפקודה (CLI) ותוסף JSON מותקנים.
  • כלי ניהול התלות Composer.
  • ספריית הלקוח של Google APIs ל-PHP:
    php composer.phar require google/apiclient:^2.0

הגדרת הפרויקט והרצת דוגמאות קוד

  1. יוצרים פרויקט במסוף Cloud ומגדירים את פרטי הכניסה ל-OAuth 2.0 במסוף Google Cloud. כשמגדירים את פרטי הכניסה, צריך להגדיר את סוג האפליקציה כאחר.

  2. שומרים את קובץ ה-client_secret.json שמשויך לפרטי הכניסה שלכם כקובץ מקומי.

  3. מעתיקים את דוגמת הקוד המלאה לקובץ מקומי באותה ספרייה שבה נמצא הקובץ client_secret.json (או משנים את הדוגמה כדי לזהות בצורה נכונה את המיקום של הקובץ הזה).

  4. מריצים את הדוגמה משורת הפקודה:

    php sample.php
  5. רוב הדוגמאות מדפיסות משהו ב-STDOUT או, בדוגמאות של אפליקציות אינטרנט, בדף האינטרנט שבו אתם צופים. אתם יכולים גם לבדוק באתר YouTube את ההשפעות של בקשות שכותבות נתונים, כמו בקשות שיוצרות פלייליסטים או קטעים בערוץ.

Ruby

דרישות מוקדמות

  • ‫Ruby 2.0 ואילך
  • ספריית הלקוח של Google APIs ל-Ruby:
    gem install google-api-client

הגדרת הפרויקט והרצת דוגמאות קוד

  1. יוצרים פרויקט במסוף Cloud ומגדירים פרטי כניסה ל-OAuth 2.0 במסוף Google Cloud. כשמגדירים את פרטי הכניסה, צריך להגדיר את סוג האפליקציה כאחר.

  2. שומרים את קובץ ה-client_secret.json שמשויך לפרטי הכניסה שלכם כקובץ מקומי.

  3. מעתיקים את דוגמת הקוד המלאה לקובץ מקומי באותה ספרייה שבה נמצא הקובץ client_secret.json (או משנים את הדוגמה כדי לזהות בצורה נכונה את המיקום של הקובץ הזה).

  4. מריצים את הדוגמה משורת הפקודה:

    ruby sample.rb
  5. ברוב הדוגמאות מודפס משהו ב-STDOUT או, בדוגמאות של אפליקציות אינטרנט, בדף האינטרנט שמוצג. אפשר גם לבדוק באתר YouTube את ההשפעות של בקשות שכותבות נתונים, כמו בקשות ליצירת פלייליסטים או מדורים בערוץ.

המשך
  1. יוצרים פרויקט במסוף Cloud ומגדירים את פרטי הכניסה ל-OAuth 2.0 במסוף Google Cloud. כשמגדירים את פרטי הכניסה, צריך להגדיר את סוג האפליקציה כאחר.

  2. שומרים את קובץ ה-client_secret.json שמשויך לפרטי הכניסה שלכם כקובץ מקומי.

  3. מעתיקים את דוגמת הקוד המלאה לקובץ מקומי באותה ספרייה שבה נמצא הקובץ client_secret.json (או משנים את הדוגמה כדי לזהות בצורה נכונה את המיקום של הקובץ הזה).

  4. מריצים את הדוגמה משורת הפקודה:

    go run sample.go
  5. ברוב הדוגמאות מודפס משהו ב-STDOUT או, בדוגמאות של אפליקציות אינטרנט, בדף האינטרנט שמוצג. אתם יכולים גם לבדוק באתר YouTube את ההשפעות של בקשות שכותבות נתונים, כמו בקשות שיוצרות פלייליסטים או קטעים בערוץ.

שימוש בפונקציות של טקסט קבוע

כמו שצוין למעלה, דוגמאות הקוד המלאות משתמשות בקוד שחוזר על עצמו (boilerplate) כדי לאשר וליצור בקשות API. לדוגמה, הפונקציה build_resource בדוגמאות של Python משתמשת במילון שממפה מאפייני משאבים לערכים שלהם כדי ליצור משאב שאפשר להוסיף או לעדכן. פונקציות דומות זמינות ב-JavaScript, ב-PHP, ב-Ruby, ב-Go וב-Apps Script.

לדוגמה, בכרטיסיות שלמטה אפשר לראות איך קוראים לפונקציות של תבנית קבועה ליצירת משאבים כדי ליצור משאב playlist. שימו לב שהפונקציות של הקוד הגנרי לא צריכות לדעת איזה סוג של משאב נוצר.

JavaScript
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'
}
Python
# 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'}
  
PHP
// 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'));
Ruby
# 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'})
Apps Script
// 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 (טעינת המשאב). ערכי הנכס הנוכחיים נטענים לטופס, ואפשר לעדכן רק את הערכים שרוצים לשנות.