Timeline: insert

Cần phải uỷ quyền

Chèn một mục mới vào dòng thời gian. Xem ví dụ.

Phương thức này hỗ trợ URI /upload và chấp nhận nội dung nghe nhìn đã tải lên có các đặc điểm sau:

  • Kích thước tệp tối đa: 10 MB
  • Các loại MIME nội dung đa phương tiện được chấp nhận: image/* , audio/* , video/*

Nếu được cung cấp, thì nội dung nghe nhìn đã tải lên sẽ được chèn dưới dạng tệp đính kèm vào mục trong dòng thời gian.

Yêu cầu

Yêu cầu HTTP

Phương thức này cung cấp chức năng tải nội dung nghe nhìn lên thông qua 2 URI riêng biệt. Để biết thêm chi tiết, hãy xem tài liệu về cách tải nội dung nghe nhìn lên.

  • URI tải lên đối với các yêu cầu tải nội dung nghe nhìn lên:
    POST https://www.googleapis.com/upload/mirror/v1/timeline
  • URI siêu dữ liệu đối với các yêu cầu chỉ dành cho siêu dữ liệu:
    POST https://www.googleapis.com/mirror/v1/timeline

Tham số

Tên thông số Giá trị Mô tả
Tham số truy vấn bắt buộc
uploadType string Loại yêu cầu tải lên đối với URI /upload. Các giá trị được chấp nhận là:
  • mediaTải lên đơn giản. Chỉ tải nội dung nghe nhìn lên mà không có siêu dữ liệu.
  • multipartTải nhiều phần lên. Tải cả nội dung nghe nhìn và siêu dữ liệu của nội dung đó lên trong một yêu cầu duy nhất.
  • resumableTải lên tiếp nối. Tải tệp lên theo cách tiếp tục, sử dụng một chuỗi ít nhất hai yêu cầu, trong đó yêu cầu đầu tiên bao gồm siêu dữ liệu.

Ủy quyền

Yêu cầu này cần có sự uỷ quyền với ít nhất một trong các phạm vi sau (đọc thêm về tính năng xác thực và uỷ quyền).

Phạm vi
https://www.googleapis.com/auth/glass.timeline
https://www.googleapis.com/auth/glass.location

Nội dung yêu cầu

Trong nội dung yêu cầu, hãy cung cấp một tài nguyên Dòng thời gian có các thuộc tính sau làm siêu dữ liệu. Để biết thêm thông tin, hãy xem tài liệu về cách tải nội dung nghe nhìn lên.

Tên tài sản Giá trị Mô tả Ghi chú
Thuộc tính không bắt buộc
bundleId string Mã nhận dạng gói của mặt hàng này. Các dịch vụ có thể chỉ định bundleId để nhóm nhiều mục lại với nhau. Chúng xuất hiện bên dưới một mục cấp cao nhất trên thiết bị. có thể ghi
canonicalUrl string URL chính tắc trỏ đến phiên bản chuẩn/chất lượng cao của dữ liệu được biểu thị bằng mục dòng thời gian. có thể ghi
creator nested object Người dùng hoặc nhóm đã tạo mục này. có thể ghi
displayTime datetime Thời gian sẽ xuất hiện khi người dùng xem mục này trong tiến trình, theo định dạng RFC 3339. Dòng thời gian của người dùng này được sắp xếp theo trình tự thời gian trong thời gian hiển thị, vì vậy, điều này cũng sẽ xác định vị trí mặt hàng được hiển thị trong dòng thời gian. Nếu dịch vụ không đặt thời gian hiển thị mặc định, thời gian hiển thị sẽ là thời gian updated. có thể ghi
html string Nội dung HTML cho mục này. Nếu bạn cung cấp cả texthtml cho một mục thì html sẽ hiển thị trong tiến trình.

Phần tử HTML được phép – Bạn có thể sử dụng những phần tử này trong thẻ dòng thời gian của mình.

  • Tiêu đề: h1, h2, h3, h4, h5, h6
  • Hình ảnh: img
  • Danh sách: li, ol, ul
  • Ngữ nghĩa HTML5: article, aside, details, figure, figcaption, footer, header, nav, section, summary, time
  • Kết cấu: blockquote, br, div, hr, p, span
  • Kiểu: b, big, center, em, i, u, s, small, strike, strong, style, sub, sup
  • Bảng: table, tbody, td, tfoot, th, thead, tr

Các phần tử HTML bị chặn: Các phần tử này và nội dung trong đó bị xoá khỏi các phần tử HTML.

  • Tiêu đề tài liệu: head, title
  • Các video nhúng: audio, embed, object, source, video
  • Khung hình: frame, frameset
  • Đang viết tập lệnh: applet, script

Các phần tử khác: Mọi phần tử không được liệt kê sẽ bị xoá, nhưng nội dung của các phần tử đó được giữ nguyên.

có thể ghi
isBundleCover boolean Mục này có phải là ảnh bìa theo gói hay không.

Nếu một mặt hàng được đánh dấu là bìa theo gói, thì đó sẽ là điểm truy cập đến nhóm các mặt hàng có cùng bundleId với mặt hàng đó. Thông báo sẽ chỉ hiển thị trên dòng thời gian chính, không phải trong gói đã mở.

Trên dòng thời gian chính, các mục được hiển thị là:
  • Các mục đã đặt isBundleCover thành true
  • Các mục không có bundleId
Trong dòng thời gian phụ của gói, các mục xuất hiện là:
  • Các mục có bundleId liên quan isBundleCover được đặt thành false
có thể ghi
location nested object Vị trí địa lý liên kết với mục này. có thể ghi
notification nested object Kiểm soát cách hiện các thông báo về mục này trên thiết bị. Nếu thiếu thông tin này thì sẽ không có thông báo nào được tạo. có thể ghi
notification.deliveryTime datetime Thời điểm thông báo cần được gửi. có thể ghi
notification.level string Mô tả mức độ quan trọng của thông báo. Các giá trị được phép là:
  • DEFAULT – Các thông báo có mức độ quan trọng mặc định. Một tiếng chuông sẽ được phát để thông báo cho người dùng.
có thể ghi
recipients[] list Danh sách người dùng hoặc nhóm đã được chia sẻ mục này. có thể ghi
sourceItemId string Chuỗi mờ bạn có thể dùng để ánh xạ một mục dòng thời gian với dữ liệu trong dịch vụ của mình. có thể ghi
speakableText string Phiên bản có thể nói của nội dung của mục này. Cùng với mục trong trình đơn READ_ALOUD, hãy sử dụng trường này để cung cấp văn bản rõ ràng hơn khi được đọc to hoặc để cung cấp thông tin mở rộng về nội dung hiển thị trực quan trên Glass.

Đồ thuỷ tinh cũng cần chỉ định trường SpeakableType. Trường này sẽ được nói trước văn bản này trong những trường hợp có ngữ cảnh bổ sung hữu ích, chẳng hạn như khi người dùng yêu cầu đọc to mục sau khi có thông báo.
có thể ghi
speakableType string Nội dung mô tả có thể nói về loại mục này. Thông báo này sẽ được thông báo cho người dùng trước khi đọc nội dung của mặt hàng trong trường hợp bối cảnh bổ sung hữu ích, chẳng hạn như khi người dùng yêu cầu đọc to mặt hàng sau khi có thông báo.

Đây phải là một cụm danh từ ngắn, đơn giản như "Email", "Tin nhắn văn bản" hoặc "Tin tức hành tinh hằng ngày".

Bạn nên điền sẵn trường này cho mọi mục trên dòng thời gian, ngay cả khi mục đó không chứa văn bản hoặc văn bản SpeakableText để người dùng có thể tìm hiểu loại mục mà không cần nhìn vào màn hình.
có thể ghi
text string Nội dung văn bản của mục này. có thể ghi
title string Tiêu đề của mục này. có thể ghi

Phản hồi

Nếu thành công, phương thức này sẽ trả về một Tài nguyên dòng thời gian trong nội dung phản hồi.

Ví dụ

Lưu ý: Các đoạn mã mẫu của phương thức này không phải là ví dụ cho mọi ngôn ngữ lập trình được hỗ trợ (xem trang thông tin về các thư viện dùng cho ứng dụng để biết danh sách các ngôn ngữ được hỗ trợ).

Java

Dùng thư viện ứng dụng Java.

import com.google.api.client.http.InputStreamContent;
import com.google.api.services.mirror.Mirror;
import com.google.api.services.mirror.model.NotificationConfig;
import com.google.api.services.mirror.model.TimelineItem;

import java.io.IOException;
import java.io.InputStream;

public class MyClass {
  // ...

  /**
   * Insert a new timeline item in the user's glass with an optional
   * notification and attachment.
   * 
   * @param service Authorized Mirror service.
   * @param text timeline item's text.
   * @param contentType Optional attachment's content type (supported content
   *        types are "image/*", "video/*" and "audio/*").
   * @param attachment Optional attachment stream.
   * @param notificationLevel Optional notification level, supported values are
   *        {@code null} and "AUDIO_ONLY".
   * @return Inserted timeline item on success, {@code null} otherwise.
   */
  public static TimelineItem insertTimelineItem(Mirror service, String text, String contentType,
      InputStream attachment, String notificationLevel) {
    TimelineItem timelineItem = new TimelineItem();
    timelineItem.setText(text);
    if (notificationLevel != null && notificationLevel.length() > 0) {
      timelineItem.setNotification(new NotificationConfig().setLevel(notificationLevel));
    }
    try {
      if (contentType != null && contentType.length() > 0 && attachment != null) {
        // Insert both metadata and attachment.
        InputStreamContent mediaContent = new InputStreamContent(contentType, attachment);
        return service.timeline().insert(timelineItem, mediaContent).execute();
      } else {
        // Insert metadata only.
        return service.timeline().insert(timelineItem).execute();
      }
    } catch (IOException e) {
      System.err.println("An error occurred: " + e);
      return null;
    }
  }

  // ...
}

