Closed9

Skydio Cloud API を試してみる

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

API トークン取得

https://apidocs.skydio.com/reference/authentication

Skydio Cloud にアクセスする。

https://cloud.skydio.com/

Google で skydio cloud login などと検索しても大丈夫。


Skydio Cloud のログインページ

Skydio Cloud のログインにはパスワードは無く、メールアドレスを入力して SIGN IN ボタンを押すと認証コードがメールで届くので入力するとログインできる。


認証コード入力画面

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

API トークン生成


Generate New Token ボタンをクリックする。


モーダルが表示されるので Token Name を入力してから Add ボタンをクリックする。

トークンが表示されるのでコピーして保存しておく。

トークンは再表示されないので注意する。

薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

ワークスペース作成

コマンド
# ディレクトリを作成して移動します。
mkdir skydio-api && cd skydio-api
# package.json ファイルを作成します。
npm init -y
# npm パッケージをインストールします。
npm install dotenv node-fetch@2
npm install -D ts-node @types/node @types/node-fetch@2
# ファイルを作成します。
touch get-vehicles.ts .env
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

コーディング

get-vehicles.ts
import fetch from "node-fetch";

type GetVehiclesResponse = {
  data: {
    pagitation: {
      current_page: number;
      max_per_page: number;
      total_pages: number;
    };
    vehicles: {
      battery_status?: {
        charging?: boolean;
        percentage?: number;
      };
      dock?: {
        dock_serial?: string;
        dock_type?: "DOCK" | "DOCK_LITE";
      };
      flight_status?: "FLYING" | "POST_FLIGHT" | "PREP" | "REST" | "UNKNOWN";
      is_online?: boolean;
      is_online_via_mobile?: boolean;
      mission_status?: {
        current_mission?: {
          mission_name?: string;
          mission_template_uuid: string;
          seconds_until_takeoff?: string;
          state?: "IN_PROGRESS" | "PAUSED" | "POST_MISSION_ACTION";
        };
        next_scheduled_mission?: {
          mission_name?: string;
          mission_template_uuid: string;
          seconds_until_takeoff?: string;
          state?: "IN_PROGRESS" | "PAUSED" | "POST_MISSION_ACTION";
        };
      };
      remote_stream_state?:
        | "disabled"
        | "pending"
        | "active"
        | "blocked"
        | "device_offline"
        | "device_unsupported";
      upload_status?: {
        files_to_upload?: number;
        uploading?: true;
      };
      user_emails: string[];
      vehicle_class: "Skydio R1" | "Skydio 2" | "Skydio X2";
      vehicle_serial: string;
      vehicle_type?: "R1" | "R3" | "E1";
    }[];
  };
  meta: {
    time: number;
  };
  skydio_error_code: number;
  status_code: number;
};

async function main() {
  const url = "https://api.skydio.com/api/v0/vehicles";
  const getFlightsResponse = await fetch(url, {
    method: "GET",
    headers: {
      Authorization: process.env.SKYDIO_API_TOKEN!,
    },
  });

  if (getFlightsResponse.status !== 200) {
    throw new Error(await getFlightsResponse.text());
  }

  const getFlightsData =
    (await getFlightsResponse.json()) as GetVehiclesResponse;

  console.log(JSON.stringify(getFlightsData, null, 2));
}

main().catch((err) => console.error(err));
.env(例)
SKYDIO_API_TOKEN="0000000000000000000000000000000000000000000000000000000000000000"
薄田達哉 / tatsuyasusukida薄田達哉 / tatsuyasusukida

実行方法

コマンド
npx ts-node -r dotenv/config get-vehicles.ts
実行結果(例)
{
  "data": {
    "pagination": {
      "current_page": 1,
      "max_per_page": 25,
      "total_pages": 1
    },
    "vehicles": [
      {
        "battery_status": {
          "charging": false,
          "percentage": 1
        },
        "flight_status": "REST",
        "is_online": false,
        "is_online_via_mobile": false,
        "remote_stream_state": "device_unsupported",
        "upload_status": {
          "files_to_upload": 1,
          "uploading": true
        },
        "user_emails": [
          "susukida@example.com"
        ],
        "vehicle_class": "Skydio 2",
        "vehicle_serial": "Skydio2-xxxx",
        "vehicle_type": "R3"
      },
    ]
  },
  "meta": {
    "time": 1234567890.1234567
  },
  "skydio_error_code": 0,
  "status_code": 200
}
このスクラップは2023/10/25にクローズされました