본문 바로가기

개발일지/디스코드 봇

디스코드 봇 개발 일지 2023-01-11 - 유튜브 검색 기능, 영상 정보

 

※ 작성자가 작성한 내용이 일부 틀릴 수도 있음 주의

 

※ 작성자가 코드 쓰다가 계속 코드 수정함 주의

 

 

일일이 유튜브에서 검색해서 링크 긁어오는 것은 매우 비효율적이다.

 

 

이전에 짰던 형식은 단순히 url의 앞쪽이 유튜브인지를 확인해서 그냥 그대로 긁어오는 형식이었다.

 

당연하지만 사용하는 과정에서 매우 귀찮다.

 

물론 친구들이 원하기도 했고 말이다.

 

 

 

 

YoutubeDL.extract_info() with "ytsearch"

 

 

이전에는 다음과 같이 extract_info 를 사용했다.

 

str = " ".join(vars)
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
	if str[0:23] == "https://www.youtube.com" or str[0:16] == "https://youtu.be":
		info = ydl.extract_info(str, download = False)

 

 

url을 그대로 가져올 경우, len(vars) = 1 이므로 사실 상관없고, 그냥 해당 url에 맞는 영상 정보를 가져온다.

 

하지만 여기 str의 부분에 ytsearch를 이용해서 유튜브 검색 기능을 이용할 수 있다.

 

 

else:
	info = ydl.extract_info(f"ytsearch:{str}", download = False)['entries'][0]

 

 

f"ytserach:{검색내용}" 을 인자로 넣어주면, 검색내용을 유튜브에 검색한 목록을 얻을 수 있다.

 

그리고 그 리스트에 ['entries'][0] 를 넣어 가장 위에 나오는 (가장 연관성 높은) 영상 정보를 얻게 된다.

 

나머지 부분은 바꿀 필요가 없어 수정이 매우 쉬웠다.

 

 

 

extract_info로 얻는 영상 정보

 

 

유튜브 검색 기능을 이용해 영상을 가져오는 것은 좋지만,

 

정확히 어떤 영상을 가져와서 음악을 틀었는지를 알려면 바로 귀로 들어야 알아챌 수 있다.

 

정말 고맙게도, extract_info 로 얻을 수 있는 내용은 매우 많다.

 

 

# youtube_dl.YoutubeDL.extract_info() 값을 이하 info라 칭함
info['formats'][0]['url']	# 영상 소스 (계속 사용하던거)
info['webpage_url']		# 영상 URL
info['title']			# 영상 제목
info['uploader_url']		# 채널 URL
info['uploader']		# 채널 이름
info['description']		# 영상 설명
info['duration']		# 영상 길이
info['thumbnail']		# 영상 썸네일
info['upload_data']		# 영상 업로드 날짜

 

 

잘 이용해서 검색 들어간 영상이 맞는지 잘 맞는지, 현재 어떤 곡이 플레이되는지

 

확인하기 쉽도록 만들어보자.

 

아래는 현재 내가 작성한 봇으로 띄운 예시 모습이다.

 

 

어떤 영상을 틀었는지는 비밀이다

 

queue 를 표시할 때도 이용하면 좋다.

 

아 그러고보니 delete 명령어를 안 넣었네

 

다음에 만들어서 넣어야지

 

이걸 왜 까먹었지

 

 

 

그리고...

 

봇을 내가 컴퓨터를 안 켰을 때도 사용할 수 있도록

 

따로 서버 또는 비슷한 기능을 제공하는 웹ide를 이용하려했는데 (최대한 무료로 사용할 수 있는 곳)

 

왠지는 모르겠지만 음악이 한 2~3초 재생되다가 꺼진다.

 

Linux 환경에 맞게 잘 설정해주고 했는데

 

이거는 이유를 모르겠다. 찾아봐도 이유를 못 찾겠다.

 

예상되는 이유가 하나 있지만, 너무 Resource 자체의 이유라

 

다른 방도를 찾아봐야겠다.

728x90