2014-09-20 2 views

ответ

1

К сожалению, данные API-интерфейса youtube 3 не поддерживают поиск в списке воспроизведения, но, как работа, мы можем добавить строку к поиску пользователя, чтобы результаты были близки к тому, что необходимо, например, в моем случае у меня есть префикс все заголовки видео в определенном плейлисте с именем этого списка воспроизведения, а затем мне пришлось префикс поискового запроса пользователей с указанным именем списка воспроизведения, единственным недостатком является то, что мне пришлось переименовать все видео, чтобы включить префикс.

имя плейлиста: экзотические автомобили

Поисковый запрос: экзотические автомобили вход + пользователь

И не забывайте искать только видео канала.

1

Для ведения полнотекстового поиска в закрытых титрах (CC) в канале Youtube вы можете скачать все субтитры из канала и сделать локальный поиск текста в нем:

$ YouTube-DL --write- авто-суб --skip-загрузки "https://www.youtube.com/channel/UC6oh54zIYKyW6hgBiZzLLsA"

$ Grep -i -C 2 'осень' * .vtt

Примечание: Опция --write-авто-суб следует использовать при автор видео не загружал текст. В противном случае используйте --write-sub.

0

Я прочитал YouTuBe API documentation относительно запросов на плейлисты, и они не обеспечивают такую ​​функциональность, но вы могли бы использовать эту npm module для достижения этой:

npm install youtube-playlist-search 

или

yarn install youtube-playlist-search 

Путь к используйте что-то подобное на javascript:

var search = require('youtube-playlist-search'); 

var params = { 
    part: 'snippet,contentDetails', 
    maxResults: 25, 
    key: 'your_api_key' 
}; 

search('searchTerm', params, function(err, videos) { 
    if(err) return console.log(err); 
    console.dir(videos); 
}); 

Или вы можете также take a look here, где я использую его с реактивом, код будет примерно таким:

import _ from 'lodash'; 
import YTSearch from 'youtube-playlist-search'; 
import React, { Component } from 'react'; 
import logo from './logo.svg'; 
import './App.css'; 
import SearchBar from './components/search_bar'; 
import VideoList from './components/video_list'; 
import VideoDetail from './components/video_detail'; 

class App extends Component { 
    constructor(props) { 
    super(props); 

    this.state = { 
     videos: [], 
     selectedVideo: null 
    }; 

    this.key = process.env.REACT_APP_YTB_API_KEY_DEV 
    if (process.env.NODE_ENV === 'production') { 
     this.key = process.env.REACT_APP_YTB_API_KEY_PROD 
    } 

    this.params = { 
     part: 'snippet,contentDetails', 
     playlistId: 'PLH99prTh-VPqO7ld0o2Sny6bLxpf80Js0', 
     key: this.key 
    }; 

    this.videoSearch('') 
    } 

    videoSearch(term) { 
    YTSearch(term, this.params, (err, videos) => { 
     this.setState({ 
     videos: videos, 
     selectedVideo: videos[0] 
     }); 
    }); 
    } 

    render() { 
    const videoSearch = _.debounce((term) => {this.videoSearch(term)}, 300); 
    return (
     <div className="App"> 
     <header className="App-header"> 
      <img src={logo} className="App-logo" alt="logo" /> 
      <h1 className="App-title">Welcome to React</h1> 
     </header> 
     <SearchBar onSearchTermChange={videoSearch}/> 
     <VideoDetail video={this.state.selectedVideo}/> 
     <VideoList 
      onVideoSelect={selectedVideo => this.setState({selectedVideo})} 
      videos={this.state.videos}/> 
     </div> 
    ); 
    } 
} 

export default App; 
Смежные вопросы