🎬
youtubeダウンローダー作ってみた #2
前回からの変更点
前回の記事
環境
まずrisupu様のサーバーでcgi-bin内ならpython2.7が使えること(python3ではない)
そしてreplitは途中で止まったり遅いのでやめた
terminalが使えない
risupu様のサーバーはshell(sshなど同様)が使えないので、yt-dlpやその他のコマンドをbinaryで指定しなければならない
今回の目標
1サーバー(外部サービスなし)で、動画をdlするWebapi的なもの
やったこと
cgiを使用
まあcgi-binというぐらいだから使った
yt-dlpのbinaryを設置
理由は、python2.7なので、yt-dlpのデフォルトバージョンが動かない可能性があるから
ffmpegのbinaryを設置
なんかビルドしてくれてあるものがあるからしっかり使用
のffmpegをダウンロードpython宣言
#!/usr/bin/env python
#!/usr/bin/python
これをしないと動かなかった
パス宣言
import os
os.environ["PATH"] = "/usr/local/bin:/usr/bin:/bin"
os.environ["TMPDIR"] = "実際の任意のtmpパスを指定"
特にデフォルトのtmpが使えないのでオリジナルtmpディレクトリを設定
binaryのパスを指定
# 実際のパスに置き換えてください
yt_dlp_path = "./yt-dlp"
ffmpeg_path = "./ffmpeg"
コマンドを実行
import subprocess
command = [yt_dlp_path , "-o" , "%(title)s-%(id)s.%(ext)s" , "-f" , "22" , "--ffmpeg-location" , ffmpeg_path , url]
result = subprocess.check_output(command, stderr=subprocess.STDOUT)
ホントのコマンドに直すと
./yt-dlp -o %(title)s-%(id)s.%(ext)s -f 22 --ffmpeg-location ./ffmpeg ここにURL
これをすべてくっつけると(最小サンプルコード)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
os.environ["PATH"] = "/usr/local/bin:/usr/bin:/bin"
os.environ["TMPDIR"] = "./tmp/"
import requests
import cgi
import cgitb
import subprocess
# エラーのデバッグ情報を出力する
cgitb.enable()
form = cgi.FieldStorage()
url = 'https://www.youtube.com/watch?v=pgXpM4l_MwI'
# 実際のパスに置き換えてください
yt_dlp_path = "./yt-dlp"
ffmpeg_path = "./ffmpeg"
command = [yt_dlp_path , "-o" , "%(title)s-%(id)s.%(ext)s" , "-f" , "22" , "--ffmpeg-location" , ffmpeg_path , url]
result = subprocess.check_output(command, stderr=subprocess.STDOUT)
ソースコード
このまま使えば良さそう
注意事項&確認事項
tmpディレクトリーは絶対
tmp
で作るか
os.environ["TMPDIR"] = "./tmp/"
を変更する
終わりに
今回はsshが使えないサーバーで、yt-dlpを実装してみました
Discussion