0

CloudKit Web サービス API を使用して、Google Apps Script 内の運用 CloudKit コンテナーの公開データベースから記事レコードを取得しようとしています。

私のリクエストは、このページのドキュメントに基づいています。

これが私のコードです:

// variables for the CloudKit request URL
var path = "https://api.apple-cloudkit.com";
var version = "1";
var container = "iCloud.com.companyname.My-Container-Name";
var environment = "production";
var database = "public";

var token = "8888888888888_my_actual_token_88888888888888888"

function showArticles() {

  // assemble the URL
  var url = path + "/database/" + version + "/" + container + "/" + environment + "/" + database + "/records/query?ckAPIToken=" + token;

  // specify the record type to query
  var query = {
    recordType: "Article"
  };

  // specify the payload for the POST request
  var payload = {
    query : query
  };

  // set up the fetch options for the fetch request
  var options = {
    method : "POST",
    payload : payload
   };

  // make the request
  var response = UrlFetchApp.fetch(url, options);

  Logger.log(response);
}

UrlFetchApp.fetch(url, options)このエラーで失敗します:

Request failed for https://api.apple-cloudkit.com/database/1/iCloud.<?>-Container-Name/development/public/records/query?ckAPIToken=8888888888888_my_actual_token_88888888888888888 returned code 401. Truncated server response: {"uuid":"7d8a8547-ad08-4090-b4b3-917868a42f6f","serverErrorCode":"AUTHENTICATION_FAILED","reason":"no auth method found"} (use muteHttpExceptions option to examine full response) (line 30, file "Code")

数時間トラブルシューティングを行ってきましたが、何が間違っているのかわかりません。開発環境でも別のトークンで試してみましたが、同じことが起こります。

このページにはパラメータが記載ckWebAuthTokenされており、「省略して必要な場合、リクエストは失敗します」と書かれていますが、どのリクエストにckWebAuthToken. ckWebAuthTokenアクセスしようとしているレコードはコンテナーの公開データベースにあるため、必要ないと思いますが、AUTHENTICATION_FAILEDエラーではなくAUTHENTICATION_REQUIREDエラーが発生しています。

私を混乱させるのは、エラー メッセージに表示される次の URL です。

https://api.apple-cloudkit.com/database/1/iCloud.<?>-Container-Name/development/public/records/query?ckAPIToken=8888888888888_my_actual_token_88888888888888888

私はそれが次のようになることを期待します:

https://api.apple-cloudkit.com/database/1/iCloud.com.companyname.My-Container-Name/development/public/records/query?ckAPIToken=8888888888888_my_actual_token_88888888888888888

しかし、それが実際に要求されている URL であるかどうかはわかりませんurl。変数をログに記録すると、すべて問題ないように見えます。

トラブルシューティングのヒントや解決策をお寄せいただきありがとうございます。

アップデート

Postman を使用してみましたが、リクエストは同じエンドポイントと POST データで機能しました。URLのcontainerコンポーネントが Google Apps ScriptUrlFetchApp.fetch()メソッドによって破損しているようです。が URL にある<?>場合にのみ表示されるようです。com.

4

1 に答える 1

0

なぜこれが答えなのかはわかりませんが、 inを使用JSON.stringify()して動作させることができました:payloadoptions

var options = {
    method : "POST",
    payload : JSON.stringify(payload)
};
于 2016-04-21T07:17:31.443 に答える