機械翻訳APIについて

55 views
Skip to first unread message

淵野弘大

unread,
Feb 9, 2020, 2:00:30 AM2/9/20
to 多言語音声翻訳サンドボックスサーバー技術フォーラム
初歩的な質問で申し訳ありません。
github上にGASのコードが無かったので、tra.pyをGAS上で書き直していますが、以下のようなエラーが発生します。

https://sandbox-mt.mimi.fd.ai のリクエストに失敗しました(エラー: 401)。サーバー応答の一部: Unauthorized(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 141、ファイル「コード」)


curlコマンドで得る認証APIアクセストークンの発行から1時間以内にもかかわらずUnauthorizedとなってしまいます。
なおエラーを出している141行目は、 var res = UrlFetchApp.fetch(url, options);  と記述しています。

修正の仕方がわからず詰まっています。GAS上から機械翻訳APIを利用するやり方をご教示頂ければ幸いです。
ご多忙のところ恐れ入りますが、ご対応よろしくお願いいたします。

吉川哲史

unread,
Feb 9, 2020, 3:09:41 AM2/9/20
to 多言語音声翻訳サンドボックスサーバー技術フォーラム
質問ありがとうございます。
該当のコード↓の前後のコードも書いていただくことはできますか?

var res = UrlFetchApp.fetch(url, options);

特に、上記コードに渡している url, options の内容がわかるとお答えできるかもしれません。

淵野弘大

unread,
Feb 9, 2020, 3:41:38 AM2/9/20
to 多言語音声翻訳サンドボックスサーバー技術フォーラム
吉川さま、返信ありがとうございます。
エラー箇所の前後を含めて、関数全体を以下に示します。


//日本語を英語に翻訳
function translate(text){
  var SANDBOX_ACCESS_TOKEN = '  '; // ' '内に認証APIで得たアクセストークンが入る
  var headers = {
    'Authorization': 'Bearer ' + SANDBOX_ACCESS_TOKEN
  };
  
  var data = {
    'text': text,
    'source_lang': 'jp',
    'target_lang': 'en',
  };
  
  var options = {
    "headers" : headers,
    "payload" : data
  }

  //サンドボックスサーバーに投げて,翻訳結果をresに格納
  var res = UrlFetchApp.fetch(url, options);  //ここから返ってこない
  var obj = JSON.parse(res.getContentText());
  
  if ('textAnnotations' in obj.responses[0]) {
    return obj.responses[0].textAnnotations[0].description;
  }
  return 'Sorry, I could not translate…\uDBC0\uDC5E'; 
}


※「//ここから返ってこない」の行以降は校正途中なので間違っている可能性が高いですが、エラーとは関係ないと思います。

ただ、先ほどの投稿後に気が付いたのですがcurlコマンドで認証APIのアクセストークンを取得した際、
Warning: skip unknown form field:
Warning: skip unknown form field:
Warning: skip unknown form field:
Warning: skip unknown form field: https://apis.mimi.fd.ai/auth/applications.r
と出ていたのが原因かもしれないと個人的には考えています。
(statusはsuccessですしアクセストークンも発行されていたのでスルーしていました。)



2020年2月9日日曜日 17時09分41秒 UTC+9 吉川哲史:

吉川哲史

unread,
Feb 9, 2020, 3:53:18 AM2/9/20
to 多言語音声翻訳サンドボックスサーバー技術フォーラム
淵野さま

コードありがとうございます。
見た感じ、貼っていただいたコード内容にはおかしなところはなさそうで、
あるとしたらoptions内に、「method : "POST"」が必要かな…という感じでした。

最後にお書きいただいたエラーで、
「アクセストークン取得時にスコープをリクエストに含められていない」
という可能性が高そうです。


参考までに、私の方でもスプレッドシート+GASで翻訳APIを使うサンプルを作成してみました。
淵野さまの環境にコピーした上で、スクリプトなど見ていただければと思います。
私の環境では動作することを確認しているので、
同じスクリプトが動かない場合はアクセストークンの発行時に失敗している可能性が高いかと思います。

淵野弘大

unread,
Feb 9, 2020, 4:47:29 AM2/9/20
to 多言語音声翻訳サンドボックスサーバー技術フォーラム
吉川さま

サンプルコードありがとうございます。初めてGASを触る初心者なので、非常に参考になりました。

サンプルコードを参考に修正したところ、無事翻訳出来ました。
とても初歩的なミスで、日本語を表すjaをjpと書いていたことと、アクセストークン取得時にスコープをリクエストに含められていなかったことが原因でした。

非常に助かりました。休日にもかかわらず対応ありがとうございました。
2020年2月9日日曜日 17時53分18秒 UTC+9 吉川哲史:

吉川哲史

unread,
Feb 9, 2020, 10:46:03 AM2/9/20
to 多言語音声翻訳サンドボックスサーバー技術フォーラム
淵野さま

無事解決できたようでよかったです。
jpと書いてあったのは初見では気づきませんでした笑

引き続き、APIを使ってよいものを作っていただければと思います。
よろしくお願いいたします。
Reply all
Reply to author
Forward
0 new messages