.NET

Dùng thư viện ứng dụng.NET.

using System;
using System.IO;

using Google.Apis.Mirror.v1;
using Google.Apis.Mirror.v1.Data;

public class MyClass {
  // ...

  /// <summary>
  /// Insert a new timeline item in the user's glass with an optional
  /// notification and attachment.
  /// </summary>
  /// <param name='service'>Authorized Mirror service.</param>
  /// <param name='text'>Timeline Item's text.</param>
  /// <param name='contentType'>
  /// Optional attachment's content type (supported content types are
  /// "image/*", "video/*" and "audio/*").
  /// </param>
  /// <param name='attachment'>Optional attachment stream</param>
  /// <param name='notificationLevel'>
  /// Optional notification level, supported values are null and
  /// "AUDIO_ONLY".
  /// </param>
  /// <returns>
  /// Inserted timeline item on success, null otherwise.
  /// </returns>
  public static TimelineItem InsertTimelineItem(MirrorService service,
      String text, String contentType, Stream attachment,
      String notificationLevel) {
    TimelineItem timelineItem = new TimelineItem();
    timelineItem.Text = text;
    if (!String.IsNullOrEmpty(notificationLevel)) {
      timelineItem.Notification = new NotificationConfig() {
        Level = notificationLevel
      };
    }
    try {
      if (!String.IsNullOrEmpty(contentType) && attachment != null) {
        // Insert both metadata and media.
        TimelineResource.InsertMediaUpload request = service.Timeline.Insert(
            timelineItem, attachment, contentType);
        request.Upload();
        return request.ResponseBody;
      } else {
        // Insert metadata only.
        return service.Timeline.Insert(timelineItem).Fetch();
      }
    } catch (Exception e) {
      Console.WriteLine("An error occurred: " + e.Message);
      return null;
    }
  }

