見出し画像

GAS × LastPassAPI スプレッドシートにLastPassに格納されている情報を書き込みたい その2 HTTPリクエスト

前回

GASコード

情報を得たいので、APIを叩くってやつをやりたい訳です。

GASのコードとしては、結果としては下記のようなもので getsfdata のレスポンスは得ることができています。

function test_getsfdata() {
  const url = 'https://lastpass.com/enterpriseapi.php';
  const scriptProperties = PropertiesService.getScriptProperties();
  const cid = scriptProperties.getProperty('AccountNumber');
  const provhash = scriptProperties.getProperty('ProvisioningHash');

  const options = {
    "method": "POST",
    "header": { "Content-Type": "application/json", },
    "payload": {
      "cid": cid,
      "provhash": provhash,
      "cmd": "getsfdata",//getdetailedsfdata だと 429エラー。 "getuserdata", "getsfdata"は通る
      "data": "all"
    }
  }

  const response = UrlFetchApp.fetch(url, options);
  console.log(`response: ${response}`);
  const obj = JSON.parse(response);
  console.log(obj);
}

しかし、わからないのはコマンド(cmd)をgetdetailedsfdata にすると、
一発で 429 Too Many Requestsエラーが返ってくるのです。
どういうことなんだ。

上記は結果としてシンプルなコードになりました。しかし、当初はgetdetailedsfdataで試みていたので、なぜ通らないのか、GASコードを色々と弄っていました。その痕跡↓


// const auth =
  // {
  //   "type": "noauth"
  // }
  // const headers =
  // {
  //   "Content-Type": "application/json",
  // }
  // const payload = {
  //   "cid": cid,
  //   "provhash": provhash,
  //   "cmd": "getdetailedsfdata",
  //   "data": "all"
  // }


  // const raw = {
  //   "cid": cid,
  //   "provhash": provhash,
  //   "cmd": "getsfdata",
  //   "data": "all"
  // }

  // const payload = {
  //   "mode": "raw",
  //   "raw": JSON.stringify(raw),
  //   "options": {
  //     "raw": {
  //       "language": "json"
  //     }
  //   }
  // }

参考

  1. 仕組みっぽいPython(詳しくはわからないです

  2. Use the LastPass Provisioning API

  3. Get Shared Folder Data via LastPass API

  4. Get Detailed Shared Folder Data via LastPass API

  5. Get User Data via LastPass API

  6. https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app

methodがGETでないのが不思議な気もしますが、公式にPOSTにせよと書いてあります。この辺りのことは管理コンソール>Advanced>Enterprise API から確認できます。


補足
プロパティはコード書いて格納するか、下図のようにGASのエディタから編集してください。cid(AccountNumber)は公式のヘルプを参照してください。

Where can I find the CID (account number) and API secret?


curl

curlが使えると良さそうなのですが、自分は詳しくありません。
下記の記事をみて、東京の天気予報はゲットできましが、その先どうすっか。

https://aprico-media.com/posts/8236


WindowsでBOXのCLIをどうにかした時のコマンドと似ているような気はします。

Postman

使えるようになると良さそうですが、これも自分は詳しくありません。

Use the LastPass Enterprise API Postman Collection

https://support.lastpass.com/help/use-the-lastpass-enterprise-api-postman-collection


謝辞

本件にあたっては、 Shinji(@sakichi01_)さんに大変お世話になりました。
深く感謝申し上げます。
ありがとうございます!!!!!!

一連のツイート、スレッドはこちら


続き


#GAS
#API
#パスワード管理
#json
#httpリクエスト
#LastPass
#curl
#Postman

いただいたサポートで、書籍代や勉強費用にしたり、美味しいもの食べたりします!