Notice: We're retiring Works with Nest. See the home page for more information.
Google is committed to advancing racial equity for Black communities. See how.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Exemplos de leitura da API

Longe

Use a API do Nest para ouvir alterações nas estruturas e dispositivos, para que você possa tomar medidas para economizar energia quando os proprietários estiverem ausentes, notificá-los de que algo está errado (por exemplo, a porta da garagem está aberta) ou ativar os recursos para tornar o casa mais confortável e acolhedor.

Este guia mostra como ler dados de dispositivos e estruturas Nest. Para saber como fazer chamadas de gravação, consulte Exemplos de gravação de API .

Pré-requisitos

Antes de fazer chamadas de API, obtenha um token de acesso, conforme descrito em Autenticando com OAuth 2.0 .

Sobre chamadas de leitura REST

Para chamadas REST, use GET para ler dados.

As chamadas de leitura REST são úteis em cenários limitados, como nos seguintes casos de uso:

  • Chamadas pontuais ad-hoc
  • Laboratórios de prova de conceito
  • Solução de problemas
  • Aplicativos que pesquisam aproximadamente a cada minuto
  • Implementações do botão Atualizar

As chamadas de leitura REST não são úteis para cenários contínuos em tempo real ou de streaming.

Autenticação ao portador

Recomendamos a conformidade com o padrão OAuth , que oferece maior segurança usando a autenticação "Bearer" para transmitir o token de acesso. Chamadas com credenciais de cliente na URL não são recomendadas.

O cabeçalho "Content-Type" direciona o servidor para usar JSON.

O cabeçalho "Authorization" fornece acesso à API.

Exemplos

Nos exemplos a seguir, substitua YOUR_TOKEN_HERE pelo seu token de acesso específico, como "c.twC2q ...".

Leia estruturas e dispositivos

Para ler todos os dados da estrutura e do dispositivo (nível base), use o URL no nível raiz. Para respostas mais granulares, modifique o URL conforme necessário.

Ondulação
curl -v --location-trusted \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE " \
  -X GET "https://developer-api.nest.com/"
Multiplex de ondulação
curl -v --location-trusted \
  -H "Accept: text/event-stream" \
  -H "Authorization: Bearer LIST_OF_ACCESS_TOKENS " \
  -X GET "https://developer-api.nest.com/multiplex"
Ir
package main

import (
    "errors"
    "fmt"
    "io/ioutil"
    "net/http"
)

const token = " YOUR_TOKEN_HERE " // Update with your token

func main() {
    url := "https://developer-api.nest.com/"
    req, _ := http.NewRequest(http.MethodGet, url, nil)

    req.Header.Add(
        "Authorization",
        fmt.Sprintf("Bearer %s", token),
    )

    customClient := http.Client {
        CheckRedirect: func(redirRequest *http.Request, via []*http.Request) error {
            // Go's http.DefaultClient does not forward headers when a redirect 3xx
            // response is received. Thus, the header (which in this case contains the
            // Authorization token) needs to be passed forward to the redirect
            // destinations.
            redirRequest.Header = req.Header

            // Go's http.DefaultClient allows 10 redirects before returning an
            // an error. We have mimicked this default behavior.
            if len(via) >= 10 {
                return errors.New("stopped after 10 redirects")
            }
            return nil
        },
    }

    response, _ := customClient.Do(req)

    if response.StatusCode != 200 {
        panic(fmt.Sprintf(
            "Expected a 200 status code; got a %d",
            response.StatusCode,
        ))
    }

    defer response.Body.Close()
    body, _ := ioutil.ReadAll(response.Body)
    fmt.Println(string(body))

}
Node.js
"use strict"

var request = require('request');

var token = " YOUR_TOKEN_HERE "; // Update with your token

var url = "https://developer-api.nest.com";

var options = {
    "method": "GET",
    "path": "/",
    "headers": {
       "Authorization": "Bearer " + token
    },
    "followRedirect": true
};

