Youtube Downloader

Youtoube Download Window OS์—์„œ Python์œผ๋กœ Youtube ์˜์ƒ์„ ๋‹ค์šด๋กœ๋“œ ํ•˜๋Š” ๋ฐฉ๋ฒ• 1. Python Code ์ž‘์„ฑ yt-dlp ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋ฐ›๋Š”๋‹ค. pip install yt-dlp ๋ช…๋ น์œผ๋กœ ์†์‰ฝ๊ฒŒ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•˜๋‹ค. github ์ฃผ์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. : https://github.com/yt-dlp/yt-dlp ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ์•„๋ž˜๋Š” ์ƒ˜ํ”Œ ์ฝ”๋“œ์ด๋‹ค. import yt_dlp import os import time ########## # ์„ค์ • ########## # ์ตœ๋Œ€ ์žฌ์‹œ๋„ ํšŸ์ˆ˜ MAX_RETRIES = 3 # ์žฌ์‹œ๋„ ์‚ฌ์ด์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„ (์ดˆ) RETRY_DELAY = 5 # ๋‹ค์šด๋กœ๋“œ ๋ฆฌ์ŠคํŠธ download_lists = [ { "name": 'FOLDER_NAME', # ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ํด๋” ์ด๋ฆ„ "url": 'https://www.youtube.com/watch?v=CJuIRe_1c2g&list=RDMM&start_radio=1&rv=R4CecLdF11E', # ๋‹ค์šด๋กœ๋“œ ํ•  playlist URL }, { "name": 'SAMPLE2', "url": 'https://www.youtube.com/watch?v=66l5r_IEZrI&list=RDGMEMYH9CUrFO7CfLJpaD7UR85w&start_radio=1&rv=CJuIRe_1c2g', }, ] ########## # ๋‹ค์šด๋กœ๋“œ ์‹œ์ž‘ ########## for idx, list in enumerate(download_lists): # 'ํด๋”์ด๋ฆ„/์˜์ƒ์ œ๋ชฉ.ํ™•์žฅ์ž' ํ˜•์‹์œผ๋กœ ๋‹ค์šด๋กœ๋“œ output_dir = os.path.join(f'./{list["name"]}/', '%(title)s.%(ext)s') ydl_opt = { 'outtmpl': output_dir, 'format': 'bestaudio/best', # ๋‹ค์šด๋กœ๋“œํ•  ํฌ๋งท ์ง€์ • 'download_archive': 'downloaded.txt', # ๋‹ค์šด๋กœ๋“œ ์•„์นด์ด๋ธŒ ํŒŒ์ผ ์ง€์ •(๋ฏธ๋ฆฌ ๋‹ค์šด๋ฐ›์€ ํ•ญ๋ชฉ๋“ค์„ ์ฒดํฌํ•˜์—ฌ ์ค‘๋ณต์œผ๋กœ ๋ฐ›์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ธฐ๋กํŒŒ์ผ) 'postprocessors': [{ 'key': 'FFmpegExtractAudio', 'preferredcodec': 'mp3', # mp3ํฌ๋ฉง์œผ๋กœ ๋ณ€ํ™˜ 'preferredquality': '192', }], 'verbose': True, # ์ž์„ธํ•œ ๋””๋ฒ„๊น… ์ •๋ณด ์ถœ๋ ฅ 'ignoreerrors': True, # ๋‹ค์šด๋กœ๋“œ ์˜ค๋ฅ˜ ๋ฌด์‹œ } for attempt in range(1, MAX_RETRIES + 1): try: with yt_dlp.YoutubeDL(ydl_opt) as ydl: ydl.download([ list["url"] ]) print(f'{list["name"]}:: ๋‹ค์šด๋กœ๋“œ ์™„๋ฃŒ') break except Exception as e: print(f'{list["name"]}:: ๋‹ค์šด๋กœ๋“œ ์‹คํŒจ ({attempt}/{MAX_RETRIES}): {e}') if attempt < MAX_RETRIES: print(f'{list["name"]}:: {RETRY_DELAY}์ดˆ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค...') time.sleep(RETRY_DELAY) else: print(f'{list["name"]}:: ์ตœ๋Œ€ ์žฌ์‹œ๋„ ํšŸ์ˆ˜๋ฅผ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.') print('๋ชจ๋“  ํ•ญ๋ชฉ ๋‹ค์šด๋กœ๋“œ ์™„๋ฃŒ') ๋‹ค๋ฅธ๊ฒƒ๋“ค์€ ์ˆ˜์ •ํ•  ํ•„์š” ์—†๊ณ , download_lists ์— ๋‹ค์šด๋กœ๋“œ ํ•  Youtube ์žฌ์ƒ๋ชฉ๋ก์„ ๋„ฃ์–ด์ค€๋‹ค. ...

