Develop/Flutter

Flutter에서 YouTube 검색 및 영상 조회 방법 총정리 (2024)

issuemaker99 2025. 3. 31. 17:29
728x90

YouTube API를 사용하지 않고 Flutter에서 YouTube 검색을 구현하는 방법을 찾고 있나요? 아니면 YouTube API 사용량 초과 오류를 해결하고 싶으신가요? 🤔

오늘은 YouTube API 없이 검색하는 방법, youtube_explode_dart 패키지를 활용한 영상 조회 방법, 그리고 검색 필터 적용법까지! 최신 YouTube 검색 구현 방법을 완벽 정리해드립니다. 🚀


🔥 1. YouTube API 없이 검색하는 방법 (검색 URL 활용)

✅ YouTube 검색 URL 구조

YouTube의 기본 검색 URL은 다음과 같습니다:

https://www.youtube.com/results?search_query=검색어

하지만 여기에 **특정 조건(필터)**을 추가할 수도 있습니다.

🎯 YouTube 검색 URL 필터 목록

필터 파라미터 설명
업로드 날짜 sp=EgIIAQ%3D%3D 오늘 업로드된 영상
  sp=EgQIAxAB 이번 주 업로드된 영상
  sp=EgQIAxAU 이번 달 업로드된 영상
정렬 기준 sp=CAASAhAB 관련성 높은 순 (기본값)
  sp=CAASAhAD 조회수 높은 순
영상 길이 sp=EgIYAw%3D%3D 4분 이하 (Shorts 포함)
  sp=EgIYAg%3D%3D 20분 이상 (긴 영상)

🔹 예제: 조회수 높은 Flutter 영상 검색 URL

https://www.youtube.com/results?search_query=Flutter&sp=CAASAhAD

✅ 검색 결과 "더보기" 구현 가능할까?

YouTube 검색 URL 방식에서는 더보기 버튼(페이징) 기능을 직접 제어할 수 없습니다. 하지만 WebView를 사용해 자동 스크롤 방식으로 구현 가능합니다.

_controller.runJavascript("window.scrollTo(0, document.body.scrollHeight);");

위 코드처럼 WebView에서 자동 스크롤을 내리도록 설정하면 YouTube의 "더보기" 기능을 사용할 수 있습니다.


🔥 2. youtube_explode_dart를 활용한 YouTube 영상 조회

YouTube API를 사용하지 않으면서 특정 채널이나 재생목록에서 영상 정보를 가져오는 방법입니다.

 youtube_explode_dart 설치하기

dependencies:
  youtube_explode_dart: ^1.12.0

✅ 특정 채널의 최신 영상 가져오기

var yt = YoutubeExplode();
var channelUploads = await yt.channels.getUploads("UCwXdFgeE9KYzlDdR7TG9cMw");
for (var video in channelUploads) {
  print('제목: ${video.title}');
  print('URL: https://www.youtube.com/watch?v=${video.id}');
}
yt.close();

✅ 특정 재생목록에서 영상 목록 가져오기

var yt = YoutubeExplode();
var playlist = await yt.playlists.getVideos("PLjxrf2q8roU3kzC9Gq0BkrGUCdQR-K8EY");
for (var video in playlist) {
  print('제목: ${video.title}');
}
yt.close();

✅ 특정 영상의 상세 정보 가져오기

var video = await yt.videos.get("n1Io0k5zm4U");
print('제목: ${video.title}');
print('조회수: ${video.engagement.viewCount}');

🔥 3. YouTube 검색 필터 적용 가능할까?

필터 적용 가능 여부 구현 방법
업로드 날짜 (최신 영상만 보기) ✅ 가능 channel.getUploads() 후 최신순 정렬
조회수 높은 영상 ✅ 가능 .sort((a, b) => b.engagement.viewCount.compareTo(a.engagement.viewCount))
영상 길이 필터링 ✅ 가능 .where((v) => v.duration < Duration(minutes: 5))

✅ 결론: 어떤 방법을 써야 할까?

방법 검색 가능? 필터 적용? 페이징 가능?
YouTube 검색 URL 활용 ✅ 가능 ✅ 가능 (URL 파라미터) ❌ 직접 불가능 (WebView 필요)
YouTube API ✅ 가능 ✅ 가능 ✅ 가능
youtube_explode_dart ❌ 검색 불가 ✅ 가능 (조회수, 길이, 날짜 정렬) ❌ 직접 불가능

🎯 추천:

  • 빠르게 YouTube 검색을 구현하고 싶다면? 👉 YouTube 검색 URL 활용
  • 특정 채널의 영상만 가져오고 싶다면? 👉 youtube_explode_dart 활용
  • 정확한 검색 결과 + 페이징이 필요하다면? 👉 YouTube API 활용 (API 키 필요)
LIST