Как передать формат в Google Cloud Translation API с помощью клиентской библиотеки? - PullRequest
0 голосов
/ 16 октября 2018

Мы используем Google Cloud Translation API в нашем экспресс-приложении.Я пытаюсь делать переводы, используя клиентскую библиотеку вместо того, чтобы каждый раз делать запрос API.1. Что я хочу знать, так это как передать параметры, такие как формат (текст или html) в API при использовании клиентской библиотеки?Я могу добиться этого, отправляя http-запросы, используя requestjs, например:

var request = require('request');
var url = 'https://translation.googleapis.com/language/translate/v2';
var options1 = {
  q: 'amore mio',
  target: 'hi',
  format: 'text',
  source: 'it',
  key: 'my API key'
}

request.post({url:url, qs:options1}, (err, res, body)=> {
  if(err) {
    console.log('ERR: ', err);
  }
  console.log('RES: ', res.statusCode);
  console.log('Body: ', body);
})

Но пример использования клиентской библиотеки показывает только это:

const {Translate} = require('@google-cloud/translate');

// Your Google Cloud Platform project ID
const projectId = 'YOUR_PROJECT_ID';

// Instantiates a client
const translate = new Translate({
  projectId: projectId,
});

// The text to translate
const text = 'Hello, world!';
// The target language
const target = 'ru';

// Translates some text into Russian
translate
  .translate(text, target)
  .then(results => {
    const translation = results[0];

console.log(`Text: ${text}`);
console.log(`Translation: ${translation}`);


})
.catch(err => {
        console.error('ERROR:', err);
 });

Есть ли способ, которым я могупередать параметры типа «форматировать» с помощью клиентской библиотеки?

Как передать массив строк в атрибут q (querystring) объекта параметров в первом методе?Если я передаю массив, например:

q: ['amore mio', 'grazie']

, я получаю сообщение об ошибке:

RES:  400
Body:  {
  "error": {
    "code": 400,
    "message": "Required Text",
    "errors": [
      {
        "message": "Required Text",
        "domain": "global",
        "reason": "required"
      }
    ]
  }
}

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Что касается вопроса 2 о передаче массива входных аргументов, это прекрасно работает, если вы используете cURL для отправки запроса POST, аналогичного в этом примере .Я попробовал это сам с успехом.Я пытался выполнить различные манипуляции с вашим кодом из snipper 1 с библиотекой request, но кажется, что библиотека request не передает массив правильно.Я бы вообще предложил использовать клиентскую библиотеку , которая может успешно обрабатывать массивы во входном тексте.

0 голосов
/ 17 октября 2018

Хорошо, после небольшого исследования я просто попытался передать объект параметров с форматом и другими свойствами (такими как исходный и целевой язык) вместо цели, и это сработало.Так что это может быть достигнуто с помощью:

const options = {
to: target,
format: 'html',
prettyPrint: true
}

translate
  .translate(text, options)
  .then(results => {
    const translation = results[0];
    console.log('flag: ', Array.isArray(translation));
    console.log(`Text: ${text}`);
    console.log(`Translation: ${translation}`);
  })
  .catch(err => {
    console.error('ERROR:', err);
  });
...