0

我正在尝试从公共 Tesla API ( https://www.teslaapi.io/vehicles/state-and-settings ) 中检索我的车辆数据。我正在使用 NodeJS,通过 Request 和 Express 包,我能够检索初始 accessToken 以及车辆 ID 号。但是,当我尝试使用这两个值实际对数据发出 GET 请求时,我不断收到 404 错误。我已经调试了几个小时,老实说不知道为什么。我在邮递员中到达了相同的端点并得到了正确的响应,任何帮助将不胜感激!另外,我怎样才能避免在前一个回调中发出后续请求,异步是要走的路吗?谢谢!

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}!') } )
4

2 回答 2

1

今天我在 NodeRed 中使用 TeslaJS 时遇到了类似的错误(404),这是由于 Tesla 更改了车辆 ID 值(id_s 字段)。

“车辆”命令仍在工作,然后可以检索新的 id_s 值并将其传递给以下命令。使用这个新的id_s时,错误消失,问题解决。

希望这可以帮助其他有同样问题的人......

一个好的做法可能是使用不会随时间变化的 VIN 值选择 id_s...

于 2022-02-04T09:08:41.960 回答
0

在偶然发现其他线程之后,我意识到原始文档是不正确的,而不是id,它应该是id_s。因此,既是文档不足的错误,也是我对细节的关注不足。谢谢!!

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

于 2020-02-23T05:43:33.117 回答