Как отобразить динамический ответ из результатов поиска Google?

Я пытаюсь запрограммировать API.AI для отображения результатов поиска из Google, используя Действия в Google в виде карточек, используя службу выполнения веб-крюков. Я развернул демонстрационное приложение "factaboutgoogle", но оно выдает статический ответ. Я хочу написать код index.js, который может возвращать динамический ответ с помощью поисковой системы Google.

Кто-нибудь может помочь нам с кодом?

Это код, который я использую прямо сейчас:

process.env.DEBUG = 'actions-on-google:*';
const App = require('actions-on-google').ApiAiApp;


// [START YourAction]
exports.videoplayer = (request, response) => {
  const app = new App({request, response});
  console.log('Request headers: ' + JSON.stringify(request.headers));
  console.log('Request body: ' + JSON.stringify(request.body));


  // Fulfill action business logic
  function responseHandler (app) {


    var querystring = require('querystring');
    var https = require('https');


    var host = 'https : //www.googleapis.com/customsearch/v1?key=*****';
    var apiKey = '*****';
    var sessionId = null;
    var deckId = '';


    function performRequest(endpoint, method, data, success) {
      var dataString = JSON.stringify(data);
      var headers = {};

      if (method == 'GET') {
        endpoint += '?' + querystring.stringify(data);
      }
      else {
        headers = {
          'Content-Type': 'application/json',
          'Content-Length': dataString.length
        };
      }
      var options = {
        host: host,
        path: endpoint,
        method: method,
        headers: headers
      };


      var req = https.request(options, function(res) {
        res.setEncoding('utf-8');
        var responseString = '';
        res.on('data', function(data) {
          responseString += data;
        });

        res.on('end', function() {
          console.log(responseString);
          var responseObject = JSON.parse(responseString);
          success(responseObject);
        });
      });

      req.write(dataString);
      req.end();
    }
  }

  function basicCard (app) {
    app.ask(app.buildRichResponse()
    // Create a basic card and add it to the rich response

    .addSimpleResponse('')
    .addBasicCard(app.buildBasicCard(dataString)
      .setTitle('your query result')
      .addButton('Read more')
      .setImage('https://example.google.com/42.png', 'Image alternate text')
    ));
  }

  const actionMap = new Map();
  actionMap.set('videoplayer', responseHandler);

  app.handleRequest(actionMap);
};

2 ответа

Есть ряд проблем с кодом.

  1. Нигде в вашем коде вы не звоните performRequest() чтобы на самом деле выполнить поиск, чтобы вы не получали результаты назад и не добавляли их ни к каким картам. Вам нужно будет включить success параметр, который является функцией, которая может обрабатывать результаты JSON обратно (responseObject).

  2. Я не вижу никакой функции, которая выглядела бы как хороший кандидат для этого success функция. Ваш basicCard() Функция, как вы заметили, просто помещает туда статическую информацию. Вам нужно изменить это, чтобы зациклить результаты responseObject и использовать его для создания карт, которые вы хотите. (Вероятно, одна карта на результат, поэтому вы бы позвонили addBasicCard() многократно. Вы можете вызвать это в цикле и добавить к расширенному ответу, который вы создаете.)

  3. Вы не должны иметь пустой простой ответ. Это было бы хорошим местом, чтобы сказать "Вот ваши результаты запроса", так что-то вроде .addSimpleResponse('Here are your results") будет лучше в этой линии.

Чтобы начать с создания пользовательской поисковой системы Google на панели инструментов API Google:

https://developers.google.com/custom-search/json-api/v1/using_rest

Вы должны запросить Google, используя остальные API и получить результаты.

Я разработал код в соответствии с вашим запросом, используя остальной код API здесь:

var querystring = require('querystring');
var https = require('https');

var host = 'https : //www.googleapis.com/customsearch/v1?
key=INSERT_YOUR_API_KEY&cx=017576662512468239146:omuauf_lfve&q=<The word you 
want to search>';
var apiKey = '*****';
var sessionId = null;
var deckId = '';

function performRequest(endpoint, method, data, success) {
 var dataString = JSON.stringify(data);
 var headers = {};

 if (method == 'GET') {
  endpoint += '?' + querystring.stringify(data);
 }
 else {
  headers = {
   'Content-Type': 'application/json',
   'Content-Length': dataString.length
 };
}
var options = {
host: host,
path: endpoint,
method: method,
headers: headers
};

var req = https.request(options, function(res) {
res.setEncoding('utf-8');

 var responseString = '';

  res.on('data', function(data) {
  responseString += data;
 });

 res.on('end', function() {
 console.log(responseString);
 var responseObject = JSON.parse(responseString);
 success(responseObject);
 });
});

 req.write(dataString);
 req.end();
}
Другие вопросы по тегам