  // ...
}

PHP

Dùng thư viện ứng dụng PHP.

/**
 * Insert a new timeline item in the user's glass with an optional
 * notification and attachment.
 *
 * @param Google_MirrorService $service Authorized Mirror service.
 * @param string $text timeline item's text.
 * @param string $contentType Optional attachment's content type (supported
 *                            content types are "image/*", "video/*"
 *                            and "audio/*").
 * @param string $attachment Optional attachment content.
 * @param string $notificationLevel Optional notification level,
 *                                  supported values are {@code null}
 *                                  and "AUDIO_ONLY".
 * @return Google_TimelineItem Inserted timeline item on success, otherwise.
 */
function insertTimelineItem($service, $text, $contentType, $attachment,
                            $notificationLevel) {
  try {
    $timelineItem = new Google_TimelineItem();
    $timelineItem->setText($text);
    if ($notificationlevel != null) {
      $notification = new Google_NotificationConfig();
      $notification->setLevel($notificationLevel);
      $timelineItem->setNotification($notification);
    }
    $optParams = array();
    if ($contentType != null && $attachment != null) {
      $optParams['data'] = $attachment;
      $optParams['mimeType'] = $contentType;
    }
    return $service->timeline->insert($timelineItem, $optParams);
  } catch (Exception $e) {
    print 'An error occurred: ' . $e->getMessage();
    return null;
  }
}

