Hướng dẫn
Công cụ đoạn mã tương tác cho phép bạn dễ dàng kiểm thử các yêu cầu API và tạo mã mẫu dành riêng cho các yêu cầu đó. Đối với phương thức bất kỳ, công cụ sẽ hiển thị các đoạn mã cho một hoặc nhiều trường hợp sử dụng và mỗi trường hợp sử dụng mô tả một cách phổ biến để gọi phương thức đó. Ví dụ: bạn có thể gọi phương thức channels.list
để truy xuất dữ liệu về một kênh cụ thể hoặc về kênh của người dùng hiện tại.
Thực thi các yêu cầu API
Bạn có thể thực thi các yêu cầu bằng cách nhấp vào nút Thực thi bên cạnh danh sách các tham số yêu cầu. Nếu trước đó bạn chưa cho phép ứng dụng gửi yêu cầu API, thì bạn sẽ được nhắc làm như vậy. Để phòng ngừa thêm, nếu yêu cầu của bạn thực hiện thao tác ghi – chèn, cập nhật hoặc xoá tài nguyên liên kết với kênh của bạn – bạn sẽ được yêu cầu xác nhận rằng bạn muốn thực thi yêu cầu trước khi thực sự thực thi.
Chuyển đổi giữa các đoạn mã và toàn bộ mẫu
Đối với mỗi trường hợp sử dụng, công cụ sẽ hiển thị một đoạn mã xác định mã dành riêng cho phương thức cụ thể đang được gọi. Mỗi đoạn mã xác định phương thức đang được gọi cũng như các giá trị tham số và thuộc tính dùng trong yêu cầu API.
Ngoài ra, công cụ này cũng hiển thị mã mẫu đầy đủ để đặt đoạn mã đó vào mẫu xác định hàm nguyên mẫu để ủy quyền yêu cầu API và tạo yêu cầu API. Bạn có thể sử dụng thanh trượt phía trên các mẫu để chuyển đổi giữa đoạn mã và mẫu đầy đủ:
Chạy mã mẫu đầy đủ trên máy
Mã mẫu đầy đủ được thiết kế để sao chép và chạy cục bộ. Vui lòng lưu ý các điều kiện tiên quyết sau đây và thiết lập các bước để chạy mẫu mã đầy đủ:
Điều kiện tiên quyết
- Java 1.7 trở lên
- Gradle 2.3 trở lên
Thiết lập dự án và chạy mã mẫu
-
Tạo một dự án trong API Console và thiết lập thông tin xác thực cho một ứng dụng web. Đặt URI chuyển hướng được phép cho phù hợp.
-
Hãy làm theo hướng dẫn trong Hướng dẫn bắt đầu nhanh về API Java để chuẩn bị dự án, nhưng thay thế nội dung của tệp
build.gradle
mặc định bằng mã sau: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" }
-
Từ thư mục đang hoạt động của bạn, hãy lưu tệp
client_secrets.json
liên kết với thông tin xác thực vàosrc/main/resources/client_secret.json
. -
Trong thư mục đang làm việc, hãy sao chép mã mẫu đầy đủ vào
src/main/java/ApiExample.java
. (Tên lớp trong mỗi mẫu làApiExample
để bạn không cần sửa đổi tệpbuild.gradle
để chạy các mẫu khác nhau.) -
Chạy mẫu từ dòng lệnh:
gradle -q run
-
Hầu hết các mẫu sẽ in một nội dung lên
STDOUT
. Bạn cũng có thể kiểm tra trang web YouTube để xem ảnh hưởng của các yêu cầu ghi dữ liệu, chẳng hạn như yêu cầu tạo danh sách phát hoặc phần kênh.
-
Tạo một dự án trong API Console và thiết lập thông tin xác thực cho một ứng dụng web. Đặt nguồn gốc JavaScript được cho phép để xác định URL mà bạn sẽ gửi yêu cầu (ví dụ:
http://localhost
). -
Sao chép mã mẫu đầy đủ vào một tệp cục bộ mà máy chủ web của bạn có thể truy cập được (ví dụ:
/var/www/html/example.html
). -
Tìm dòng trong mã mẫu sẽ đặt mã ứng dụng khách để sử dụng cho yêu cầu và thay thế giá trị bằng mã ứng dụng khách cho thông tin xác thực của bạn:
gapi.client.init({ 'clientId': 'REPLACE_ME',
-
Mở tệp trong trình duyệt của bạn (ví dụ:
http://localhost/example.html
). Bạn nên sử dụng trình duyệt có bảng điều khiển gỡ lỗi, chẳng hạn như Google Chrome. -
Cho phép yêu cầu đó nếu cần. Nếu yêu cầu được cho phép, bảng điều khiển gỡ lỗi phải hiển thị phản hồi của API cho yêu cầu dưới dạng đối tượng JSON.
Điều kiện tiên quyết
- Phải cài đặt Node.js.
- Công cụ quản lý gói npm (đi kèm với Node.js).
- Thư viện ứng dụng Node.js của Google API:
npm install googleapis --save
- Quyền truy cập vào Internet và trình duyệt web.
- Tài khoản Google.
Thiết lập dự án và chạy mã mẫu
-
Tạo một dự án trong API Console và thiết lập thông tin xác thực OAuth 2.0 trong Bảng điều khiển API Google. Khi thiết lập thông tin xác thực, hãy đặt loại ứng dụng thành Khác.
-
Lưu tệp
client_secret.json
liên kết với thông tin xác thực của bạn vào một tệp cục bộ. -
Sao chép mã mẫu đầy đủ vào một tệp cục bộ trong cùng thư mục với tệp
client_secret.json
(hoặc sửa đổi mẫu để xác định chính xác vị trí của tệp đó. -
Chạy mẫu từ dòng lệnh:
node sample.js
-
Hầu hết các mẫu in nội dung nào đó lên
STDOUT
hoặc, ví dụ như đối với ứng dụng web, tới trang web mà bạn đang xem. Bạn cũng có thể kiểm tra trang web YouTube để xem ảnh hưởng của các yêu cầu ghi dữ liệu, chẳng hạn như yêu cầu tạo danh sách phát hoặc phần kênh.
Điều kiện tiên quyết
- Python từ 2.6 trở lên
- Công cụ quản lý gói pip
- Thư viện ứng dụng Python cho API của Google:
pip install --upgrade google-api-python-client
- google-auth, google-auth-OAuthlib và google-auth-httplib2 để cho phép người dùng.
pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2
- Khung ứng dụng web Flask Python (nếu bạn đang chạy mẫu Python cho các ứng dụng máy chủ web).
pip install --upgrade flask
- Thư viện HTTP yêu cầu.
pip install --upgrade requests
Thiết lập dự án và chạy mã mẫu
-
Tạo một dự án trong API Console và thiết lập thông tin xác thực OAuth 2.0 trong Bảng điều khiển API Google. Khi thiết lập thông tin xác thực, hãy đặt loại ứng dụng thành Ứng dụng web cho các mẫu sử dụng khung ứng dụng web Flask Python cũng như đặt URI chuyển hướng được ủy quyền cho các thông tin đăng nhập đó. Nếu không, hãy đặt loại ứng dụng thành Khác.
-
Lưu tệp
client_secret.json
liên kết với thông tin xác thực của bạn vào một tệp cục bộ. -
Sao chép mã mẫu đầy đủ vào một tệp cục bộ trong cùng thư mục với tệp
client_secret.json
(hoặc sửa đổi mẫu để xác định chính xác vị trí của tệp đó. -
Chạy mẫu từ dòng lệnh:
python sample.py
Lưu ý về các ví dụ về ứng dụng máy chủ web:
Nếu bạn đang chạy mẫu Python cho các ứng dụng máy chủ web, thì việc chạy tập lệnh sẽ khởi động một máy chủ web cục bộ. Để thực thi yêu cầu API, bạn cần truy cập trang web được phân phát trong trình duyệt. Ví dụ: các mẫu Python sử dụng khung ứng dụng web Flask có chứa một dòng như sau:
app.run('localhost', 8080, debug=True)
Mã này khởi động một máy chủ web cục bộ tạihttp://localhost:8080
. Tuy nhiên, tập lệnh không cố gắng thực thi yêu cầu API cho đến khi bạn thực sự chuyển đếnhttp://localhost:8080
trong trình duyệt. (URL cho máy chủ cục bộ của bạn cũng phải được đặt làm URI chuyển hướng được uỷ quyền cho thông tin cấp phép của bạn.) -
Hầu hết các mẫu in nội dung nào đó lên
STDOUT
hoặc, ví dụ như đối với ứng dụng web, tới trang web mà bạn đang xem. Bạn cũng có thể kiểm tra trang web YouTube để xem ảnh hưởng của các yêu cầu ghi dữ liệu, chẳng hạn như yêu cầu tạo danh sách phát hoặc phần kênh.
Điều kiện tiên quyết
- PHP 5.4 trở lên có cài đặt giao diện dòng lệnh (CLI) và tiện ích JSON.
- Công cụ quản lý phần phụ thuộc Composer.
- Thư viện ứng dụng API của Google cho PHP:
php composer.phar require google/apiclient:^2.0
Thiết lập dự án và chạy mã mẫu
-
Tạo một dự án trong API Console và thiết lập thông tin xác thực OAuth 2.0 trong Bảng điều khiển API Google. Khi thiết lập thông tin xác thực, hãy đặt loại ứng dụng thành Khác.
-
Lưu tệp
client_secret.json
liên kết với thông tin xác thực của bạn vào một tệp cục bộ. -
Sao chép mã mẫu đầy đủ vào một tệp cục bộ trong cùng thư mục với tệp
client_secret.json
(hoặc sửa đổi mẫu để xác định chính xác vị trí của tệp đó. -
Chạy mẫu từ dòng lệnh:
php sample.php
-
Hầu hết các mẫu in nội dung nào đó lên
STDOUT
hoặc, ví dụ như đối với ứng dụng web, tới trang web mà bạn đang xem. Bạn cũng có thể kiểm tra trang web YouTube để xem ảnh hưởng của các yêu cầu ghi dữ liệu, chẳng hạn như yêu cầu tạo danh sách phát hoặc phần kênh.
Điều kiện tiên quyết
- Ruby 2.0 trở lên
- Thư viện ứng dụng API của Google cho Ruby:
gem install google-api-client
Thiết lập dự án và chạy mã mẫu
-
Tạo một dự án trong API Console và thiết lập thông tin xác thực OAuth 2.0 trong Bảng điều khiển API Google. Khi thiết lập thông tin xác thực, hãy đặt loại ứng dụng thành Khác.
-
Lưu tệp
client_secret.json
liên kết với thông tin xác thực của bạn vào một tệp cục bộ. -
Sao chép mã mẫu đầy đủ vào một tệp cục bộ trong cùng thư mục với tệp
client_secret.json
(hoặc sửa đổi mẫu để xác định chính xác vị trí của tệp đó. -
Chạy mẫu từ dòng lệnh:
ruby sample.rb
-
Hầu hết các mẫu in nội dung nào đó lên
STDOUT
hoặc, ví dụ như đối với ứng dụng web, tới trang web mà bạn đang xem. Bạn cũng có thể kiểm tra trang web YouTube để xem ảnh hưởng của các yêu cầu ghi dữ liệu, chẳng hạn như yêu cầu tạo danh sách phát hoặc phần kênh.
-
Tạo một dự án trong API Console và thiết lập thông tin xác thực OAuth 2.0 trong Bảng điều khiển API Google. Khi thiết lập thông tin xác thực, hãy đặt loại ứng dụng thành Khác.
-
Lưu tệp
client_secret.json
liên kết với thông tin xác thực của bạn vào một tệp cục bộ. -
Sao chép mã mẫu đầy đủ vào một tệp cục bộ trong cùng thư mục với tệp
client_secret.json
(hoặc sửa đổi mẫu để xác định chính xác vị trí của tệp đó. -
Chạy mẫu từ dòng lệnh:
go run sample.go
-
Hầu hết các mẫu in nội dung nào đó lên
STDOUT
hoặc, ví dụ như đối với ứng dụng web, tới trang web mà bạn đang xem. Bạn cũng có thể kiểm tra trang web YouTube để xem ảnh hưởng của các yêu cầu ghi dữ liệu, chẳng hạn như yêu cầu tạo danh sách phát hoặc phần kênh.
Dùng hàm nguyên mẫu
Như đã lưu ý ở trên, các mẫu mã đầy đủ sử dụng mã nguyên mẫu để uỷ quyền và tạo các yêu cầu API. Ví dụ: hàm build_resource
trong các mẫu Python sử dụng một từ điển liên kết các thuộc tính tài nguyên với các giá trị của chúng để tạo một tài nguyên có thể chèn hoặc cập nhật. Các hàm tương tự được cung cấp cho JavaScript, PHP, Ruby, Go và Apps Script.
Ví dụ: các thẻ dưới đây cho biết cách gọi hàm tạo sẵn cho việc xây dựng tài nguyên để tạo tài nguyên playlist
. Xin lưu ý rằng các hàm nguyên mẫu không cần phải biết loại tài nguyên nào đang được tạo.
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)
Tải tài nguyên hiện có
Để kiểm tra yêu cầu cập nhật tài nguyên hiện có, bạn có thể tải các giá trị thuộc tính hiện tại của tài nguyên đó vào biểu mẫu cập nhật. Ví dụ: Để cập nhật siêu dữ liệu về một video, hãy nhập mã video vào trường thuộc tính id
rồi nhấp vào nút Tải tài nguyên. Các giá trị thuộc tính hiện tại sẽ tải vào biểu mẫu và bạn chỉ có thể cập nhật các giá trị mà bạn muốn thay đổi.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/youtube/images/interactive-snippet-load-resource.png?authuser=5&hl=vi)