[Youtube API] 검색어를 이용한 동영상 목록 보여주기(1)
저번 포스팅에 이어서 작성합니다.
[Youtube API] 인기 동영상 목록 보여주기(2) - 제목과 채널명 보여주기
Search 관련 링크

표시한 곳을 누르면 code를 사용할 수 있습니다.

이런 식으로 작성을 하여 EXCUTE를 누르시면 결과를 확인할 수 있고 SHOW CODE를 누르시면 코드를 확인하실 수 있습니다!
나온 코드를 이용해서 작성을 하시면 됩니다.
`https://youtube.googleapis.com/youtube/v3/search?part=snippet&maxResults=25&q=${query}&key=${apiKey}`,
저는 이렇게 나온 걸 가지고 사용하겠습니다 ㅎㅎ

이 전 포스팅과 구조가 많이 바뀌었네요...
View에서 통신을 하면 좋지 않기 때문에 통신하는 부분은 youtube.js로 옮겼습니다.
youtube.js
const apiKey = process.env.REACT_APP_API_KEY;
class Youtube {
  constructor(key) {
    this.key = key;
    this.getRequestOptions = {
      method: 'GET',
      redirect: 'follow',
    };
  }
  async mostPopular() {
    try {
      const response = await fetch(
        `https://youtube.googleapis.com/youtube/v3/videos?part=snippet&chart=mostPopular&maxResults=25&type=video&key=${apiKey}`,
        this.getRequestOptions
      );
      const result = await response.json();
      return result.items;
    } catch (error) {
      return console.log('error', error);
    }
  }
  async search(query) {
    try {
      const response = await fetch(
        `https://youtube.googleapis.com/youtube/v3/search?part=snippet&maxResults=25&q=${query}&key=${apiKey}`,
        this.getRequestOptions
      );
      const result = await response.json();
      return result.items.map((item) => ({ ...item, id: item.id.videoId }));
    } catch (error) {
      return console.log('error', error);
    }
  }
}
export default Youtube;
그런데 저번 포스팅에서 했던 인기 동영상과 return 문 쪽이 약간 다르죠?
왜냐하면 다르게 데이터가 넘어오더라고요.

인기 동영상 데이터에는 id가 바로 나왔는데

검색으로 찾을 때는 id가 오브젝트 형태입니다. 안에 videoId가 있어요.
result.items.map((item) => ({ ...item, id: item.id.videoId }));
그래서 기존 item 정보를 유지하고 아이디만 item.id.videoId로 덮어주었습니다.
App.js
function App({ youtube }) {
  const [videos, setVideos] = useState([]);
  const search = (query) => {
    youtube
      .search(query) //
      .then((videos) => setVideos(videos));
  };
  
  useEffect(() => {
    youtube
      .mostPopular() //
      .then((videos) => setVideos(videos));
  }, []);
  return (
    <div className={styles.app}>
      <SearchHeader onSearch={search} />
      <VideoList videos={videos} />
    </div>
  );
}
search_header.jsx
const SearchHeader = ({ onSearch }) => {
  const inputRef = useRef();
  const handleSearch = () => {
    const value = inputRef.current.value;
    onSearch(value);
  };
  const onClick = () => {
    handleSearch();
  };
  const onKeyPress = (event) => {
    if (event.key === 'Enter') {
      handleSearch();
    }
  };
  return (
    <header className={styles.header}>
      <div className={styles.logo}>
        <img className={styles.img} src="/images/logo.png" alt="logo" />
        <h1 className={styles.title}>Youtube</h1>
      </div>
      <input
        ref={inputRef}
        className={styles.input}
        type="search"
        placeholder="Search"
        onKeyPress={onKeyPress}
      />
      <button className={styles.button} type="submit" onClick={onClick}>
        <img
          className={styles.buttonImg}
          src="/images/search.png"
          alt="search"
        />
      </button>
    </header>
  );
};
export default SearchHeader;
버튼을 클릭하거나 input에서 enter를 치면 작동이 되도록 하였습니다.
Author And Source
이 문제에 관하여([Youtube API] 검색어를 이용한 동영상 목록 보여주기(1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rachaen/Youtube-API-검색어를-이용한-동영상-목록-보여주기1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)