Соскоб в Интернете в диалоговом потоке - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь выполнить очистку веб-страниц в диалоговом потоке.

const rp = require('request-promise');
const ch = require('cheerio');

.

app.intent('get show name', (conv, {show_name}) => {
    const url = 'https://screenrant.com/search/'+show_name;
    rp(url).then(function(html){
        let total_items = ch('article > div > h3 > a', html).length;
        if(total_items > 0){
            conv.ask(ch('article > div > h3 > a', html)[0].children[0].data);
        }
        else{
            conv.ask("Sorry no news on this!");
        }
    });
  });

Это мой код. При запуске действия я получаю 'final_response' должен быть установлен.

https://pastebin.com/y9Rc0Vd8

Ответы [ 2 ]

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

В то время как вы делаете утилизацию в диалоге.Я предложу использовать встроенный встроенный редактор в нем.

Переписать тот же код, что и

var request = require('request');
var cheerio = require('cheerio');
function welcome(agent) {
//agent.add(`Welcome to my agent!`);
var search_term = agent.parameters['term'];
st = urlencode(search_term);
request('https://screenrant.com/search/'+st+'/', function (error, response, html) {
  if (!error && response.statusCode == 200) {
    var $ = cheerio.load(html);
    var responseText = "Here are the news";
    $("article").each(function(){
        responseText += "- " + $(this).find("h3").text();
    })
    agent.add(responseText)
  }
});
}

Чтобы заставить его работать, убедитесь в следующем:

  • Ваше приложение использует v2 диалогового потока
  • Вы включили выставление счетов для своей учетной записи firebase, связанной с учетной записью диалогового потока (переключитесь на оплату по мере выполнения плана через консоль Firebase).Это обязательно для отправки внешних запросов на сервер.
  • Вы включили опцию «включить вызов webhook для этого намерения» в желаемом намерении
  • Вы включили «включить вызов webhook для заполнения слотов»опция в желаемом намерении

Screenshot

0 голосов
/ 14 ноября 2018

Это асинхронная команда, поэтому вам нужно вернуть Promise в вашем обработчике намерений, чтобы код знал, что нужно ждать.

app.intent('get show name', (conv, {show_name}) => {
  const url = 'https://screenrant.com/search/'+show_name;
  return rp(url).then(function(html){
    let total_items = ch('article > div > h3 > a', html).length;
    if(total_items > 0){
        conv.ask(ch('article > div > h3 > a', html)[0].children[0].data);
    }
    else{
        conv.ask("Sorry no news on this!");
    }
  });
});
...