קטעי קוד של Data API

הוראות

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

הפעלת בקשות API

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

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

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

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

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

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

Java

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

  • Java 1.7 ואילך
  • מדרג 2.3 ומעלה

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

  1. יצירת פרויקט ב-API Console והגדרת פרטי כניסה לאפליקציית אינטרנט. מגדירים את ה-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. יצירת פרויקט ב-API Console והגדרת פרטי כניסה לאפליקציית אינטרנט. צריך להגדיר את מקורות ה-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. יוצרים פרויקט ב-API Console ומגדירים פרטי כניסה בפרוטוקול OAuth 2.0 ב-Google API Console. כשמגדירים את פרטי הכניסה, צריך להגדיר את סוג האפליקציה בתור אחר.

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

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

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

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

Python

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

  • Python
  • הכלי לניהול חבילות תמונות
  • ספריית הלקוח של 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. יוצרים פרויקט ב-API Console ומגדירים פרטי כניסה בפרוטוקול OAuth 2.0 ב-Google API Console. כשמגדירים את פרטי הכניסה, צריך להגדיר את סוג האפליקציה כאפליקציית אינטרנט לדוגמאות שמשתמשות במסגרת של אפליקציית האינטרנט של Flask Python ולהגדיר גם מזהי URI מורשים לכתובות האלה. אחרת, צריך להגדיר את סוג האפליקציה בתור אחר.

  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 שהותקנו.
  • כלי לניהול יחסי תלות של מלחין.
  • ספריית הלקוח של Google APIs ל-PHP:
    php composer.phar require google/apiclient:^2.0

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

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

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

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

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

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

רובי

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

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

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

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

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

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

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

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

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

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

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

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

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

שימוש בפונקציות נפוצות

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

לדוגמה, בכרטיסיות הבאות אפשר לראות איך הפונקציות (boilerplate) לבניית משאבים נקראות איך ליצור משאב 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'));
אודם
# 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
// 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 ולוחצים על הלחצן טעינת משאב. ערכי הנכס הנוכחיים נטענים בטופס, ואתם יכולים לעדכן רק את הערכים שאתם רוצים לשנות.