2014-09-20 7 views

Répondre

1

Malheureusement, l'API 3 de données YouTube ne supporte pas la recherche dans une playlist, mais nous pouvons ajouter une chaîne à la recherche de l'utilisateur pour que les résultats soient proches de ce qui est nécessaire, dans mon cas par exemple tous les titres vidéo dans une playlist spécifique avec le nom de cette liste de lecture, puis je devais préfixer les utilisateurs de recherche avec le nom de playlist spécifié, le seul inconvénient est que je devais renommer toutes les vidéos pour inclure le préfixe.

nom de la playlist: les voitures exotiques

requête de recherche: les voitures exotiques + entrée utilisateur

Et ne pas oublier de rechercher des vidéos de canal seulement.

1

Pour faire la recherche en texte intégral dans des sous-titres (CC) dans un canal Youtube vous pouvez télécharger tous les sous-titres de la chaîne et faire la recherche de texte local en elle:

$ youtube-dl --write- auto-sous---skip télécharger "https://www.youtube.com/channel/UC6oh54zIYKyW6hgBiZzLLsA"

$ grep -i 2 'automne' C * de .vtt

note: Option --write-auto-sub doit être utilisé lorsque auteur de vidéos n'a pas téléchargé de texte. Sinon, utilisez --write-sub.

0

J'ai lu les YouTuBe API documentation concernant les demandes sur les listes de lecture et ils ne fournissent pas une telle fonctionnalité, mais vous pouvez utiliser cette npm module pour y parvenir:

npm install youtube-playlist-search 

ou

yarn install youtube-playlist-search 

La façon de utilisez-le est quelque chose comme ça sur 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); 
}); 

Ou vous pouvez également take a look here où je l'utilise avec React, le code ce sera quelque chose comme:

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; 
Questions connexes