Timeline: insert

Требуется авторизация

Вставляет новый элемент на временную шкалу. См. пример .

Этот метод поддерживает URI /upload и принимает загруженные медиафайлы со следующими характеристиками:

  • Максимальный размер файла: 10 МБ.
  • Допустимые типы MIME мультимедиа: image/* , audio/* , video/*

Если это предусмотрено, загруженный медиафайл вставляется как вложение в элемент временной шкалы.

Запрос

HTTP-запрос

Этот метод обеспечивает функцию загрузки мультимедиа через два отдельных URI. Более подробную информацию см. в документе о загрузке мультимедиа .

  • URI загрузки для запросов на загрузку мультимедиа:
    POST https://www.googleapis.com/upload/mirror/v1/timeline
  • URI метаданных для запросов только метаданных:
    POST https://www.googleapis.com/mirror/v1/timeline

Параметры

Имя параметра Ценить Описание
Обязательные параметры запроса
uploadType string Тип запроса на загрузку по URI /upload . Приемлемые значения:
  • mediaПростая загрузка . Загружайте только медиафайлы без каких-либо метаданных.
  • multipartмногочастная загрузка . Загрузите как медиафайл, так и его метаданные одним запросом.
  • resumableВозобновляемая загрузка . Загрузите файл возобновляемым способом, используя серию как минимум из двух запросов, причем первый запрос включает метаданные.

Авторизация

Этот запрос требует авторизации хотя бы с одной из следующих областей ( подробнее об аутентификации и авторизации читайте здесь ).

Объем
https://www.googleapis.com/auth/glass.timeline
https://www.googleapis.com/auth/glass.location

Тело запроса

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

Имя свойства Ценить Описание Примечания
Дополнительные свойства
bundleId string Идентификатор пакета для этого элемента. Службы могут указывать BundleId для группировки множества элементов вместе. Они отображаются под одним элементом верхнего уровня на устройстве. записываемый
canonicalUrl string Канонический URL-адрес, указывающий на каноническую/высококачественную версию данных, представленных элементом временной шкалы. записываемый
creator nested object Пользователь или группа, создавшая этот элемент. записываемый
displayTime datetime Время, которое должно отображаться при просмотре этого элемента на временной шкале, отформатированное в соответствии с RFC 3339. Временная шкала этого пользователя сортируется в хронологическом порядке по времени отображения, поэтому это также будет определять, где элемент отображается на временной шкале. Если это не установлено службой, по умолчанию отображается updated время. записываемый
html string HTML-содержимое этого элемента. Если для элемента указаны и text , и html , html будет отображаться на временной шкале.

Разрешенные элементы HTML . Вы можете использовать эти элементы в своих карточках временной шкалы.

  • Заголовки: h1, h2, h3, h4, h5, h6
  • Изображения: img
  • Списки: li, ol, ul
  • Семантика HTML5: article, aside, details, figure, figcaption, footer, header, nav, section, summary, time
  • Структурные: blockquote, br, div, hr, p, span
  • Стиль: b, big, center, em, i, u, s, small, strike, strong, style, sub, sup
  • Таблицы: table, tbody, td, tfoot, th, thead, tr

Заблокированные элементы HTML . Эти элементы и их содержимое удаляются из полезных данных HTML.

  • Заголовки документов: head, title
  • Встраивает: audio, embed, object, source, video
  • Рамки: frame, frameset
  • Скрипты: applet, script

Другие элементы : все элементы, не указанные в списке, удаляются, но их содержимое сохраняется.

записываемый
isBundleCover boolean Является ли этот товар чехлом для комплекта.

Если элемент помечен как обложка пакета, он будет точкой входа в набор элементов, имеющих тот же bundleId , что и этот элемент. Он будет отображаться только на основной временной шкале, а не в открытом пакете .

На основной временной шкале отображаются следующие элементы:
  • Элементы, для которых isBundleCover установлено значение true
  • Предметы, у которых нет bundleId
На подшкале времени пакета отображаются следующие элементы:
  • Элементы, для которых заданный bundleId И isBundleCover имеет значение false
записываемый
location nested object Географическое местоположение, связанное с этим элементом. записываемый
notification nested object Управляет отображением уведомлений об этом элементе на устройстве. Если это отсутствует, уведомление не будет создано. записываемый
notification. deliveryTime datetime Время, в которое должно быть доставлено уведомление. записываемый
notification. level string Описывает, насколько важно уведомление. Допустимые значения:
  • DEFAULT – Уведомления о важности по умолчанию. Для оповещения пользователей будет воспроизводиться звуковой сигнал.
записываемый
recipients[] list Список пользователей или групп, которым был предоставлен доступ к этому элементу. записываемый
sourceItemId string Непрозрачная строка, которую можно использовать для сопоставления элемента временной шкалы с данными в вашем собственном сервисе. записываемый
speakableText string Озвученная версия содержания этого элемента. Наряду с элементом меню READ_ALOUD используйте это поле для ввода текста, который будет более четким при чтении вслух, или для предоставления расширенной информации к тому, что отображается визуально на Glass.

Glassware также должен указать поле «speakableType», которое будет произноситься перед этим текстом в тех случаях, когда дополнительный контекст полезен, например, когда пользователь запрашивает чтение элемента вслух после уведомления.
записываемый
speakableType string Разговорное описание типа этого предмета. Об этом будет объявлено пользователю до прочтения содержимого элемента в тех случаях, когда дополнительный контекст полезен, например, когда пользователь запрашивает чтение элемента вслух после уведомления.

Это должна быть короткая и простая существительная фраза, например «Электронная почта», «Текстовое сообщение» или «Обновление новостей Daily Planet».

Glassware рекомендуется заполнять это поле для каждого элемента временной шкалы, даже если элемент не содержит говорящего текста или текста, чтобы пользователь мог узнать тип элемента, не глядя на экран.
записываемый
text string Текстовое содержимое этого элемента. записываемый
title string Название этого элемента. записываемый

Ответ

В случае успеха этот метод возвращает ресурс Timeline в теле ответа.

Примеры

Примечание. Примеры кода, доступные для этого метода, не представляют все поддерживаемые языки программирования (список поддерживаемых языков см. на странице клиентских библиотек ).

Ява

Использует клиентскую библиотеку 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 .

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

Использует клиентскую библиотеку 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 .

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 .

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

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

Не использует клиентскую библиотеку.

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