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 dimasukkan 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:
  • media - Upload sederhana. Upload media saja, tanpa metadata apa pun.
  • multipart - Upload multibagian. Mengupload media beserta metadatanya, dalam satu permintaan.
  • resumable - Upload yang dapat dilanjutkan. Upload file dengan cara yang dapat dilanjutkan, menggunakan serangkaian setidaknya dua permintaan yang permintaan pertama menyertakan metadata.

Otorisasi

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

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

Isi permintaan

Dalam isi permintaan, berikan 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 bersama-sama. Iklan muncul pada satu item tingkat atas di perangkat. dapat ditulis
canonicalUrl string URL kanonis yang mengarah ke versi kanonis/berkualitas tinggi dari data yang direpresentasikan 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, yang diformat sesuai dengan RFC 3339. Linimasa pengguna ini diurutkan secara kronologis dalam waktu tampilan, sehingga hal ini 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 disediakan untuk suatu item, html akan dirender di 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
  • Bingkai: 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. Item tersebut hanya akan ditampilkan di linimasa utama, bukan di dalam paket yang dibuka.

Di linimasa utama, item yang ditampilkan adalah:
  • Item dengan isBundleCover ditetapkan ke true
  • Item yang tidak memiliki bundleId
Dalam sub-linimasa paket, item yang ditampilkan adalah:
  • Item yang memiliki bundleId yang dimaksud DAN isBundleCover ditetapkan ke false
dapat ditulis
location nested object Lokasi geografis yang terkait dengan item ini. dapat ditulis
notification nested object Mengontrol bagaimana notifikasi untuk item ini ditampilkan di perangkat. Jika informasi ini tidak ada, notifikasi tidak akan dibuat. dapat ditulis
notification.deliveryTime datetime Waktu saat notifikasi harus dikirimkan. dapat ditulis
notification.level string Menjelaskan seberapa penting notifikasi. Nilai yang diizinkan adalah:
  • DEFAULT - Notifikasi tingkat kepentingan default. Lonceng 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 di layanan Anda sendiri. dapat ditulis
speakableText string Versi lisan dari konten item ini. Bersama dengan item menu READ_ALOUD, gunakan kolom ini untuk memberikan teks yang akan lebih jelas saat dibaca dengan keras, atau untuk memberikan informasi yang diperluas tentang apa yang ditampilkan secara visual di Glass.

Gelas juga harus menentukan kolom speechableType, yang akan diucapkan sebelum teks ini jika konteks tambahan berguna, misalnya saat pengguna meminta item dibacakan dengan lantang setelah notifikasi.
dapat ditulis
speakableType string Deskripsi yang dapat diucapkan dari jenis item ini. Hal ini akan diumumkan kepada pengguna sebelum membaca konten item jika konteks tambahan dapat digunakan, misalnya saat pengguna meminta item tersebut dibacakan secara lisan setelah notifikasi.

Frasa ini harus berupa frasa kata benda yang singkat dan sederhana seperti "Email", "Pesan teks", atau "Pembaruan Berita Daily Planet".

Glassware dianjurkan untuk mengisi kolom ini untuk setiap item linimasa, meskipun item tersebut tidak berisi speechableText 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

Respons

Jika berhasil, metode ini akan 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--