<span title='2025-03-09 20:40:01 +0900 KST'>March 9, 2025</span>&nbsp;ยท&nbsp;2 min&nbsp;ยท&nbsp;AswinBlue

Delver

Delver ์‹œ์ž‘๋‚ ์งœ: March 18, 2023 ์ข…๋ฃŒ๋‚ ์งœ: March 28, 2023 ๋ชฉํ‘œ python ๊ธฐ๋ฐ˜ ์›น scrapping ๋ฐ ๊ฒฐ๊ณผ๋ฅผ slack ์— ์ „์†กํ•˜๋Š” slack bot ์š”๊ตฌ์‚ฌํ•ญ AWS lambda๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ž‘ ๋งค ์‹œ๊ฐ„๋งˆ๋‹ค ๋™์ž‘ํ•˜๋„๋ก ์„ค์ • [Delver]๐Ÿ”จ Web scrapper ์ž‘์„ฑ 1. ๊ตฌํ˜„ ๋‚ด์šฉ beautiful soup๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • web์„ scrap (API ์ฐธ์กฐ: https://beautiful-soup-4.readthedocs.io/en/latest/) ์—ฌ๋Ÿฌ ์‚ฌ์ดํŠธ์— ํ˜ธํ™˜๋˜๋„๋ก ๊ตฌ์กฐ๋ฅผ ์„ค์ • ์‚ฌ์ดํŠธ๋ณ„ ์†์„ฑ์„ json ํ˜•ํƒœ๋กœ ๊ธฐ๋ก ...

<span title='2024-01-30 21:21:43 +0900 KST'>January 30, 2024</span>&nbsp;ยท&nbsp;4 min&nbsp;ยท&nbsp;AswinBlue

FlickThrough

Flick Through github: https://github.com/AswinBlue/FlickThrough Link : aswinblue.github.io/FlickThrough/ ์‹œ์ž‘๋‚ ์งœ: August 21, 2023 ๋ชฉํ‘œ ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ฝ์–ด ๋‹จ์–ด ๋‹จ์œ„๋กœ ์Šฌ๋ผ์ด๋“œ ์‡ผ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์•ฑ ์ œ์ž‘ ์š”๊ตฌ์‚ฌํ•ญ ํ…์ŠคํŠธ ํŒŒ์ผ์˜ ๊ณต๋ฐฑ๊ณผ ์ค„๋ฐ”๊ฟˆ์„ ๊ธฐ์ค€์œผ๋กœ ๋‹จ์–ด๋ฅผ ๋‚˜๋ˆ„๊ณ  ์ด๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅ ์ถœ๋ ฅ์€ ํ•œ ๋‹จ์–ด์”ฉ ์ด๋ฃจ์–ด ์ง€๋ฉฐ ๋ถ„๋‹น 300๊ฐœ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ, ์†๋„๋Š” ์กฐ์ ˆ ๊ฐ€๋Šฅ ๋‹จ์–ด ์ž๋ฅด๋Š”๊ฑด ์ปค์Šคํ…€ ๊ฐ€๋Šฅ ํŠน์ • ๋ฌธ์ž๋งˆ๋‹ค ๋”œ๋ ˆ์ด ๋‹ค๋ฅด๊ฒŒ ์ค„ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ • ์Šคํฌ๋ฆฐ์ƒท ํ˜น์€ ํด๋ฆฝ๋ณด๋“œ์˜ ๋‚ด์šฉ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ ๊ธฐ๋Šฅ ๊ตฌํ˜„ 1. ๊ตฌํ˜„ ๋‚ด์šฉ UI ๊ตฌ์„ฑ ํ…์ŠคํŠธ๊ฐ€ ์ถœ๋ ฅ๋  ํ…์ŠคํŠธ๋ฐ•์Šค, ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ๋ฐ”, ์‹œ์ž‘/์ผ์‹œ์ •์ง€ ๋ฒ„ํŠผ, ์†๋„ ์กฐ์ ˆ ์Šคํฌ๋กค๋ฐ”, ํŒŒ์ผ ์ฝ๊ธฐ ๋ฒ„ํŠผ์„ ๊ตฌ์„ฑ ...

<span title='2024-01-30 21:12:32 +0900 KST'>January 30, 2024</span>&nbsp;ยท&nbsp;9 min&nbsp;ยท&nbsp;AswinBlue