質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • Unity

    4397questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Google Apps Script

    947questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

GASによるdoGET()やdoPOST()を使い、UnityからGET、POST通信でJSON形式を受け取る方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 491

1.本題

こんにちは、私はグーグルスプレッドシートの値をGASを利用して操作し範囲指定した箇所をJSON形式としてUnity側に読み込ませたいのですが、このサイトを利用したところGET()のところのJSON取得部分が省略されて書かれています

IEnumerator Get (string url) {
        // HEADERはHashtableで記述
        Hashtable header = new Hashtable ();
        header.Add ("Accept-Language", "ja");

        // 送信開始
        WWW www = new WWW (url, null, header);
        yield return www;

        // 成功
        if (www.error == null) {
            Debug.Log("Get Success");

            // 本来はサーバからのレスポンスとしてjsonを戻し、www.textを使用するが
            // 今回は便宜上、下記のjsonを使用する
            string txt = "{\"name\": \"okude\", \"level\": 99, \"friend_names\": [\"ichiro\", \"jiro\", \"saburo\"]}";
            // 自作したTestResponseクラスにレスポンスを格納する
            TestResponse response = JsonMapper.ToObject<TestResponse> (txt);
            Debug.Log("name: " + response.name);
            Debug.Log("level: " + response.level);
            Debug.Log("friend_names[0]: " + response.friend_names[0]);
            Debug.Log("friend_names[1]: " + response.friend_names[1]);
            Debug.Log("friend_names[2]: " + response.friend_names[2]);
        }
        // 失敗
        else{
            Debug.Log("Get Failure");           
        }
    }

どうすれば、GASで記述したdoGET()のreturn部分の情報をUnity側で扱えるのでしょうか?(GAS側からのreturnの値はどこに格納されているまたどのような形式で格納されているのでしょうか?)

GAS自体のプログラムイメージはこのサイトをイメージしています

var url = 'https://docs.google.com/spreadsheets/d/***スプレッドシートID***/pubhtml';
var sheetName = '***シート名***';
var book = SpreadsheetApp.openByUrl(url);
var sheet = book.getSheetByName(sheetName);

function doOutput(e){ 
  var json = convSheet(sheet);
  Logger.log(JSON.stringify(json));  
  return JSON.stringify(json);
}

function convSheet(sheet) {

  var colStartIndex = 1;
  var rowNum = 1;
  var firstRange = sheet.getRange(1, 1, 1, sheet.getLastColumn());
  var firstRowValues = firstRange.getValues();
  var titleColumns = firstRowValues[0];

  var lastRow = sheet.getLastRow();
  var rowValues = [];
  for(var rowIndex=2; rowIndex<=lastRow; rowIndex++) {
    var colStartIndex = 1;
    var rowNum = 1;
    var range = sheet.getRange(rowIndex, colStartIndex, rowNum, sheet.getLastColumn());
    var values = range.getValues();
    rowValues.push(values[0]);
  }

  var jsonArray = [];
  for(var i=0; i<rowValues.length; i++) {
    var line = rowValues[i];
    var json = new Object();
    for(var j=0; j<titleColumns.length; j++) {
      json[titleColumns[j]] = line[j];
    }
    jsonArray.push(json);
  }
  return jsonArray;
}


上記で使用されているのはdoOutput()ですが、doOutput()じゃないとだめなのでしょうか?
またdoOutput()とdoGet()の違いは何なのでしょうか?

2.備考

・筆者はGASを使うのがはじめてなので、できる限りはじめっから具体的に説明してもらえると助かります

3.追加質問

・returnで返される値の型はどんなものがあるのしょうか?
・Json形式によるやり取りとJsonファイルによるやり取りの違いはなんなのでしょうか?(今回の場合ではどちらの方法でも実行可能なのでしょうか?)

4.環境

・Windows10
・Unity 2018.1.4

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

どうすれば、GASで記述したdoGET()のreturn部分の情報をUnity側で扱えるのでしょうか?(GAS側からのreturnの値はどこに格納されているまたどのような形式で格納されているのでしょうか?)

参照元のコードのコメントに// 本来はサーバからのレスポンスとしてjsonを戻し、www.textを使用するがと書いてあるとおり、www.text

上記で使用されているのはdoOutput()ですが、doOutput()じゃないとだめなのでしょうか?
またdoOutput()とdoGet()の違いは何なのでしょうか?

doOutput()でなくていです。名前は何でもいい。参照元のサンプルコードを読むと関数名を指定しているところがあります。そこにdoOutputが指定されていますが、別のものにしたければそうすればいい。

doGetは、gasをウェブアプリケーションとして公開して、getでアクセスしたときに既定で呼ばれる関数。doOutputはexecution apiで自由に呼べるものの名前を筆者が名付けたもの。doGetで目的は達成できると思います。

returnで返される値の型

GASのことなら、文字列です。doOutputreturn JSON.stringify(json);というのがありますが、これは日本語で書くと、返す JSONを文字化する関数(json)なので、文字です。

unityのwwwのことなら、textのほかtextureがあるようです。

Json形式によるやり取りとJsonファイルによるやり取りの違いはなんなのでしょうか?
質問の意味が不明です。json形式というのが何を指し、jsonファイルというのは何を指すのでしょうか?unityのオブジェクトそのものは取得できません。gasでcontent typeをoctet streamで返したいとかそういうことですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/18 12:10

    回答ありがとうございます。
    //本来はサーバからのレスポンスとしてjsonを戻し、www.textを使用するが という文面自体ではどこにレスポンスが来て、どのようにwww.textを使用するのかがわからないです

    キャンセル

  • 2018/06/18 13:35

    調べていて、new演算子でWWWでインスタント生成し、それをwwwとしていますが、www.textのなかにレスポンスの値は入るということであっているでしょうか?

    キャンセル

  • 2018/06/18 13:38

    string txt = www.text;
    ではないかと思います。unityのコルーチンに明るくないのですが、↓のような使いかたを考えると「new演算子でWWWでインスタント生成し、それをwwwとしていますが、www.textのなかにレスポンスの値は入るということであっている」と私も思います。
    // 成功
    if (www.error == null) {

    キャンセル

  • 2018/06/19 12:09

    プログラムテストしてみたところ、今回質問文ないで紹介したGASのサンプルコード方式のreturnだとwww.textのログ出力したとき型が違うといわれ怒られました。https://qiita.com/kunichiko/items/7f64c7c80b44b15371a3こちらのサイトのdoGet方式によるreturnならwww.text内に格納されてログ出力がされました。
    無事解決致しましたありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Unity

    4397questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Google Apps Script

    947questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。