連続したテキストからYoutube URL抜くだけでの正規表現grepメモ そこからyt-dlpする
3 min read
こんばんわ、無能です。
マストドンの書き込みとかをdumpするとこうなる。
/\u003e\u003ca href=\"https://youtube.com/watch?v=jL4NZ913v8E\u0026amp;feature=share\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"\u003e\u003cspan class=\"invisible\"\u003ehttps://\u003c/span\u003e\u003cspan class=\"ellipsis\"
とこの連続した文字列の中からyoutubeのURLだけを抽出したい。
grep -oP 'youtube.com\/watch\?v=…………' outbox.json > mstv.txt
grep -oP 'youtube.com\/shorts\/…………' outbox.json > mstv2.txt
一応、wwwがありなしで区別するのがめんどくさいのでyoutube.com以降だけマッチさせて、あとから置換する。
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8p\
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8p\
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=W7G-QtbTWg\
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=W7G-QtbTWg\
まだ詳しく見ていないが、なぜかイチ文字削れて\が入っているものもあるのでsed -iで消す。
sed -i 's/\\//g' mstv.txt
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8p
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8p
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=W7G-QtbTWg
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=W7G-QtbTWg
こんな感じになるので正しいURLの方の文字列をカウントしてみる。
echo "youtube.com/watch?v=g5HQFrSk4OA" | wc -c
32
32桁らしい。
ということで32桁のだけ抽出する。
grep -oP '^.{32}$' mstv.txt > mstvtmp.txt
と、なんか成功した風に書いてあるが再検証したらうまくいかなかった。32を31にしたらいけた。アレ、なんで?というので誰か教えてください。
grep -oP '^.{31}$' mstv.txt > mstvtmp.txt
youtube.com/watch?v=g5HQFrSk4OA
youtube.com/watch?v=g5HQFrSk4OA
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=RIqxyO3S8pc
こんな感じに重複してしまうので・・・。
uniqで重複するものを行ごと消す。
uniq mstvtmp.txt > newmstv.txt
念の為重複しないものを探して追記していく
uniq -u mstvtmp.txt >> newmstv.txt
youtube.com/watch?v=jL4NZ913v8E
youtube.com/watch?v=g5HQFrSk4OA
youtube.com/watch?v=RIqxyO3S8pc
youtube.com/watch?v=W7G-QtbTWgs
youtube.com/watch?v=DRVp_cmW3Nw
おっけーだ。
ということでyt-dlpでダウンロードするようにしてみる。
今回はmp4形式で保存します。
sed -i 's|youtube|yt-dlp -o "/media/ncp/yt/n/%(title)s" -f "bv[ext=mp4]+ba[ext=m4a]" --merge-output-format mp4 https://www.youtube|g' newmstv.txt
上記の時点で、wwwついたURLに置換してます。
別に、検索文字列を行頭である^でいいじゃーん!って声もありそうですが個人的に途中からの文字列で置き換えたほうが再現性高そうなのでこのやり方が好きです。
また、/が入っているのでsedで区切るのも|で行っています。|でなくてもいいんですけどね。
ほんで、名前をsh形式にしましょう。
mv newmstv.txt ytdl.sh
vi ytdl.sh
で#!/bin/bashを追記します。
実行権限を与えましょう。
chmod +x ./ytdl.sh
(ここで、./でやらねばーと思い立って今さらやる男。なしでも変わらないんですが。つけないと男として失格です。)
あとは、実行しておk。
なお、絶対的に最初のgrepの段階できれいにURLの文字列抜く方法あるはずです。まだまだあまあまなのでゆるしてください。なぜなのかまだ追ってすら無いから、逆にめんどくさいことしてると思いますがいろんなコマンド打って楽しいね、をやる回です。
おわり。