Как я могу получить значение от API YouTube? - PullRequest
0 голосов
/ 25 сентября 2018

Я создаю чат-бота, который получает ссылку на YouTube на основе того, что спросил пользователь.Я использую Dialogflow для бота и использую nodejs для кодирования.

В настоящее время все работает отлично, но моя проблема заключается в получении ссылки из ответа API.используя console.dir (results), показывает следующее: Вот как выглядит ответ:

[ { id: 'gWNUg_v25dw',
link: 'https://www.youtube.com/watch?v=gWNUg_v25dw',
kind: 'youtube#video',
publishedAt: '2017-08-24T14:00:11.000Z',
channelId: 'UCDZ56yQ05d_ikcwcTG9bAiA',
channelTitle: 'Code to Create',
title: 'How to make a Chatbot with Dialogflow - API.ai',
description: 'In this video, Google Developer Expert, Faisal Abid will show us how to create a chatbot with Google\'s latest API.ai API.ai can be integrated with multiple chat ...',
thumbnails: { default: [Object], medium: [Object], high: [Object] } } ]

Я пытался использовать results.link для получения ссылки, но я получаю неопределенный ответ, поэтому мой вопрос: какполучить ссылку из блока ответа?

search(txt1, opts, function(err, results) {
//var data1 = JSON.parse(results);
//srchRes = data1.link;
if(err) return console.log(err);


console.dir(results);
});

, раскомментировав 2 строки выше, и console.dir (srchRes) возвращает эту ошибку:

SyntaxError: Unexpected token u in JSON at position 0

1 Ответ

0 голосов
/ 25 сентября 2018

У нас нет логики кода вызова API, поэтому отсюда, мы можем только предположить, что results - это ответ API, и, учитывая ваш пример того, как выглядит ответ, мы видим results является массивом объекта.

  • JSON.parse фактически десериализует строку, представляющую объект в формате JSON.
  • JSON.stringify наоборот, он сериализует ваш объект в строку в формате JSON.

Ваша цель - достичь link свойств конкретного объекта в пределах массива, поэтому JSON.parse(results) не имеет смысла.

Вы должны быть в состоянии достичь link свойств для каждого объекта, просто перебирая массив объекта results

for (const result of results) {
    console.log(`the link : ${result.link}`)
}
...