Python

Dùng thư viện ứng dụng Python.

import io

from apiclient import errors
from apiclient.http import MediaIoBaseUpload
# ...

def insert_timeline_item(service, text, content_type=None, attachment=None,
                         notification_level=None):
  """Insert a new timeline item in the user's glass.

  Args:
    service: Authorized Mirror service.
    text: timeline item's text.
    content_type: Optional attachment's content type (supported content types
                  are 'image/*', 'video/*' and 'audio/*').
    attachment: Optional attachment as data string.
    notification_level: Optional notification level, supported values are None
                        and 'AUDIO_ONLY'.

  Returns:
    Inserted timeline item on success, None otherwise.
  """
  timeline_item = {'text': text}
  media_body = None
  if notification_level:
    timeline_item['notification'] = {'level': notification_level}
  if content_type and attachment:
    media_body = MediaIoBaseUpload(
        io.BytesIO(attachment), mimetype=content_type, resumable=True)
  try:
    return service.timeline().insert(
        body=timeline_item, media_body=media_body).execute()
  except errors.HttpError, error:
    print 'An error occurred: %s' % error

Ruby

Dùng thư viện ứng dụng Ruby.

##
# Insert a new Timeline Item in the user's glass.
#
# @param [Google::APIClient] client
#   Authorized client instance.
# @param [String] text
#   Timeline item's text.
# @param [String] content_type
#   Optional attachment's content type (supported content types are 'image/*',
#   'video/*' and 'audio/*').
# @param [String] filename
#   Optional attachment's filename.
# @param [String] notification_level
#   Optional notification level, supported values are nil and 'AUDIO_ONLY'.
# @return [Google::APIClient::Schema::Mirror::V1::TimelineItem]
#   Timeline item instance if successful, nil otherwise.
def insert_timeline_item(client, text, content_type, filename,
                         notification_level)
  mirror = client.discovered_api('mirror', 'v1')
  timeline_item = mirror.timeline.insert.request_schema.new({ 'text' => text })
  if notification_level
    timeline_item.notification = { 'level' => notification_level }
  end
  result = nil
  if filename
    media = Google::APIClient::UploadIO.new(filename, content_type)
    result = client.execute(
      :api_method => mirror.timeline.insert,
      :body_object => timeline_item,
      :media => media,
      :parameters => {
        'uploadType' => 'multipart',
        'alt' => 'json'})
  else
    result = client.execute(
      :api_method => mirror.timeline.insert,
      :body_object => timeline_item)
  end
  if result.success?
    return result.data
  else
    puts "An error occurred: #{result.data['error']['message']}"
  end
end

Go

Dùng Thư viện ứng dụng Go.

import (
	"code.google.com/p/google-api-go-client/mirror/v1"
	"fmt"
	"io"
)

// InsertTimelineItem inserts a new timeline item in the user's glass with an
// optional notification and attachment.
func InsertTimelineItem(g *mirror.Service, text string, attachment io.Reader,
	notificationLevel string) (*mirror.TimelineItem, error) {
	t := &mirror.TimelineItem{Text: text}
	if notificationLevel != "" {
		t.Notification = &mirror.NotificationConfig{Level: notificationLevel}
	}
	req := g.Timeline.Insert(t)
	if attachment != nil {
		// Add attachment to the timeline item.
		req.Media(attachment)
	}
	r, err := req.Do()
	if err != nil {
		fmt.Printf("An error occurred: %v\n", err)
		return nil, err
	}
	return r, nil
}

HTTP thô

Không sử dụng thư viện ứng dụng.

## A very simple timeline item

POST /mirror/v1/timeline HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer auth token
Content-Type: application/json
Content-Length: 26

{ "text": "Hello world" }

## A more complete timeline item with an attachment

POST /mirror/v1/timeline HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer auth token
Content-Type: multipart/related; boundary="mymultipartboundary"
Content-Length: length

--mymultipartboundary
Content-Type: application/json; charset=UTF-8

{
 "text": "Hello world",
 "menuItems": [
   { "action": "REPLY" },
   {
     "action": "CUSTOM",
     "id": "complete"
     "values": [{
       "displayName": "Complete",
       "iconUrl": "http://example.com/icons/complete.png"
     }]
   }
}
--mymultipartboundary
Content-Type: image/jpeg
Content-Transfer-Encoding: binary

binary image data
--mymultipartboundary--