min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

我流yt-dlpフロントエンド実装 → phpのexec()実行結果output配列からawkで任意列を取り出し成功

こんな感じのフロントエンド

f:id:min117:20220109084801p:plain

URL受け取ったサーバ側のphpbashコマンド(yt-dlp)を叩く。

min117.hatenablog.com

 

実行したコマンド文字列は画面にも表示する。

f:id:min117:20220109084900p:plain

bashコマンド(赤文字)は

 ・バックグラウンドで実行しないと処理待ちになっちゃうから、末尾にアンパサンド(&)つけてノンブロッキング実行にしてる。

 ・エラーも含めてログに落としたいので 2>&1 にしてる。

 ・ログはdoTUBEDL_F.logに書き込み。

 

ログはcatで確認

 $ cat doTUBEDL_F.log

f:id:min117:20220109090745p:plain

これもフロント画面(Web上)に表示したいからphpで作った。

 

下向き丸ヤジルシの青色アイコン

f:id:min117:20220109090039p:plain

クリックするとログ($ cat doTUBEDL_F.logの結果 すなわち yt-dlp -F URLの結果)が表示される。

mp4を含む行は青色、webmは赤色に着色。

f:id:min117:20220109085307p:plain

 

ログの左列にあるID番号は例えば

 yt-dlp -f 248 'URL'

とすればwebm(1920x1080)を指定してDLできるから

f:id:min117:20220109091102p:plain

これもフロントからできるようにする。

 

yt-dlp -F URL のログのうちmp4またはwebmが含まれる行左列にあるID番号だけを取り出して、それを指定してDLできるボタンにしちゃう。

f:id:min117:20220109090430p:plain


cat doTUBEDL_F.logした結果配列outputFDの各行($FDに格納)それぞれに対してawkで1列目を取り出して(print $1)、それを配列outputGNに格納していく。

 

つまりこんな感じ。

$ cat doTUBEDL_F.log | awk '{print $1}'

f:id:min117:20220109092352p:plain

結果、248だけを取り出せるので、それをphp配列outputGNに格納していくイメージ。

 

まずは失敗例。こうなっちゃった。

f:id:min117:20220109092018p:plain

 

170行目で実行したawkの結果を配列outputGNに格納してるんだけど

f:id:min117:20220109092559p:plain

その配列outputGNクリアしないままループの中で使い続けちゃってるので、Array内部にどんどん数字が溜まってちゃってる。

 

だから配列の先頭outputGN[0]を取り出しても常に139番のまま変わらない

f:id:min117:20220109092803p:plain

全部が「139番のダウンロード」になっちゃった。これじゃダメ。

 

本来はこうしたい。

f:id:min117:20220109093439p:plain

それぞれの番号ごとにダウンロードボタンができる。

 

正しいコードはこう。

f:id:min117:20220109093707p:plain

awkの結果を格納する配列outputGNループの毎回でunset()してクリアしてあげる。

 

これで正しくなった。

 

コピペ用保存

$commandFD =  'cat doTUBEDL_F.log 2>&1 &';

// ---------------------------------------------------

print '<b><font color="red">' . "$commandFD" . 'が生成されました</font></b><br>';

// print 'exec($commandFD, $outputFD, $retFD);<br>';

// shell_exec("$commandFD");

print '<br>';

// FD -> File to Download

exec($commandFD, $outputFD, $retFD);

foreach($outputFD as $FD){

    // 動画番号の入った配列をクリア

    unset($outputMOV_NUM);

    if (preg_match('/.*webm.*/', "$FD")) {

        print '<b><font color="red">' . "$FD" . '</b></font><br>';

        $commandGETWEBM = 'echo "' . "$FD" . '" | awk \'{print $1}\' ';

        exec($commandGETWEBM, $outputMOV_NUM, $retMOV);

        // print '<b><font color="red">' . "$commandGETWEBM" . 'が生成されました</font></b><br>';

        // print_r($outputMOV_NUM);

        print '<b><mark>' . "$outputMOV_NUM[0]" . '</mark></b><br>';

        // print '<a href="' . 'https://www.google.co.jp' . '" class="btn btn-warning" target="_blank">' . "$outputMOV_NUM[0]" . '番のwebmをダウンロード</a><br>';

        print '<a href="doTUBEDL.php?INTXT=' . "$myINTXT" . '&SAVEDIR=' . "$myGETSAVEDIR" . '&SAVE_YT_NUM=' . "$outputMOV_NUM[0]" . '" class="btn btn-warning" target="_blank">' . "$outputMOV_NUM[0]" . '番のwebmをダウンロード</a><br>';

    } else if (preg_match('/.*mp4.*/', "$FD")){

        print '<font color="blue">' . "$FD" . '</font><br>';

        ///// 271←これ(yt-dlp -Fのログの最左列)を取り出す

        ///// 271 webm 2114x1440 24 | 396.90MiB 718k https | vp9 718k video only 1440p, webm_dash

        ///// One Hour of Baroque Music for Walking [jDGdNyTqC-k].webm

        // $commandGETMP4 = "echo 12345";

        // $commandGETMP4 = 'echo "' . "$FD" . '"';

        $commandGETMP4 = 'echo "' . "$FD" . '" | awk \'{print $1}\' ';

        exec($commandGETMP4, $outputMOV_NUM, $retMOV);

        // print '<b><font color="blue">' . "$commandGETMP4" . 'が生成されました</font></b><br>';

        // print_r($outputMOV_NUM);

        print '<b><mark>' . "$outputMOV_NUM[0]" . '</mark></b><br>';

        ///// ダウンロードボタンsubmit実装

        // print '<input type="submit" value="' . "$FD" . '" class="btn btn-info"/></a><br>';

        // print '<a href="https://www.google.co.jp"><input type="submit" value="' . "$FD" . '" class="btn btn-info"/></a><br>';

        // print '<a href="https://www.google.co.jp">mp4をダウンロード<input type="submit" value="' . "$FD" . '" class="btn btn-primary"/></a><br>';

        // print '<a href="' . "$myDOM" . rawurlencode("$n") . '" class="btn btn-primary" target="_blank">' . "$FD" . '</a><br>';

        // print '<a href="' . "$myDOM" . rawurlencode("$n") . '" class="btn btn-primary" target="_blank">mp4をダウンロード</a><br>';

        // print '<a href="' . "$myDOM" . rawurlencode("$n") . '" class="btn btn-primary" target="_blank">' . "$outputMOV_NUM[0]" . '番のmp4をダウンロード</a><br>';

        // print '<a href="' . 'https://www.google.co.jp' . '" class="btn btn-primary" target="_blank">' . "$outputMOV_NUM[0]" . '番のmp4をダウンロード</a><br>';

        print '<a href="doTUBEDL.php?INTXT=' . "$myINTXT" . '&SAVEDIR=' . "$myGETSAVEDIR" . '&SAVE_YT_NUM=' . "$outputMOV_NUM[0]" . '" class="btn btn-primary" target="_blank">' . "$outputMOV_NUM[0]" . '番のmp4をダウンロード</a><br>';

 

    } else {

        print '<font color="black">' . "$FD" . '</font><br>';

    }

    print '<hr>';

}

 

 

 

 

 

その買うを、もっとハッピーに。|ハピタス