前提・やりたいこと
特定のジャンルに特化した辞書アプリ(android)を制作しようと思い、そのデータ取得APIとしてGASのspreadsheetAppを経由することにしました。
(画像見づらくてすみません)
後述するGASの通り、スプレッドシートにデータを入力していき、その内容をクエリパラメータの単語を基に検索します。
現在chromeランタイムV8を使用、スプレッドシートとは別の独立gasファイルでID指定で動かしています。
関係ないとは思いますが、念のためサービス→google sheets を追加しています。
発生している問題・エラーメッセージAPI
ブラウザでAPIをたたくと、「スクリプトが完了しましたが、何も返されませんでした。」と表示されます。
ログにも「この実行に関するログはありません」、ステータス:「完了」と表示され、デバッグを行った際はコードを変えずとも色々な所でエラーが発生し、2行目や4行目、6行目などでエラーを吐いた挙句、数回同じコードでデバッグをしたらエラーを吐かなくなりました。
施行したURL
script.google.com/macros/s/(デプロイしたID)/exec?word="(検索ワード)"&need="explain"&callback=true
script.google.com/macros/s/(デプロイしたID)/exec?word=(検索ワード)&need=explain&callback=true
script.google.com/macros/s/(デプロイしたID)/exec?word=(検索ワード)&need=explain&callback="true"
script.google.com/macros/s/(デプロイしたID)/exec?word="(検索ワード)"&need="explain"
script.google.com/macros/s/(デプロイしたID)/exec?word="(検索ワード)"&?need="explain"
尚、検索ワードがスプレッドシート内に存在する事、URLのマクロIDが正しいことは確認しています。
該当コード(全文)
JavaScript
1function doGet(e) { 2 var sheets = SpreadsheetApp.openById("(シートID)"); 3 var sheet = sheets.getSheetByName("メインシート"); 4 var word = e.parameter.word; 5 var need = e.parameter.need; 6 var contents = []; 7 if (need = "all") { 8 return; 9 } else if(need = "word"){ 10 var column = 0; 11 next1(word,contents,sheets,sheet,colmun); 12 } else if(need = "yomi"){ 13 var column = 1; 14 next1(word,contents,sheets,sheet,colmun); 15 } else if(need = "level"){ 16 var column = 2; 17 next1(word,contents,sheets,sheet,colmun); 18 } else if (need = "genre"){ 19 var column = 3; 20 next1(word,contents,sheets,sheet,colmun); 21 }else if(need = "explain"){ 22 var column = 4; 23 next1(word,contents,sheets,sheet,colmun); 24 }else if (need = "tag"){ 25 var column = 5; 26 next1(word,contents,sheets,sheet,colmun); 27 } else { 28 contents = "error:501" 29 next1(word,contents,sheets,sheet,colmun); 30 } 31} 32function next1(word,contents,sheets,sheet,colmun) { 33 var textFinder = sheet.getRange("A1:F100").createTextFinder(word); 34 var cells = textFinder.findAll(); 35 var number = cells.length; 36 var number2 = cells.length; 37 for(0<number; number--;){ 38 var gyou = []; 39 gyou.unshift(cells[number].getA1Notation().slice(1,2)); 40 } 41 if (column){ 42 for(0<number; number2--;){ 43 var range = sheet.getrange(gyou[number2],column); 44 contents.unshift(range.getValue()); 45 } 46 var result = { 47 message: contents 48 } 49 var responseText; 50 51 var out = ContentService.createTextOutput(); 52 53 var callback = e.parameter.callback; 54 if (callback) { 55 responseText = callback + "(" + JSON.stringify(result) + ")"; 56 out.setMimeType(ContentService.MimeType.JAVASCRIPT); 57 out.setContent(responseText); 58 return out; 59 60 } else { 61 responseText = JSON.stringify(result); 62 out.setMimeType(ContentService.MimeType.JSON); 63 out.setContent(responseText); 64 return out; 65 } 66 } else{ 67 contents = "error:501" 68 var result = { 69 message: contents 70 } 71 var responseText; 72 73 var out = ContentService.createTextOutput(); 74 75 var callback = e.parameter.callback; 76 if (callback) { 77 responseText = callback + "(" + JSON.stringify(result) + ")"; 78 out.setMimeType(ContentService.MimeType.JAVASCRIPT); 79 out.setContent(responseText); 80 return out; 81 82 } else { 83 responseText = JSON.stringify(result); 84 out.setMimeType(ContentService.MimeType.JSON); 85 out.setContent(responseText); 86 return out; 87 } 88 } 89}
※見やすくするためJavaScriptと表記していますがGASです。
こちらもシートIDが正しいことは確認しています。
原因が分かる方いらっしゃれば宜しくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/12 12:24