Timeline: insert

Memerlukan otorisasi

Menyisipkan item baru ke linimasa. Lihat contoh.

Metode ini mendukung URI /upload dan menerima media yang diupload dengan karakteristik berikut:

  • Ukuran file maksimum: 10 MB
  • Jenis MIME Media yang Diterima: image/* , audio/* , video/*

Jika disediakan, media yang diupload akan disisipkan sebagai lampiran ke item linimasa.

Permintaan

Permintaan HTTP

Metode ini menyediakan fungsi upload media melalui dua URI terpisah. Untuk mengetahui detail selengkapnya, lihat dokumen tentang upload media.

  • URI upload, untuk permintaan upload media:
    POST https://www.googleapis.com/upload/mirror/v1/timeline
  • URI Metadata, untuk permintaan khusus metadata:
    POST https://www.googleapis.com/mirror/v1/timeline

Parameter

Nama parameter Nilai Deskripsi
Parameter kueri yang diperlukan
uploadType string Jenis permintaan upload ke URI /upload. Nilai yang dapat diterima adalah:
  • media - Upload sederhana. Upload media saja, tanpa metadata apa pun.
  • multipart - Upload multibagian. Mengupload media dan metadatanya, dalam satu permintaan.
  • resumable - Upload yang dapat dilanjutkan. Upload file dengan cara yang dapat dilanjutkan, menggunakan serangkaian setidaknya dua permintaan saat permintaan pertama menyertakan metadata.

Otorisasi

Permintaan ini memerlukan otorisasi dengan setidaknya satu cakupan berikut (baca selengkapnya tentang autentikasi dan otorisasi).

Cakupan
https://www.googleapis.com/auth/glass.timeline
https://www.googleapis.com/auth/glass.location

Isi permintaan

Dalam isi permintaan, sediakan resource Linimasa dengan properti berikut sebagai metadata. Untuk mengetahui informasi selengkapnya, lihat dokumen tentang upload media.

Nama properti Nilai Deskripsi Catatan
Properti Opsional
bundleId string ID paket untuk item ini. Layanan dapat menentukan bundleId untuk mengelompokkan banyak item sekaligus. Item-item tersebut muncul pada satu item tingkat atas di perangkat. dapat ditulis
canonicalUrl string URL kanonis yang mengarah ke versi kanonis/kualitas data data yang diwakili oleh item linimasa. dapat ditulis
creator nested object Pengguna atau grup yang membuat item ini. dapat ditulis
displayTime datetime Waktu yang akan ditampilkan saat item ini dilihat di linimasa, diformat sesuai dengan RFC 3339. Linimasa pengguna ini diurutkan secara kronologis pada waktu tampilan, sehingga juga akan menentukan tempat item ditampilkan di linimasa. Jika tidak disetel oleh layanan, waktu tampilan akan ditetapkan secara default ke waktu updated. dapat ditulis
html string Konten HTML untuk item ini. Jika text dan html diberikan untuk satu item, html akan dirender dalam linimasa.

Elemen HTML yang diizinkan - Anda dapat menggunakan elemen ini di kartu linimasa.

  • Header: h1, h2, h3, h4, h5, h6
  • Gambar: img
  • Daftar: li, ol, ul
  • Semantik HTML5: article, aside, details, figure, figcaption, footer, header, nav, section, summary, time
  • Struktural: blockquote, br, div, hr, p, span
  • Gaya: b, big, center, em, i, u, s, small, strike, strong, style, sub, sup
  • Tabel: table, tbody, td, tfoot, th, thead, tr

Elemen HTML yang diblokir: Elemen ini dan kontennya dihapus dari payload HTML.

  • Header dokumen: head, title
  • Sematan: audio, embed, object, source, video
  • Frame: frame, frameset
  • Pembuatan skrip: applet, script

Elemen lainnya: Elemen apa pun yang tidak tercantum akan dihapus, tetapi kontennya dipertahankan.

dapat ditulis
isBundleCover boolean Apakah item ini merupakan sampul paket.

Jika item ditandai sebagai sampul paket, item tersebut akan menjadi titik entri ke paket item yang memiliki bundleId yang sama dengan item tersebut. Tugas hanya akan ditampilkan di linimasa utama — bukan dalam paket yang terbuka.

Pada linimasa utama, item yang ditampilkan adalah:
  • Item yang memiliki isBundleCover yang ditetapkan ke true
  • Item yang tidak memiliki bundleId
Dalam sub-jadwal paket, item yang ditampilkan adalah:
  • Item yang memiliki bundleId yang dimaksud AND isBundleCover ditetapkan ke false
dapat ditulis
location nested object Lokasi geografis yang terkait dengan item ini. dapat ditulis
notification nested object Mengontrol cara notifikasi untuk item ini ditampilkan di perangkat. Jika informasi ini tidak ada, tidak ada notifikasi yang akan dibuat. dapat ditulis
notification.deliveryTime datetime Waktu pengiriman notifikasi. dapat ditulis
notification.level string Menjelaskan seberapa penting notifikasi tersebut. Nilai yang diizinkan adalah:
  • DEFAULT - Notifikasi dari tingkat kepentingan default. Bel akan diputar untuk memberi tahu pengguna.
dapat ditulis
recipients[] list Daftar pengguna atau grup yang diajak berbagi item ini. dapat ditulis
sourceItemId string String buram yang dapat Anda gunakan untuk memetakan item linimasa ke data dalam layanan Anda sendiri. dapat ditulis
speakableText string Versi konten yang dapat diucapkan dari item ini. Bersama dengan item menu READ_ALOUD, gunakan kolom ini untuk memberikan teks yang lebih jelas saat dibacakan secara lisan, atau untuk memberikan informasi yang diperluas tentang apa yang ditampilkan secara visual di Glass.

Glassware juga harus menentukan kolom speakableType, yang akan diucapkan sebelum teks ini jika konteks tambahan berguna, misalnya saat pengguna meminta item dibacakan dengan keras setelah notifikasi.
dapat ditulis
speakableType string Deskripsi yang dapat diucapkan tentang jenis item ini. Ini akan diumumkan kepada pengguna sebelum membaca konten item jika konteks tambahan berguna, misalnya saat pengguna meminta agar item dibacakan secara lisan setelah notifikasi disampaikan.

Ini harus berupa frasa kata benda singkat dan sederhana seperti "Email", "SMS", atau "Info Terbaru Planet Harian".

Glassware sebaiknya mengisi kolom ini untuk setiap item linimasa, meskipun item tersebut tidak berisi speakableText atau teks sehingga pengguna dapat mempelajari jenis item tanpa melihat layar.
dapat ditulis
text string Konten teks item ini. dapat ditulis
title string Judul item ini. dapat ditulis

Tanggapan

Jika berhasil, metode ini menampilkan resource Linimasa dalam isi respons.

Contoh

Catatan: Contoh kode yang tersedia untuk metode ini tidak merepresentasikan semua bahasa pemrograman yang didukung (lihat halaman library klien untuk mengetahui daftar bahasa yang didukung).

Java

Menggunakan library klien 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

Menggunakan library klien.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

Menggunakan library klien 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

Menggunakan library klien 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

Menggunakan library klien 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

Menggunakan library klien 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 Mentah

Tidak menggunakan library klien.

## 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--