Фрагменты кода Data API

Инструкции

Интерактивные фрагменты кода позволяют легко тестировать запросы к API и создавать примеры кода для этих запросов. Для каждого метода инструмент показывает фрагменты кода для одного или нескольких вариантов использования, и каждый вариант использования описывает распространенный способ вызова этого метода. Например, вы можете вызвать метод channels.list, чтобы получить данные об определенном канале или о канале текущего пользователя.

Выполнение запросов к API

Чтобы выполнить запрос, нажмите кнопку Execute (Выполнить) рядом со списком параметров запроса. Если вы ещё не разрешили приложению отправлять запросы к API от вашего имени, вам будет предложено сделать это. В качестве дополнительной меры предосторожности, если ваш запрос выполняет операцию записи (вставляет, обновляет или удаляет ресурсы, связанные с вашим каналом), вам будет предложено подтвердить, что вы хотите выполнить запрос, прежде чем он будет выполнен.

Как переключаться между фрагментами кода и полными примерами

Для каждого варианта использования инструмент показывает фрагмент кода, который идентифицирует код, относящийся к конкретному вызываемому методу. В каждом фрагменте кода указан вызываемый метод, а также значения параметров и свойств, используемые в запросе к API.

Кроме того, инструмент показывает полный пример кода, в котором фрагмент кода помещен в шаблон, определяющий стандартные функции для авторизации запросов к API и создания запросов к API. С помощью ползунка над примерами можно переключаться между фрагментом и полным примером:

Запуск полных примеров кода на локальном компьютере

Полные примеры кода предназначены для копирования и локального запуска. Чтобы выполнить приведенные ниже примеры кода, необходимо соблюдать следующие требования и выполнить следующие действия:

Java

Требования

  • Java 1.7 или более поздней версии;
  • Gradle 2.3 или более поздней версии.

Как настроить проект и запустить примеры кода

  1. Создайте проект в Cloud 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. Создайте проект в Cloud 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).
  • Клиентская библиотека API Google для Node.js:
    npm install googleapis --save
  • Доступ к интернету и веб-браузер.
  • Аккаунт Google.

Как настроить проект и запустить примеры кода

  1. Создайте проект в Cloud Console и настройте учетные данные 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.
  • Клиентская библиотека API Google для 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-библиотека requests.
    pip install --upgrade requests

Как настроить проект и запустить примеры кода

  1. Создайте проект в Cloud Console и настройте учетные данные OAuth 2.0 в консоли Google Cloud. При настройке учетных данных выберите тип приложения Веб-приложение для примеров, в которых используется фреймворк 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.
  • Инструмент управления зависимостями Composer.
  • Клиентская библиотека API Google для PHP:
    php composer.phar require google/apiclient:^2.0

Как настроить проект и запустить примеры кода

  1. Создайте проект в Cloud Console и настройте учетные данные OAuth 2.0 в консоли Google Cloud. При настройке учетных данных выберите тип приложения Другое.

  2. Сохраните файл client_secret.json, связанный с вашими учетными данными, в локальный файл.

  3. Скопируйте полный пример кода в локальный файл в том же каталоге, где находится файл client_secret.json, или измените пример, чтобы правильно указать местоположение этого файла.

  4. Запустите пример из командной строки:

    php sample.php
  5. Большинство примеров выводят данные в STDOUT или, в случае веб-приложений, на просматриваемую веб-страницу. На сайте YouTube можно посмотреть, как выполняются запросы, которые записывают данные, например создают плейлисты или разделы канала.

Ruby

Требования

  • Ruby 2.0 или более поздней версии.
  • Клиентская библиотека API Google для Ruby:
    gem install google-api-client

Как настроить проект и запустить примеры кода

  1. Создайте проект в Cloud Console и настройте учетные данные OAuth 2.0 в консоли Google Cloud. При настройке учетных данных выберите тип приложения Другое.

  2. Сохраните файл client_secret.json, связанный с вашими учетными данными, в локальный файл.

  3. Скопируйте полный пример кода в локальный файл в том же каталоге, где находится файл client_secret.json, или измените пример, чтобы правильно указать местоположение этого файла.

  4. Запустите пример из командной строки:

    ruby sample.rb
  5. Большинство примеров выводят данные в STDOUT или, если это пример веб-приложения, на просматриваемую веб-страницу. Вы также можете проверить, как на сайте YouTube отражаются запросы, которые записывают данные, например запросы на создание плейлистов или разделов канала.

Перейти
  1. Создайте проект в Cloud Console и настройте учетные данные OAuth 2.0 в консоли Google Cloud. При настройке учетных данных выберите тип приложения Другое.

  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.

Например, на вкладках ниже показано, как будут вызываться шаблонные функции для создания ресурсов, чтобы создать ресурс 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'
});
Go
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 (Загрузить ресурс). В форму будут загружены текущие значения свойств, и вы сможете изменить только те, которые вам нужны.