翻訳APIを作成しています。
テキスト入力されたmessageを翻訳APIに引数で渡し、
翻訳結果を戻したいのですが、値が受け取れません。
関数の定義の仕方が悪いのか、見当がつかず、、、。
ご指導頂けないでしょうか。
以下、翻訳APIです。
js
1 // 翻訳API 2 // 文字が入力されたらイベント発火 3 var tranceLang = textTranslator(message); 4 console.log("翻訳結果確認: " + tranceLang); 5 6 function textTranslator(message) { 7 8 // 現在の時刻をUNIX Time に変換して取得 9 const now = new Date(); 10 const nowtime = now.getTime(); 11 12 // 認証トークンを取得するための関数 [getToken] を定義 13 // http://docs.microsofttranslator.com/oauth-token.html 14 const getToken = function() { 15 const defer = $.Deferred(); 16 17 // 現在時刻と、sessionStorageに保存されている時刻を比較 18 // sessionStorageに保存されているトークンが8分以内に発行されたものであれば、そのまままトークンを返す 19 // 8分以上経っている場合、もしくはトークンが存在しない場合、新規にトークンを取得。 20 // 取得したトークン、および取得時間をUNIX Time に変換したデータをJSON [datalist] に格納 21 // sessionStorage [tdata] にJSONを保存する 22 const arr = JSON.parse(sessionStorage.getItem("tdata")); 23 24 if (arr === null || arr.time + 1000 * 60 * 8 < nowtime) { 25 $.ajax({ 26 url: 'https://api.cognitive.microsoft.com/sts/v1.0/issueToken', 27 type: 'POST', 28 headers: { 29 'Content-Type': 'application/json', 30 'Accept': 'application/jwt', 31 'Ocp-Apim-Subscription-Key': '認証キー', 32 }, 33 async: false, 34 }).done(function(data) { 35 36 const datalist = { 37 time: nowtime, 38 token: data, 39 } 40 sessionStorage.setItem('tdata', JSON.stringify(datalist)); 41 }); 42 } 43 44 // sessionStorage に保存されたデータを変数 arr2 に格納 45 // JSONを文字列に変換後、トークンデータを引き出して翻訳用の関数にひきわたす 46 const arr2 = JSON.parse(sessionStorage.getItem("tdata")); 47 const token = arr2.token; 48 defer.resolve(token); 49 return defer.promise(); 50 }; 51 52 // 関数 [getToken] 実行後、取得したトークンを 受け取る 53 // フォームから入力したデータとともに、 Microsoft Translator テキストAPIへ送信 54 $.when(getToken()).done(function(token) { 55 const key = 'Bearer ' + token; 56 const text = message; 57 const response = $.ajax({ 58 url: 'https://api.microsofttranslator.com/v2/http.svc/Translate', 59 type: 'GET', 60 data: { 61 'appid': key, 62 'Accept': 'application/xml', 63 'text': text, 64 'to': 'en', 65 }, 66 async: false, 67 }) 68 69 // Translator テキスト APIを通じて取得したデータから、翻訳語が含まれるプロパティを取得 70 // replace関数でタグを除去し、翻訳データのみを抽出して表示する 71 const data = response.responseText; 72 const translation = data.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, ''); 73 }) 74 }; 75
すいません。どこがどうなっているのかいまいちわからないのと、どの関数に何が出力されないのかがわかりません。また、最初に呼び出してある textTranslator(message)もおそらくmessageはinput type="text"の入力ハンドリングから取得したものだと思いますが、このようなものもこちらで用意しなければならないので、回答者が回答しやすいように、必要な部分だけを残し、再現性のあるコードを記述していただけるとうれしいです!
回答1件
あなたの回答
tips
プレビュー