1

UiInstance.getId()値に基づいて匿名のユーザーセッション情報を交換するために、2つのGoogleガジェットをGoogleサイトで確実に通信させようとして、3日間立ち往生しています。ガジェットからガジェットへのpubsub機能は廃止されたため、サーバーガジェットのContentServiceを使用して、クライアントガジェットから発信されたdoPostリクエストを処理しようとしています。つまり、セッション情報をサーバーガジェットに保存してプルします。サイト内の他のページのガジェットへのデータ-これが可能かどうかはわかりません。

しかし、StackOverflowに投稿されたContentServiceのさまざまな例をいじくり回そうとしても行き詰まっています。私は非常に基本的なステップで立ち往生しており、以下の非常に単純なサーバーコードを超えて進むことができません。クライアントガジェットから、使用する必要のあるサーバーガジェットのURLがわかりません。紛らわしい結果になっているようです。

サーバーコード:

function doGet(e) {
  var output = ContentService.createTextOutput();
  output.setContent("Hi from ContentServer!");
  return output;
}

私が従った手順:

1)サーバーをWebアプリとして公開し、誰でも/匿名でアクセスできるように設定します。

2)公開ウィンドウのポップアップには、ガジェットが https://script.google.com/macros/s/AKfycbyIa07kBC-gqG0nJq3Up5GzUntbTaYcM1KmaYF7vQvFIWN_qxA/execで利用可能であることが示されます。

3)ブラウザを使用してリンクを開くと、「不明なマクロdoGet」が表示されます。

4)「最新のコードについてWebアプリをテストする」というリンクをクリックした場合。ウィンドウのポップアップを発行するから、私を取るように見える https://script.googleusercontent.com/echo?user_content_key=WwuWW_Hhp2wlHpHWsX-qAwu7jtKrwlt1fkkesojKEWeJXKm5AoUOhuRHxu4RIHLrWovOBUsHhOB3No0RYr05RE4tWtliFlXKm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnG5I1NuldcVdfVF6dOROkmljXtr0dWIARhfeRbamxWJIIJeMc5tWnrGPpehwqDtynQ&lib=MfYY3NqJ0IdcpreIfwd3uwgmzn1S_adTp

上記の手順4のリンクはブラウザからは機能しますが、クライアントガジェットからは非常に不安定です。初めてバージョンを作成して公開したときに機能するようですが、バージョンを1回でも更新すると、生のHTMLが返されます。

些細な手順が欠けているか、Webアプリガジェットに深刻なバージョン管理または展開のバグがあると思います。

私は非常に便利なstackoverflowの次のスレッドをチェックしました。 ContentServiceとdoPostを使用してRESTAPIを作成する方法

KamilGはここで問題を克服したようですGoogleAppsScriptの別のdoGet()問題-「不明なマクロdoGet」エラー

しかし、それは私にとって非常に不安定であり、サーバーガジェットからContentServiceを機能させるための信頼できる手順を特定することはできません。

どんな助けと説明も大歓迎です。

これが私のクライアントガジェットコードです。

function doGet(e) {
//  var url = "https://script.google.com/macros/s/AKfycbyIa07kBC-gqG0nJq3Up5GzUntbTaYcM1KmaYF7vQvFIWN_qxA/exec";
  //var url = "https://script.googleusercontent.com/echo?user_content_key=9tzQxTSPm8ADsHKl4bCg6ru-49C19kYZCW8IRuWiWi-Xe_lTlQZS4xq8v5aPqjR6Ybj7-xjjJXyQPhOH0T3KFtJUtXc7U-Dkm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnJlCLn2pnKC0O1TYz53ccgjxtVC9ccM8kFegFJ0AJSK_YP_ylqfjfm1EU_BUbZUu-88PMDJ6xpj8&lib=MTLHdJRs3UPYj3bYgbhBNnNGZ7UmftE34";
  var url = "https://script.googleusercontent.com/echo?user_content_key=LvlwGkBktQ732xyD1HJbh5OhMsuhkidt_rOovw-olm-wJQF4LlErMDSxsfDaAb4UBYqOeTI3-8soIBj-KaOCDi0WlUav4Nl_m5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnG5I1NuldcVdfVF6dOROkmljXtr0dWIARhfeRbamxWJIIJeMc5tWnrGPpehwqDtynQ&lib=MfYY3NqJ0IdcpreIfwd3uwgmzn1S_adTp";

  // WELL ONE OF THE URLS WORKS FROM ABOVE!!! BUT ONLY TILL I UPDATE THE SERVER WEB APP VERSION :(

  var app = UiApp.createApplication().setTitle("ClientService Client test");
  app.setStyleAttribute("background", "azure");

  var fetchMethod = 'get';
  var response = UrlFetchApp.fetch(url, {method: fetchMethod});

  //var lbl = app.createHTML("<b>Response :</b>" + response.getContentText());
  var lbl = app.createTextArea().setText(response.getContentText());

  var lbl1 = app.createHTML("<b>Response code :</b> "
                            + response.getResponseCode()); 

  app.add(lbl);
  app.add(lbl1);
  return app;
}

助けが必要です。

4

1 に答える 1

3

This functioning as intended for the most part, but I think there might be some alternatives.

  1. Regarding your point #3 - That URL above works. There must have been something wrong with the version you tested (perhaps you didn't declare doGet correctly?).
  2. The link from #4 is a one time use redirect that happens when you Content Service. See the redirect section here all the way at the bottom. This link is short lived and you might be fast enough to catch it in a browser but a another separate calling client (the "gadget") might not be so lucky. So you should never call the googlecontentservice.com link directly.
  3. Regarding the overall issue of flakiness of ContentService, I have not seen this. If I properly use the /exec link and then properly increment the version after every appropriate change things work as expected for me.

I built a simple web app accessing your Content Service and things seem to work fine for me consistently. See below. The code looks identical to yours but I am using the first url.

https://script.google.com/macros/s/AKfycbw6nlfv5ME6F3Z2WBdW24YAgfQm_E5gYV0xrMDvDwZLrX7PdMU/exec

As an alternative - is there a reason you are doing a server side UrlFetch from one script to another? If you can fetch the data server side, can you just perform the logic of the content script w/in the UI script?

于 2012-11-09T14:10:38.037 に答える