var req = request(url, options, function(err, resp, data) {
    console.log('response code: ' + resp.statusCode);
    if (err) {
        console.log('Error: ' + err.message);
    }
    console.log("data: " + data);
});

req.end();

Para usar o exemplo de código Node.js., instale o módulo de solicitação ( https://www.npmjs.com/package/request ).

npm install request
Python 2
import hashlib
import json
import os
import requests

url = "https://developer-api.nest.com/"

token = " YOUR_TOKEN_HERE " # Update with your token

headers = {'Authorization': 'Bearer {0}'.format(token), 'Content-Type': 'application/json'}

response = requests.get(url, headers=headers, allow_redirects=False)
if response.status_code == 307:
    response = requests.get(response.headers['Location'], headers=headers, allow_redirects=False)

print(response.text)
Python 3
import http.client
from urllib.parse import urlparse

token = " YOUR_TOKEN_HERE " # Update with your token

conn = http.client.HTTPSConnection("developer-api.nest.com")
headers = {'authorization': "Bearer {0}".format(token)}
conn.request("GET", "/", headers=headers)
response = conn.getresponse()

if response.status == 307:
    redirectLocation = urlparse(response.getheader("location"))
    conn = http.client.HTTPSConnection(redirectLocation.netloc)
    conn.request("GET", "/", headers=headers)
    response = conn.getresponse()
    if response.status != 200:
        raise Exception("Redirect with non 200 response")

data = response.read()
print(data.decode("utf-8"))
Java
import java.io.IOException;
import okhttp3.Headers;
import okhttp3.OkHttpClient;
import okhttp3.OkHttpClient.Builder;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.Authenticator;
import okhttp3.Route;

public class ReadNest {

    public static void main(String[] args) throws IOException {
        String auth = "Bearer YOUR_TOKEN_HERE "; // Update with your token

        OkHttpClient client = new OkHttpClient.Builder()
        .authenticator(new Authenticator() {
          @Override public Request authenticate(Route route, Response response) throws IOException {
            return response.request().newBuilder()
                .header("Authorization", auth)
                .build();
          }
        })
        .followRedirects(true)
        .followSslRedirects(true)
        .build();

        Request request = new Request.Builder()
        .url("https://developer-api.nest.com")
        .get()
        .addHeader("content-type", "application/json; charset=UTF-8")
        .addHeader("authorization", auth)
        .build();

        try {
            System.out.println("Begin request:  ");
            Response response = client.newCall(request).execute();
            System.out.println(response.body().string());
            System.out.println("End request");
            System.out.println();
            Thread.sleep(2 * 1000);
        } catch (InterruptedException e) {
                e.printStackTrace();
        }
   }
}

Para usar o exemplo de código Java:

1. Faça o download dos últimos arquivos okhttp e okio Jar em http://square.github.io/okhttp/ . Além disso, faça o download do arquivo stdlib do Kotlin em https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib se a sua versão do okhttp depender disso.

2. Construa seu código.

3. Compile e execute o programa com as seguintes configurações de caminho de classe.

Substitua os números de versão da sua biblioteca nos comandos javac e java abaixo:
javac -cp .:okhttp- <ver> .jar:okio- <ver> .jar ReadNest.java
java -cp .:okhttp- <ver> .jar:okio- <ver> .jar:kotlin-stdlib- <ver> .jar ReadNest

Por exemplo, se você tiver as seguintes versões 3.11.0, 2.1.0 e 1.3.0, seus comandos terão esta aparência:
javac -cp .:okhttp-3.11.0.jar:okio-2.1.0.jar ReadNest.java
java -cp .:okhttp-3.11.0.jar:okio-2.1.0.jar:kotlin-stdlib-1.3.0.jar ReadNest

Usando o Postman para testar a API

A chamada Curl acima pode ser facilmente replicada no Postman.

Colocar cabeçalho para escrever

Use o link Código no Postman para traduzir uma chamada em diferentes idiomas como ponto de partida para um maior desenvolvimento.