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.
דף זה תורגם על ידי Cloud Translation API.
Switch to English

דוגמאות לכתוב API

תֶרמוֹסטָט

השתמש בממשק ה- API של Nest כדי להאזין לשינויים במבנים ובמכשירים, כך שתוכל לנקוט צעדים לחיסכון באנרגיה כשבעלי הבית אינם נמצאים, להודיע ​​להם שמשהו אינו כשורה (לדוגמא, דלת המוסך פתוחה), או להפעיל תכונות כדי להפוך את הבית יותר נוח ומסביר פנים.

במדריך זה תלמד כיצד להשתמש בפקודת PUT לכתיבת נתונים למכשירים ומבנים של קן. כדי ללמוד כיצד לבצע שיחות קריאה, עיין בדוגמאות לקריאת API .

עיין בדוגמאות הקוד הללו ולמד לכתוב נתונים לטרמוסטט Nest Learning ול- Nest Cam.

תנאים מוקדמים

לפני ביצוע שיחות API, השג אסימון גישה, כמתואר באימות עם OAuth 2.0 וקוד לדוגמא לאישור .

אודות REST כתוב שיחות

לביצוע שיחות REST, השתמש PUT או PATCH כדי לכתוב נתונים.

אימות נושא

אנו ממליצים על עמידה בתקן OAuth , המציע אבטחה מוגברת באמצעות אימות "Bearer" להעברת אסימון הגישה. לא מומלצות שיחות עם אישורי לקוח בכתובת האתר.

הכותרת "Content-Type" מכוונת את השרת להשתמש ב- JSON.

כותרת "Authorization" מספקת גישה לממשק API.

דוגמאות

בדוגמאות הבאות, החלף את YOUR_TOKEN_HERE באסימון הגישה הספציפי שלך, כגון "c.twC2q ...".

הגדר את המצב המרוחק למבנה

כדי לשנות את המצב המרוחק של מבנה ל"בית ", כתוב את השדה away באמצעות פורמט זה: "{"away": "home"}" , שם" away "הוא שם השדה, ו-" home "הוא מדינה חדשה.

לכתוב מבנה, נצטרך להוסיף את /structures מתנגדים ו structure_id לנתיב השורש URL. שים לב שמחרוזות מעוצבות עם "מרכאות".

curl --location-trusted -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE " \
  -d '{"away": "home"}' \
  "https://developer-api.nest.com/structures/ structure_id "

שנה את סולם הטמפרטורה (C / F) על תרמוסטט

בדוגמה זו נאלץ את סולם הטמפרטורות להציג מעלות פרנהייט. כשאתה בונה את המוצר שלך, היית קורא תחילה את סולם הטמפרטורות ואז מחליט אם ברצונך לשנות אותו בשיחת כתיבה.

לביצוע השיחה, ציין את השדה והערך שברצונך לעדכן: "{"temperature_scale": "F"}" , ושנה את נתיב השורש לכלול /devices/thermostats תרמוסטטים device_id התרמוסטט_ device_id .

סִלְסוּל
curl --location-trusted -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE " \
  -d '{"temperature_scale": "F"}' \
  "https://developer-api.nest.com/devices/thermostats/ device_id "
ללכת
package main

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

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

