поэтому я пытаюсь создать веб-приложение, которое, когда вы вставляете поиск, получает данные из API YouTube с использованием JSON и отображает список с видео, соответствующими вашему запросу. Когда он извлекает, он получает какой-то буквенный и числовой ответ, но не список видео. Любая помощь в правильном направлении будет оценена по достоинству. Это HTML-код:
<div class = "search-box-container">
<form action = "#" class = "js-search-form search-box">
<label for = "query"></label>
<input type = "text" class = "js-query search-form" placeholder = "Search me">
<button type = "submit" class = "button">Search</button>
</form>
</div>
<h2>Results</h2>
<div class = "js-search-results">
</div>
И это для него JS / JQuery:
const YOUTUBE_SEARCH_URL =
'https://www.googleapis.com/youtube/v3/search';
`const key = 'key'//(hidden for privacy concerns);`
function getDataFromApi(searchTerm, callback) {
const query = {
part: 'snippet',
key: key,
q: `${searchTerm} in:name`,
}
$.getJSON(YOUTUBE_SEARCH_URL, query, callback);
}
function renderResult(result) {
return `
<div>
<h2>
<a class = "js-result-name" href = "http//www.youtube.com/watch?v=${
result.id.videoId}" target = "_blank">${result.id.videoId}</a></h2>
</div>
`;
}
function displayYoutubeSearchData(data) {
console.info(data);
const results = data.items.map((item, index) => renderResult(item));
$('.js-search-results').html(results);
}
function watchSubmit() {
$('.js-search-form').submit(event => {
event.preventDefault();
const queryTarget = $(event.currentTarget).find('.js-query');
const query = queryTarget.val();
queryTarget.val("");
getDataFromApi(query,displayYoutubeSearchData );
});
}
$(watchSubmit);
Привет, Дэвид, я опубликовал ответ, который получаю при поиске
@Gianina Я думаю, вы уже получаете ссылки, щелкнув их, перенаправляя на YouTube, не так ли?
@VineyHill не уверен, что я получаю, так как при щелчке по нему перенаправляется на «не найдено»
Вы получаете идентификатор видео, например. RnBT9uUYb1w ---> youtube.com/watch?v=RnBT9uUYb1w, который является допустимым видео. Поэтому вам нужно просто использовать их для создания ссылок. Если вы хотите вставить их вместо этого, перейдите в youtubevideoembed.com, настройте так, как вы хотите, а затем используйте HTML в своем коде.
точно, я думаю, я получаю идентификатор видео, и я пытаюсь показать заголовок



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы были почти у цели: это всего лишь опечатка.
Посмотрите на атрибут href внутри литерала шаблона, возвращаемого методом renderResult().
href = "http//www.youtube.com/watch?v=${result.id.videoId}"
Обратите внимание на неверно сформированную схему (http// против https://).
API YouTube возвращает набор результатов поиска (то есть массив объектов, data.items в вашем коде), которые соответствуют параметрам запроса, указанным в запросе API.
Каждый элемент содержит объект id со свойством videoId. Это "буквенно-цифровой ответ", о котором вы говорите в своем вопросе. После сопоставления data.items с массивом HTML-шаблонов result вы читаете этот идентификатор видео с помощью ${result.id.videoId}. Затем вы объединяете URL-адрес YouTube смотреть с идентификатором видео.
Вы должны проверить структуру JSON результата поиска в Документы API данных YouTube. Помимо id.videoId, он содержит больше полезной информации. Например, вы можете предпочесть показывать пользователям название видео, используя ${result.snippet.title} вместо буквенно-цифрового videoId.
Спасибо, это то, что я пытаюсь показать, - заголовок, полученный по URL-адресу. Я думаю, он, вероятно, получает правильный ingo (videoId), но мне нужно название
@GianinaSkarlett - Ты понял? Ссылки работают? Вы получили название с ${result.snippet.title}?
большое спасибо! Я сделал. Сейчас я работаю над рендерингом эскиза с его помощью!
@GianinaSkarlett - Добро пожаловать! Эскизы находятся в ${result.snippet.thumbnails}. Я думаю, вы можете получить стандартную с ${result.snippet.thumbnails.default.url}.
Спасибо, @David! Я дам вам знать, как это происходит!
Можете ли вы опубликовать пример полученного ответа?