Google App Script 公開したけどアクセス401エラー
津路です。こんにちは。
今回は、Microsoft Computer Vision APIを利用して解析、取得したテキストを、スプレッドシートに書き込むプログラムを作ってみました。
と言っても、Qiitaの以下ページを再現しただけです。
画像認識APIでOCRアプリ
まず、Microsoft Azureのアカウントを作成して、Computer Visionサービスを検索し、サブスクリプションや名前などを設定して作成します。
自分のGoogleアカウントでスプレッドシートを作成して、ツールメニューからスクリプトエディタを起動します。
ページに掲載のスクリプトをそのまま書き込みます。
function doPost(e)
では、スクリプトがPostメソッドで呼ばれた際に、e引数からテキストを取り出して、スプレッドシートのA1セルに値を貼り付けます。
1 2 3 4 5 6 7 8 9 10 11 12 | function recordText(text) { var sheet = SpreadsheetApp.openById("スプレッドシートのID").getSheetByName("シート1") sheet.getRange(1, 1).setValue(text) } function doPost(e) { if(typeof e !== 'undefined') Logger.log(e.parameter); recordText(e.parameter.text); return ContentService.createTextOutput({result: true}).setMimeType(ContentService.MimeType.JSON) } |
上記の中のスプレッドシートのIDには、シートのURLの一部を入れます。
次に、ページ投稿者がGitで公開されておられる、swiftプロジェクトをクローンして、ビルドします。
1 2 3 4 5 6 7 8 9 10 11 | fileprivate func readText(_ imageData: Data) { AF.upload(imageData, to: "https://japanwest.api.cognitive.microsoft.com/vision/v1.0/ocr?language=ja&detectOrientation=true", method: .post, headers: [ "Content-Type": "application/octet-stream", "Ocp-Apim-Subscription-Key": "APIキー" ]).validate(statusCode: 200...226) .responseJSON { response in self.readTextResponse(response: response) } } |
japanwestは、リージョンが西日本となったためです。APIキーは、画像のような中からコピーしてきます。
さて、本題です。
App Scriptを開いて、ウェブアプリとして公開します。
右上からデプロイをクリックします。
新しいデプロイをクリックして、項目を設定します。
以上を設定しておいて、XCodeからデバッグします。
しかし、スクリプトにリクエストして結果を得たところ、401エラーが起こります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | AF.request("https://script.google.com/macros/s/スクリプトの公開ID/exec", method: .post, parameters: ["text": text], encoding: URLEncoding(destination: .methodDependent)) .validate(statusCode: 200...226) .responseData { response in switch response.result { case .success: print("Validation Successful") case let .failure(error): print(error) } } } |
上記のerrorが401エラーです。これは権限のエラーです。
何故なのか、いろいろと調べましたが、わかりませんでした。スクリプトのコミュニティでも検索しましたが、大体はIDが違うとかアクセス件をanyoneしたのかといったものでした。
そして、もしてかしてというわけで、画面の内容が、Google検索結果と大きく違うので、エディターが変化していることを疑いました。
そこで、右上に「以前のエディタを使用」があり、クリックして、切り替えました。
さらに、メニューから公開をクリックして、ウェブアプリケーションとして導入をクリック
そのまま更新ボタンで公開します。
これで解消できました。
この件ですが、その後Googleに報告したところ、
buganizer-system@google.comから連絡があり、再現してビデオ送ってねときまして、再現しようとすると、できませんでした。
どうも、コードを変更するたびに、新たにウェブアプリとして公開するのが基本のようです。