func main() {

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

    payload := strings.NewReader("{\"temperature_scale\": \"F\"}")

    req, _ := http.NewRequest("PUT", url, payload)

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

    customClient := http.Client{
        CheckRedirect: func(redirRequest *http.Request, via []*http.Request) error {
            redirRequest.Header = req.Header
            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(response)
    fmt.Println(string(body))

}
Node.js
"use strict"

const request = require('request');

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

/* Update with your token and thermostat device ID below */
var path = "/devices/thermostats/ device_id ";
var token = " YOUR_TOKEN_HERE ";

var options = {
    "method": "PUT",
    "url": url + path,
    "body": JSON.stringify({"temperature_scale": "F"}),
    "headers": {
        "Authorization": "Bearer " + token,
        "Content-Type": "application/json"
    },
    "followRedirect": true,
    "removeRefererHeader": false
};

request(options, function(err, resp, data) {
    if (resp.statusCode == 307) { // indicates a redirect is needed
        options.url = resp.headers.location;
        request(options, function(err, resp, data) {
            console.log('response code: ' + resp.statusCode);
            if (err) console.log('Error: ' + err.message);
            console.log("data: " + data);
        });
    }
});

כדי להשתמש בדוגמת הקוד Node.js, התקן את מודול הבקשה ( https://www.npmjs.com/package/request ).

npm install request
פייתון 2
import hashlib
import json
import os
import requests

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

token = " YOUR_TOKEN_HERE " # Update with your token

payload = "{\"temperature_scale\": \"F\"}"

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

response = requests.put(url, headers=headers, data=payload, allow_redirects=False)
if response.status_code == 307: # indicates a redirect is needed
    response = requests.put(response.headers['Location'], headers=headers, data=payload, allow_redirects=False)

print(response.text)
פייתון 3
import http.client
from urllib.parse import urlparse

token = " YOUR_TOKEN_HERE " # Update with your token

payload = "{\"temperature_scale\": \"F\"}"

url = "/devices/thermostats/ device_id "

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

if response.status == 307: # indicates a redirect is needed
    redirectLocation = urlparse(response.getheader("location"))
    conn = http.client.HTTPSConnection(redirectLocation.netloc)
    conn.request("PUT", url, payload, headers)
    response = conn.getresponse()
    if response.status != 200:
        raise Exception("Response failed: ", response.reason)

data = response.read()
print(data.decode("utf-8"))
ג'אווה
import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.MediaType;
import okhttp3.RequestBody;

public class NestWrite {

    public Request makeRequest(String url, String value) {
        MediaType mediaType = MediaType.parse("application/octet-stream");
        RequestBody body = RequestBody.create(mediaType, "{\"temperature_scale\": \"F\"}\"");
        String auth = "Bearer YOUR_TOKEN_HERE "; // Update with your token
        Request request = new Request.Builder()
        .url(url)
        .put(body)
        .addHeader("authorization", auth)
        .build();
        return request;
    }

    public static void main(String[] args) throws IOException
    {
        OkHttpClient client = new OkHttpClient();
        NestWrite postman = new NestWrite();

        String url = "https://developer-api.nest.com/devices/thermostats/ device_id ";
        String value = "{\"away\": \"home\"}";
        Request request = postman.makeRequest(url, value);
        Response response = client.newCall(request).execute();
        //System.out.println(response.toString());

        // Use the new URL in case of temporary redirect
        if(response.isRedirect()){
            String newUrl = response.header("Location");
            request = postman.makeRequest(newUrl, value);
            response = client.newCall(request).execute();
        }
        System.out.println(response.body().string());
    }
}

כדי להשתמש בדוגמה של קוד Java:

1. הורד את קבצי ה- okhttp וה- okio Jar האחרונים באתר http://square.github.io/okhttp/ . בנוסף, הורד את קובץ ה- Kotlin stdlib בכתובת https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib אם הגירסה שלך ל- okhttp תלויה בו.

2. בנה את הקוד שלך.

3. ערוך והפעל את התוכנית עם הגדרות הנתיב הכיתתי שלהלן.

החלף את מספרי גרסאות הספריה שלך בפקודות javac ו- java למטה:
javac -cp .:okhttp- <ver> .jar:okio- <ver> .jar NestWrite.java
java -cp .:okhttp- <ver> .jar:okio- <ver> .jar:kotlin-stdlib- <ver> .jar NestWrite

לדוגמה, אם ברשותך הגרסאות הבאות 3.11.0, 2.1.0 ו- 1.3.0, הפקודות שלך ייראו כך:
javac -cp .:okhttp-3.11.0.jar:okio-2.1.0.jar NestWrite.java
java -cp .:okhttp-3.11.0.jar:okio-2.1.0.jar:kotlin-stdlib-1.3.0.jar NestWrite

שנה את טמפרטורת היעד בתרמוסטט

לאחר שינוי סולם הטמפרטורה לדרגות פרנהייט, באפשרותך להגדיר את טמפרטורת היעד . השתמש באותו התהליך כמו דוגמאות קודמות, וציין את השדה / ערך לעדכון ושנה את נתיב השורש. שים לב "strings" numbers מעוצבים בצורה שונה.

curl --location-trusted -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE " \
  -d '{"target_temperature_f": 70}' \
  "https://developer-api.nest.com/devices/thermostats/ device_id "

הגדר תווית בהתאמה אישית על תרמוסטט

אתה יכול גם לשנות את תווית התרמוסטט כדי לתת לו כינוי בהתאמה אישית. כדי לכלול ציטוט בודד בשם, אתה יכול להשתמש בתו unicode \ u0027.

curl --location-trusted -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE " \
  -d '{"label": "Kate\u0027s Room"}' \
  "https://developer-api.nest.com/devices/thermostats/ device_id "

הגדר את סטטוס הזרימה במצלמה

בדוגמה זו אנו משנים את נתיב השורש כך שישקף את המכשיר שברצונך לשנות, /devices/cameras/ device_id , /devices/cameras/ device_id את מצב הזרמת המצלמה למצב ON .

curl --location-trusted -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE " \
  -d '{"is_streaming": true}' \
  "https://developer-api.nest.com/devices/cameras/ device_id "

באמצעות Postman לבדיקת ה- API

ניתן לשכפל בקלות את שיחות התלתלים לעיל ב- Postman. השלבים למטה משנים את טמפרטורת היעד בתרמוסטט כמו בדוגמת התלתל שלמעלה.

הכנס כותרת לכתוב
הכנס גוף לכתוב

השתמש בקישור קוד ב- Postman כדי לתרגם שיחה לשפות שונות כנקודת מוצא להמשך פיתוח.