사용 목적 👀
유튜브의 영상을 실행시켜주는 youtube_player는 예제가 잘 되어있어 쉽게 작동이 됐지만, 문제는 해당 영상의 타이틀이나, 유튜버의 이름을 가져와야 해서 youtube_explode_dart를 사용하게 되었다. 사실 단일 영상의 경우 따로 서버에 저장해서 가져오는 방법을 사용해도 되지만, 우리가 이 라이브러리를 쓰는 이유는 만약 영상이 단일 영상이 아닌 채널의 형태로 되어있다면, 각 영상의 ID와 제목은 다 다를 것이다. 이를 가져오기 위해 우리는 이 라이브러리를 써야 했다.
사용 방법 👀
https://pub.dev/packages/youtube_explode_dart
처음에 이 사용방법 때문에 엄청 애를 먹었다.
Readme 예시에서는 1.9.1 버전을 사용하는데, install에서는 1.10.4 가 표기되어있다.
때문에 먼저 1.9.1 예시를 따라 해 보려고 했다.
import 'package:youtube_explode_dart/youtube_explode_dart.dart';
var yt = YoutubeExplode();
var video = yt.videos.get('https://youtube.com/watch?v=Dpp1sIL1m5Q');
var title = video.title; // "Scamazon Prime"
var author = video.author; // "Jim Browning"
var duration = video.duration; // Instance of Duration - 0:19:48.00000
이러한 예시가 있었는데 저 타이틀이나 이름을 가져오는 과정에서 video.title 같은 방법을 사용하는데
애초에 title이란 게 불러와지지가 않는다.. 이것 때문에 1차적으로 고생을 했다. ( command + click을 통하여 함수 내부로 엄청 들어갔다 나왔다 했지만 알 수 없었다.. )
이대로는 모르겠어서 Example 부분에 있는 함수를 똑같이 사용해보기로 했다
// ignore_for_file: avoid_print
import 'package:youtube_explode_dart/youtube_explode_dart.dart';
import 'package:youtube_explode_dart/src/youtube_explode_base.dart';
Future<void> main() async {
var yt = YoutubeExplode();
var video =
await yt.videos.get('https://www.youtube.com/watch?v=AI7ULzgf8RU');
print('Title: ${video.title}');
// Close the YoutubeExplode's http client.
yt.close();
}
이렇게 입력을 하니 video에서 title을 불러와지는 게 가능했다.. 딱히 달라진 것도 없는 것 같은데 왜 안됐었을까 보니
바로 asnyc ~ await의 차이였다. get ('url')을 통해 접속해서 정보를 받아와야 하는데, 정보를 받아올 시간을 안 주고 넘어가서 그런 것 같다. 때문에 정보를 받아올 시간을 주려고 await을 이용한 것 같다
이제는 되겠지 하고 기분 좋게 실행해본 결과..
왠지 라이브러리가 최신 버전이 아니라서 안 먹히는 것 같은 느낌적인 느낌이 들었다.
혹시 모르니 버전을 올리려고 1.10.4로 바꾸니,,
이건 또 무슨 일.. 이것 때문에 엄청 찾아보고 물어보기도 했으나 진전이 없었다..
(사실 이때 아주 조금 관두고 싶은 마음이 올라왔다.)
하루 쉬고 다시 심기일전해서 구글링을 하다가 희망을 발견했다.
https://github.com/Hexer10/youtube_explode_dart/issues/156
나랑 똑같이 고생하는 사람을 발견했고 여기서 해답을 얻을 수 있었다.
바로 라이브러리는 최신 버전 1.10.4를 사용하는 게 맞았고, 이 라이브러리를 사용하려면 아래처럼 dependency를 추가해줘야 한다
dependency_overrides:
meta: ^1.7.0
json_annotation: ^4.1.0
추가하고 다시 pub get을 해보니 경고는 뜨지만, 작동은 잘 됐다 😭
(pubspec.yaml에 dependency는 있지만 dependency_overrides라는 칸은 따로 없어서 그냥 저대로 복붙 해서 써줬다.. 이게 맞나?)
그러고 나서 코드를 실행해본 결과!!
경고는 뜨지만 드디어 작동이 된다,, 휴,,
이제 일반 비디오가 아닌 플레이리스트에서도 잘 되나 확인해보고, 앱에 뿌리는 것 까지 해봐야겠다..
'플러터(Flutter)' 카테고리의 다른 글
[플러터(Flutter)] - 이미지를 캐시에 저장하기 (cached _network_image) (1) | 2021.08.21 |
---|---|
[플러터(Flutter)] - SliverAppBar, SliverList, SliverToBoxAdapter (0) | 2021.08.13 |
[플러터(Flutter)] - "=>" 는 무슨 뜻일까? (Dart) (0) | 2021.07.15 |
[플러터(Flutter)] - ios 애뮬레이터 키보드 안 보일 때 (0) | 2021.07.07 |
[플러터(Flutter)] - don't support null safety (0) | 2021.06.24 |