Получение 404 с NodeJS Запросом к Tesla API - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь получить данные моего автомобиля из API * Tesla publi c (https://www.teslaapi.io/vehicles/state-and-settings). Я использую NodeJS, с пакетами Request и Express, я могу получить начальный accessToken, а также идентификационный номер транспортного средства. Однако, когда я пытаюсь использовать эти два значения для фактического выполнения запроса GET для данных, я получаю ошибку 404. Я часами отлаживал и честно не знаю почему. Я попал в ту же конечную точку в почтальоне и получил правильный ответ, любая помощь будет принята с благодарностью! Кроме того, как я могу избежать необходимости делать последующие запросы внутри предыдущего обратного вызова, будет ли Asyn c путь к go? Спасибо!

const express = require("express");
const app = express();
const port = 3000
var path = require("path");


var bodyParser = require("body-parser");

app.use(express.static(path.join(__dirname, '/public')));

app.set("view engine", "ejs");


var accessToken;

var request = require('request').defaults({
    headers: {
        "x-tesla-user-agent": "TeslaApp/3.4.4-350/fad4a582e/android/8.1.0",
        "user-agent": "Mozilla/5.0 (Linux; Android 8.1.0; Pixel XL Build/OPM4.171019.021.D1; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/68.0.3440.91 Mobile Safari/537.36"}
    });




app.get("/", function(req, resp){

   /* GET ACCESS TOKEN */
     request({
       url: 'https://owner-api.teslamotors.com/oauth/token',
       method: 'POST',
       json: true,
       gzip: true,
       body: {
         "grant_type": 'password',
         "client_id": '81527cff06843c8634fdc09e8ac0abefb46ac849f38fe1e431c2ef2106796384',
         "client_secret":'c7257eb71a564034f9419ee651c7d0e5f7aa6bfbd18bafb5c5c033b093bb2fa3',
         "email": 'MYUSERNAME',
         "password": 'MYPASSWORD'
       },
      }, function(err, res, body) {
       accessToken = body.access_token;

            /* GET THE VEHICLE ID NUMBER */
            request({
            url: 'https://owner-api.teslamotors.com/api/1/vehicles',
            method: 'GET',
            headers: { "Authorization": "Bearer " + accessToken, "Content-Type": "application/json; charset=utf-8" } 

           }, function(err, res, body) {
        parsedBody = JSON.parse(body);
        var vehicleID = parsedBody.response[0].id;
        resp.render('index', {hi: accessToken} );
        var vehicleIDString = vehicleID.toString();
        var finalURL = 'https://owner-api.teslamotors.com/api/1/vehicles/' + vehicleIDString + '/vehicle_data';


            /*  Get Vehicle Data    (THIS IS GIVING 404) */
            request({

                method: 'GET',
                url: 'https://owner-api.teslamotors.com/api/1/vehicles/' + vehicleIDString + '/vehicle_data',
                        headers: { "Authorization": "Bearer " + accessToken, "Content-Type": "application/json; charset=utf-8" } 

            }, 
                function(err, res, body){    
                console.trace();

            });//END GET VEHICLE DATA

      });//END VEHICLE ID NUMBER REQUEST


     });//END ACCESS TOKEN REQUEST

});




/* HIT ANY ENDPOINT WE WANT */







app.listen(port, () => {console.log('Example app listening on port ${port}!') } )

1 Ответ

0 голосов
/ 23 февраля 2020

После того, как я наткнулся на какой-то другой поток, я понял, что оригинальная документация неверна, и вместо id это должно было быть id_s . Так что как вина по некачественной документации, так и мое плохое внимание к деталям. Спасибо !!

https://github.com/timdorr/tesla-api/issues/53

...