import React from 'react';
import Nav from './Nav';
import VideoPlayer from './VideoPlayer';
import VideoList from './VideoList';
import { YOUTUBE_API_KEY } from "../../config/youtube";
import { searchYouTube } from '../searchYouTube';
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
videos: [],
currentVideo: null
};
}
componentDidMount() {
this.getYouTubeVideos('react tutorials');
}
getYouTubeVideos(query) {
var options = {
key: YOUTUBE_API_KEY,
query: query
};
searchYouTube(options, videos =>
this.setState({
videos: videos,
currentVideo: videos[0]
})
);
}
handleVideoListEntryTitleClick(video) {
this.setState({
currentVideo: video
});
}
render() {
return (
<div>
<Nav handleSearchInputChange={this.getYouTubeVideos.bind(this)} />
<div className="col-md-7">
<VideoPlayer video={this.state.currentVideo} />
</div>
<div className="col-md-7">
<VideoList
handleVideoListEntryTitleClick={this.handleVideoListEntryTitleClick.bind(
this
)}
videos={this.state.videos}
/>
</div>
</div>
);
}
}
export default App;
VideoList와 searchYouTube를 import 해오는 방법이 왜 다른지 궁금했다
import VideoList from './VideoList';
import { searchYouTube } from '../searchYouTube';
export 하는 방법에 따라 import 받아오는 방식이 달라진다..!!
// videoList
export default VideoList;
// searchYouTube
export const searchYouTube;
자신의 api key가 외부에 노출되서는 안된다.
그래서 해당 프로젝트에서는 config/youtube.js에 아래와 같이 작성하여 사용하고자 하는 파일에서 import하여 YOUTUBE_API_KEY
사용이 가능하다
export const YOUTUBE_API_KEY = '이 파일을 커밋하면 패스워드가 노출되는 것과 마찬가지입니다';
// searchYouTube.js
export const searchYouTube = ({ key, query, max = 5 }, callback) => {
window
.fetch(
`https://www.googleapis.com/youtube/v3/search?part=snippet&key=${key}&q=${query}&maxResult=${max}&type=video&videoEmbeddable=true`,
{
method: "GET"
}
)
.then(resp => resp.json())
.then(({ items }) => {
callback(items);
});
};
Youtube API 문서에서 제공하는 쿼리 매개변수 중 필요한 매개변수(key, q, maxResult, type, videoEmbeddable)를 적절히 사용하면 원하는 결과를 원하는 형태로 응답받을 수 있습니다
https://www.googleapis.com/youtube/v3/search?key=내KEY값
으로 시작하여 필요한 쿼리 매개변수를 뒤에 붙여주면 된다
https://www.googleapis.com/youtube/v3/search?part=snippet&key=${key}&q=${query}&maxResult=${max}&type=video&videoEmbeddable=true
에 사용된 쿼리 매개변수를 살펴보면,
아래의 쿼리 매개변수에 대한 모든 설명은 Youtube API 문서를 참고했다
part=snippet
key=${key}
- 자기 api key값을 넣어준다
q=${query}
maxResult=${max}
type=video
videoEmbeddable=true